PC电脑实时接收树莓派摄像头图像数据并显示(Python实现)

这篇具有很好参考价值的文章主要介绍了PC电脑实时接收树莓派摄像头图像数据并显示(Python实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、任务概述

二、环境安装

三、实现

3.1 上位机端(PC服务器端)

3.2 树莓派端(客户请求端)

四、运行效果


一、任务概述

最近在做一个树莓派自动驾驶小车,上位机使用windows10 PC电脑,下位机小车采用树莓派4B,树莓派上安装了USB免驱摄像头。上位机通过SSH来控制和分析树莓派小车。树莓派上使用python版的opencv读取摄像头图像数据。

实验时发现,上位机通过SSH控制树莓派时会自发的将远程图像数据也显示过来(调用cv2.imshow的时候),但是这种通过SSH传输图像的方式会造成SSH卡顿,导致视频图像卡、下位机机电控制卡。但是在小车运行的时候它上面的树莓派不方便连接显示器,而我们又需要实时反馈运动中的小车图像给上位机来调试分析。因此,需要一种高效的在树莓派和PC之间通过无线局域网的视频图像传输方案。

网上方法有很多,这里介绍一种自己亲身试验过并且相对比较简单的方法。

二、环境安装

首先确保上位机(PC电脑)和下位机(树莓派)均安装好了python版的opencv和numpy。

接下来在上下位机均安装帧传输模块zmq:

sudo pip3 install zmq

然后在上下位机均安装帧编解码库pybase64:

sudo pip3 install pybase64

到这里环境安装结束。

三、实现

3.1 上位机端(PC服务器端)

import cv2
import zmq
import base64
import numpy as np

def main():
    '''
    主函数
    '''
    context = zmq.Context()
    footage_socket = context.socket(zmq.PAIR)
    footage_socket.bind('tcp://*:5555')
    cv2.namedWindow('Stream',flags=cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)


    while True:
        print("监听中")
        frame = footage_socket.recv_string() #接收TCP传输过来的一帧视频图像数据
        img = base64.b64decode(frame) #把数据进行base64解码后储存到内存img变量中
        npimg = np.frombuffer(img, dtype=np.uint8) #把这段缓存解码成一维数组
        source = cv2.imdecode(npimg, 1) #将一维数组解码为图像source
        cv2.imshow("Stream", source) #把图像显示在窗口中
        cv2.waitKey(5) #延时等待,防止出现窗口无响应

 
if __name__ == '__main__':
    '''
    程序入口
    '''
    main()

然后在上位机上运行上述脚本代码。

3.2 树莓派端(客户请求端)

import cv2
import zmq
import base64


def main():
    '''
    主函数
    '''
    IP = '192.168.2.148' #上位机视频接受端的IP地址

    # 创建并设置视频捕获对象
    cap = cv2.VideoCapture(0)
    print("摄像头是否已经打开 ? {}".format(cap.isOpened()))
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)  # 设置图像宽度
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)  # 设置图像高度

    # 建立TCP通信协议
    contest = zmq.Context()
    footage_socket = contest.socket(zmq.PAIR)
    footage_socket.connect('tcp://%s:5555'%IP)

    while True:
        # 读取图像
        ret, frame = cap.read()

        # 转换为流数据并编码
        encoded, buffer = cv2.imencode('.jpg', frame) 
        jpg_as_test = base64.b64encode(buffer) #把内存中的图像流数据进行base64编码

        # 发送数据
        footage_socket.send(jpg_as_test) #把编码后的流数据发送给视频的接收端
        cv2.waitKey(5) #延时等待,防止出现窗口无响应


if __name__ == '__main__':
    '''
    程序入口
    '''
    main()

在下位机端运行上述脚本代码。

四、运行效果

PC电脑实时接收树莓派摄像头图像数据并显示(Python实现)

 整体运行还是比较顺畅的,解决了上下位机图像实时显示的问题。文章来源地址https://www.toymoban.com/news/detail-514935.html

