当前位置: 首页 > article >正文

Raspberry pi4 realsense图像发送和自动启动服务

测试realsense安装:

import pyrealsense2 as rs
import numpy as np
import cv2def main():# 配置RealSense管道pipeline = rs.pipeline()config = rs.config()# 启用RGB和彩色深度流config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)# 启动流pipeline.start(config)try:while True:# 等待对齐的帧frames = pipeline.wait_for_frames()color_frame = frames.get_color_frame()depth_frame = frames.get_depth_frame()if not color_frame or not depth_frame:continue# 将帧转换为NumPy数组color_image = np.asanyarray(color_frame.get_data())depth_image = np.asanyarray(depth_frame.get_data())# 归一化深度图用于显示depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)# 显示RGB和彩色深度图cv2.imshow('RealSense RGB', color_image)cv2.imshow('RealSense Depth', depth_colormap)# 按 'q' 退出if cv2.waitKey(1) & 0xFF == ord('q'):breakfinally:# 停止管道pipeline.stop()cv2.destroyAllWindows()if __name__ == "__main__":main()

使用ZMQ发送数据:camera_server.py

import pyrealsense2 as rs
import numpy as np
import cv2
import zmq# 设置ZMQ
context = zmq.Context()
socket = context.socket(zmq.PUB)  # 使用发布订阅模式
socket.bind("tcp://*:5555")  # 绑定到本机5555端口def main():# 配置RealSensepipeline = rs.pipeline()config = rs.config()config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)pipeline.start(config)try:while True:frames = pipeline.wait_for_frames()color_frame = frames.get_color_frame()depth_frame = frames.get_depth_frame()if not color_frame or not depth_frame:continue# 转换数据color_image = np.asanyarray(color_frame.get_data())depth_image = np.asanyarray(depth_frame.get_data())# 压缩RGB图像_, color_encoded = cv2.imencode('.jpg', color_image, [cv2.IMWRITE_JPEG_QUALITY, 80])# 压缩深度图(使用PNG无损压缩)_, depth_encoded = cv2.imencode('.png', depth_image)# 发送数据(RGB前缀 "RGB", 深度前缀 "DEPTH")socket.send_multipart([b"RGB", color_encoded.tobytes()])socket.send_multipart([b"DEPTH", depth_encoded.tobytes()])finally:pipeline.stop()if __name__ == "__main__":main()

接收图像:

import zmq
import cv2
import numpy as np# 设置ZMQ
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://<服务器IP>:5555")  # 替换为服务器IP
socket.setsockopt_string(zmq.SUBSCRIBE, "RGB")
socket.setsockopt_string(zmq.SUBSCRIBE, "DEPTH")def main():while True:topic, img_data = socket.recv_multipart()if topic == b"RGB":# 解码RGB图像color_image = cv2.imdecode(np.frombuffer(img_data, dtype=np.uint8), cv2.IMREAD_COLOR)cv2.imshow("Received RGB", color_image)elif topic == b"DEPTH":# 解码深度图像depth_image = cv2.imdecode(np.frombuffer(img_data, dtype=np.uint8), cv2.IMREAD_UNCHANGED)depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)cv2.imshow("Received Depth", depth_colormap)# 退出条件if cv2.waitKey(1) & 0xFF == ord('q'):breakcv2.destroyAllWindows()if __name__ == "__main__":main()

在数梅派中设置自动运行脚本:

sudo nano /etc/systemd/system/camera.service
[Unit]
Description=RealSense Camera Service
After=network.target[Service]
ExecStart=/home/raspi/miniforge3/envs/go1/bin/python /home/raspi/camera_server.py
WorkingDirectory=/home/raspi
StandardOutput=inherit
StandardError=inherit
Restart=always
User=raspi[Install]
WantedBy=multi-user.target

启动服务 

sudo systemctl daemon-reload
sudo systemctl enable camera.service
sudo systemctl start camera.service

检查服务:

sudo systemctl status camera.service

停止或禁用服务:

sudo systemctl stop camera.service   # 停止服务
sudo systemctl disable camera.service   # 禁用开机自启

相关文章:

Raspberry pi4 realsense图像发送和自动启动服务

测试realsense安装&#xff1a; import pyrealsense2 as rs import numpy as np import cv2def main():# 配置RealSense管道pipeline rs.pipeline()config rs.config()# 启用RGB和彩色深度流config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)config.ena…...

Git - 补充工作中常用的一些命令

Git - 补充工作中常用的一些命令 1 一些场景1.1 场景11.2 场景21.3 场景31.4 场景41.5 场景51.6 场景61.7 场景71.8 场景81.9 场景91.10 场景101.11 场景111.12 场景121.13 场景131.14 场景141.15 场景15 2 git cherry-pick \<commit-hash\> 和 git checkout branch \-\-…...

电脑网络出现问题!简单的几种方法解除电脑飞行模式

在某些情况下&#xff0c;您可能需要关闭电脑上的飞行模式以便重新连接到 Wi-Fi、蓝牙或其他无线网络。本教程中简鹿办公将指导您如何在 Windows 和 macO S操作系统上解除飞行模式。 一、Windows 系统下解除飞行模式 通过快捷操作中心 步骤一&#xff1a;点击屏幕右下角的通知…...

