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

news2025/3/12 23:38:20

测试realsense安装:

import pyrealsense2 as rs
import numpy as np
import cv2

def 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'):
                break
    finally:
        # 停止管道
        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():
    # 配置RealSense
    pipeline = 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'):
            break

    cv2.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   # 禁用开机自启

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2311588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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;点击屏幕右下角的通知…

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;但是属于特例&…

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

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

STM32之软件SPI

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

从零开始实现大语言模型(十三):预训练大语言模型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;支持视频、音乐和图像…

智慧消防新篇章: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博客 …

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

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

第六课:数据库集成: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; 蓝桥云课签约作者、…

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…

可视化+图解链表

链表&#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…

正十七边形尺规作图证明——从高斯的发现到几何实现

正十七边形尺规作图证明——从高斯的发现到几何实现 1. 引言&#xff1a;一个历史性的数学突破 在欧几里得几何中&#xff0c;尺规作图&#xff08;仅使用直尺和圆规&#xff09;是最为基础的几何构造方法。古希腊数学家已知如何构造正三角形、正方形和正五边形&#xff0c;但…

常见Web应用源码泄露问题

文章目录 前言一、常见的源码泄露漏洞git源码泄露SVN源码泄露DS_Store文件泄漏网站备份压缩文件泄露WEB-INF/web.xml泄露CVS泄露.hg源码泄露Bazaar/bzr泄露.swp文件泄露 前言 在Web应用方面对于安全来说&#xff0c;可能大家对SQL注入、XSS跨站脚本攻击、文件上传等一些漏洞已…

使用Modelsim手动仿真

FPGA设计流程 在设计输入之后,设计综合前进行 RTL 级仿真,称为综合前仿真,也称为前仿真或 功能仿真。前仿真也就是纯粹的功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟。在完成一个设计的代码编写工作之后,可以直接对代码进行仿真,…