到了这里,关于PC电脑实时接收树莓派摄像头图像数据并显示(Python实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 电脑获取网络摄像头图像及调用

    目前市面上常见的摄像头大体有以下几种类型,一种是usb摄像头,一种是带wifi网络摄像头,还有一种有线网络摄像头,通过一根网线连接电脑用于传输图像。本文主要讲解下有线网络摄像头的调用配置。 这种摄像头一般有两个接口,分别是网口和电源口,接线非常简单就是

    2024年02月01日
    浏览(29)
  • Python实现PC摄像头扫描二维码,让你的电脑变身QR码识读器!

    目录 简介: 源代码: 源代码说明: 效果如下所示: 使用PC摄像机扫描二维码可以有很多应用场景,例如: 支付宝、微信支付等移动支付方式需要使用二维码进行支付,PC摄像机可以扫描这些支付二维码,从而实现PC端支付功能; 在生产制造过程中,可以使用二维码来管理产

    2024年02月03日
    浏览(25)
  • Pyqt5+Opencv实现摄像头图像的实时读取并显示

    QTimer在界面中不可见,在UI设计器中也找不到它,只能通过纯代码实现,主要作用是定时特定的时间。 想要掌握QTimer只需掌握setInterval(设置定时时间,单位ms)、start(启动定时器),和定时时间到时所发出的信号timeout()即可。程序设计的思路: 1.先设定定时周期 2.绑定timeout()信号

    2024年02月04日
    浏览(34)
  • VC++中使用OpenCV读取图像、读取本地视频、读取摄像头并实时显示

    最近闲着跟着油管博主murtazahassan,学习了一下LEARN OPENCV C++ in 4 HOURS | Including 3x Projects | Computer Vision,对应的Github源代码地址为:Learn-OpenCV-cpp-in-4-Hours OpenCV是一个开源的计算机视觉库,其官网地址为:https://opencv.org/,对应Github源码地址为:https://github.com/opencv/opencv,目前来说

    2024年01月17日
    浏览(35)
  • [Python] pyqt6+opencv实现摄像头图像的实时读取并显示(完整源代码)

    本文将会介绍如何通过opencv来实时捕获摄像头的图像,并通过pyqt6进行图像视频呈现。 1. 通过opencv的VideoCapture类读取摄像头的每一帧图像,通过pyqt6的QLabel来显示图像 2. 根据获取的图像的宽和高大小以及QLabel的大小来动态调整最后输出的图像的宽和高 3. 调整窗体大小,动态调

    2024年01月24日
    浏览(36)
  • 用python的socket通信将Yolov5的USB摄像头实时推理结果发送给另一台电脑

    将配置yolov5的电脑当客户端,局域网内的另一台电脑当服务端,利用python的socket通讯,将客户端Yolov5的USB摄像头实时推理结果发送给另一台电脑的服务端。 一、修改Yolov5的detect.py文件,启动客户端 1.1在文件前添加 import socket #include 1.2在 LOGGER.info前添加以下代码 # Print time (

    2024年02月09日
    浏览(34)
  • 树莓派4B摄像头安装+Ubuntu22.04系统摄像头识别

    树莓派4B安装上摄像头后,是不能立即使用的,需要进行一些配置才能使用,本文详细说明了配置过程和测试结果。 执行以下命令,检测是否可以识别摄像头: 结果如下: 返回结果:supported=0 detected=0,说明此时摄像头硬件还没有识别出来,而且设备是不支持摄像头配件的,

    2024年02月22日
    浏览(52)
  • 【树莓派笔记】树莓派摄像头的简单使用

    这里使用的是树莓派CSI (Camera Serial Interface)摄像头。引脚面朝micoHDMI接口处。关机后安装,热插拔可能无法检测到。 终端输入   之后重启即可 命令行用 raspistill 使用摄像头进行拍照。 可以用 -e png 指定生成jpg、png、gif、bmp格式的图片,后三种无损,生成速度会慢些。 raspiy

    2024年02月15日
    浏览(41)
  • 树莓派——opencv打开树莓派摄像头调试记录

    目录 一、安装包:(注意换要源,不要用系统默认源) 问题1:磁盘空间不足——把根目录扩展到整个SD卡 解决:把根目录扩展到整个SD卡 二、下载 1、先创建opencv目录: 2、下载 问题:fatal: unable to access \\\'https://github.com/opencv/opencv.git/\\\': gnutls_handshake() failed: The TLS connection was

    2024年02月11日
    浏览(34)
  • 【树莓派】摄像头的基本使用

    本次实验目标是: 1、完成树莓派使用CSI摄像头拍取照片,拍摄视频 2、使用socket进行网络拍照控制和图片传输功能。 树莓派4B 树莓派摄像头 VNC-Viewer eclipse/VS Code(Java) 将树莓派断电,并将CSI摄像头接入靠近网孔的排孔中,CSI摄像头蓝色面朝网孔方向。 终端执行指令 使能摄

    2023年04月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包