CefSharp 文件下载和保存功能-监听前端事件

重点在 启用文件下载 和 通过 JavaScript 调用 C# 保存文件&#xff1a; 1. 添加文件下载处理器 (DownloadHandler) 在 VueFormService 类中&#xff0c;添加一个实现 IDownloadHandler 接口的类&#xff0c;用于处理文件下载到本地。 // 新增的 DownloadHandler 类 public c…...

PQL查询和监控各类中间件

1 prometheus的PQL查询 1.1 Metrics数据介绍 prometheus监控中采集过来的数据统一称为Metrics数据&#xff0c;其并不是代表具体的数据格式&#xff0c;而是一种统计度量计算单位当需要为某个系统或者某个服务做监控时&#xff0c;就需要使用到 metrics prometheus支持的met…...

【从零开始学习计算机科学】数字逻辑(九)有限状态机

【从零开始学习计算机科学】数字逻辑(九)有限状态机 有限状态机状态机的表示方法有限状态机的Verilog描述有限状态机 有限状态机(简称状态机)相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状…...

java错题总结

本篇文章用来记录学习javaSE以来的错题 解答&#xff1a;重载要求俩个方法的名字相同&#xff0c;但参数的类型或者个数不同&#xff0c;但是不要求返回类型相同&#xff0c;所以A正确。 重写还需要要求返回类型相同&#xff08;呈现父子类关系也可以&#xff0c;但是属于特例&…...

12.【线性代数】——图和网络

十二 图和网络&#xff08;线性代数的应用&#xff09; 图 g r a p h { n o d e s , e d g e s } graph\{nodes, edges\} graph{nodes,edges}1.关联矩阵2. A A A矩阵的零空间&#xff0c;求解 A x 0 Ax0 Ax0 电势3. A T A^T AT矩阵的零空间&#xff0c;电流总结电流图结论 …...

【C++】ImGui:VSCode下的无依赖轻量GUI开发

本教程将手把手带您用纯原生方式构建ImGui应用&#xff0c;无需CMake/第三方库。您将全程明了自己每个操作的意义&#xff0c;特别适合首次接触GUI开发的新手。 环境配置 安装VSCode 作用&#xff1a;轻量级代码编辑器&#xff0c;提供智能提示操作&#xff1a; 官网下载安装…...

新编大学应用英语综合教程2 U校园全套参考答案

全套答案获取&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/389618f53143...

Python数据可视化——Matplotlib的基本绘图:图形、轴、标签

Matplotlib的绘图系统是由多个层次组成的,它的基本结构包括图形(Figure)、坐标轴(Axes)、刻度(Ticks)、标签(Labels)等多个部分。理解这些基本组件,有助于更好地使用Matplotlib绘制和优化图表。在本节中,我们将结合NumPy数组,详细讲解Matplotlib的基本结构,并展示…...

STM32之软件SPI

SPI传输更快&#xff0c;最大可达80MHz&#xff0c;而I2C最大只有3.4MHz。输入输出是分开的&#xff0c;可以同时输出输入。是同步全双工。仅支持一主多从。SS是从机选择线。每个从机一根。SPI无应答机制的设计。 注意&#xff1a;所有设备需要共地&#xff0c;时钟线主机输出&…...

Java 实现 Oracle 的 MONTHS_BETWEEN 函数

介绍 因为系统迁移, 有一些函数要转成 Java 版本, Oracle 的 官方介绍 - MONTHS_BETWEEN MONTHS_BETWEEN returns number of months between dates date1 and date2. The month and the last day of the month are defined by the parameter NLS_CALENDAR. If date1 is late…...

【从零开始学习计算机科学】数字逻辑(五) Verilog HDL语言

【从零开始学习计算机科学】数字逻辑(五) Verilog HDL语言 Verilog HDL语言8位全加器8位计数器2位比较器三态驱动器Verilog HDL模块的结构模块声明。端口定义。信号类型。功能描述verilog描述级别verilog关键字verilog标识符编写Verilog HDL源代码的标准数据类型常量变量nets…...

从零开始实现大语言模型(十三):预训练大语言模型GPTModel

1. 前言 使用梯度下降算法通过下一个token预测任务预训练大语言模型GPTModel&#xff0c;前向传播流程每次会输入一个batch的长度均为context_len的训练样本&#xff0c;执行 batch_size context_len \text{batch\_size}\times\text{context\_len} batch_sizecontext_len次下…...

Permute for Mac v3.12.1 文件格式转换器 支持M、Intel芯片

Mac毒搜集到的Permute 提供简单的视频格式转换功能&#xff0c;可以简单的将视频文件转换为你想要的格式。将你想要转换的视频拖到软件窗口内&#xff0c;然后选择你想要转换的格式即可。 应用介绍 Permute是一款Mac上易用的媒体格式转换工具&#xff0c;支持视频、音乐和图像…...

DeepSeek group-limited expert routing和负载均衡

Ref https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/model.py GitHub - deepseek-ai/EPLB: Expert Parallelism Load Balancer DeepSeek-V3 Technical Report DeepSeek的路由方法 class Gate(nn.Module):def __init__(self, args: ModelArgs):super().__…...

智慧消防新篇章:4G液位/压力传感器,筑牢安全防线!

火灾无情&#xff0c;防患未“燃”&#xff01;在智慧消防时代&#xff0c;如何实现消防水系统的实时监测、预警&#xff0c;保障人民生命财产安全&#xff1f;山东一二三物联网深耕物联网领域&#xff0c;自主研发4G液位、4G压力智能传感器&#xff0c;为智慧消防水位、水压无…...

C++ primier plus 函数探幽第二部分

系列文章目录 C primer plus 第一节 步入C-CSDN博客 C primer plus 第二节 hello world刨析-CSDN博客 C primer plus 第三节 数据处理-CSDN博客 C primer plus 第四节 复合类型-CSDN博客 C primer plus 第五节 循环-CSDN博客 C primier plus 第七节 函数探幽第一部分-CSDN博客 …...

DBus名词术语命名规范详解:构建清晰、规范的DBus通信

引言 DBus&#xff08;Desktop Bus&#xff09;是一种高效、灵活的进程间通信&#xff08;IPC&#xff09;机制&#xff0c;广泛应用于Linux桌面环境中。为了确保DBus通信的清晰性和规范性&#xff0c;DBus定义了一套严格的命名规范&#xff0c;涵盖了总线、服务名、对象路径、…...

用低代码平台集成人工智能:无需专业开发也能实现智能化

引言&#xff1a;人工智能的普及与企业需求 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;越来越多的企业开始意识到其在提升运营效率、优化客户体验和推动业务创新方面的巨大潜力。从智能客服到自动化决策支持&#xff0c;从数据分析到个性化推荐&#x…...

Java停车平台高并发抢锁技术方案设计 - 慧停宝开源停车管理平台

Java停车平台高并发抢锁技术方案设计 一、业务场景特征 瞬时流量峰值 早晚高峰时段&#xff08;07:30-09:00, 17:30-19:00&#xff09;请求量激增10倍热门商圈停车场每秒并发请求可达5000 QPS 资源竞争特性 单个车位被多人同时抢占&#xff08;超卖风险&#xff09;用户操作链…...

C++关键字:typename 用于依赖名消歧器(disambiguator)

目录 1. 说明 2. 示例 1. 说明 在模板&#xff08;包括别名模板&#xff09;的声明或定义中&#xff0c;非当前实例的成员且依赖于模板参数的名称不视为类型&#xff0c;除非使用关键字 typename 或除非它已被建立为类型名称&#xff08;例如使用 typedef 声明或用于命名基…...

第六课:数据库集成:MongoDB与Mongoose技术应用

本文详细介绍了如何在Node.js应用程序中集成MongoDB数据库&#xff0c;并使用Mongoose库进行数据操作。我们将涵盖MongoDB在Ubuntu 20系统中的安装、Bash命令的CRUD操作、Mongoose数据建模&#xff08;Schema/Model&#xff09;、关联查询与聚合管道&#xff0c;以及实战案例—…...

TypeError: Cannot set properties of undefined (setting ‘xxx‘)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

Gravitino源码分析-SparkConnector 实现原理

Gravitino SparkConnector 实现原理 本文参考了官网介绍&#xff0c;想看官方解析请参考 官网地址 本文仅仅介绍原理 文章目录 Gravitino SparkConnector 实现原理背景知识-Spark Plugin 介绍(1) **插件加载**(2) **DriverPlugin 初始化**(3) **ExecutorPlugin 初始化**(4) *…...

windows下使用msys2编译ffmpeg

三种方法&#xff1a; 1、在msys2中使用gcc编译 2、在msys2中使用visual studio编译&#xff08;有环境变量&#xff09; 3、在msys2中使用visual studio编译&#xff08;无环境变量&#xff09; 我的环境&#xff1a; 1、msys2-x86_64-20250221 2、vs2015 3、ffmpeg-7.1…...

Linux内核自定义协议族开发指南:理解net_device_ops、proto_ops与net_proto_family

在Linux内核中开发自定义协议族需要深入理解网络协议栈的分层模型。net_device_ops、proto_ops和net_proto_family是三个关键结构体,分别作用于不同的层次。本文将详细解析它们的作用、交互关系及实现方法,并提供一个完整的开发框架。 一、核心结构体的作用与层级关系 struct…...

可视化+图解链表

链表&#xff08;Linked list&#xff09;是一种常用的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含数据域和指针域。指针域存储了下一个节点的地址&#xff0c;从而建立起各节点之间的线性关系。 1、链表节点 1.1 节点构成 链表节点如下图所示&#xff…...

Docker参数,以及仓库搭建

一。Docker的构建参数 注释&#xff1a; 1.对于CMD&#xff0c;如果不想显示&#xff0c;而是使用交互界面&#xff1a;docker run -ti --rm --name test2 busybox:v5 sh 2.对于CMD&#xff0c;一个交互界面只可以使用一个&#xff0c;如果想多次使用CMD&#xff0c;则用ENTR…...