使用Python和OpenCV实现树莓派/PC实时摄像头数据共享,主要分为服务器和客户端两部分。

服务器Demo如下:

#服务器端import socket
import threading
import struct
import time
import cv2
import numpyclass Carame_Accept_Object:def __init__(self,S_addr_port=("",8880)):self.resolution=(640,480)       #分辨率self.img_fps=15                 #每秒传输多少帧数self.addr_port=S_addr_portself.Set_Socket(self.addr_port)#设置套接字def Set_Socket(self,S_addr_port):self.server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)self.server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #端口可复用self.server.bind(S_addr_port)self.server.listen(5)#print("the process work in the port:%d" % S_addr_port[1])def check_option(object,client):#按格式解码,确定帧数和分辨率info=struct.unpack('lhh',client.recv(8))if info[0]>888:object.img_fps=int(info[0])-888          #获取帧数object.resolution=list(object.resolution)# 获取分辨率object.resolution[0]=info[1]object.resolution[1]=info[2]object.resolution = tuple(object.resolution)return 1else:return 0def RT_Image(object,client,D_addr):if(check_option(object,client)==0):returncamera=cv2.VideoCapture(0)                                #从摄像头中获取视频img_param=[int(cv2.IMWRITE_JPEG_QUALITY),object.img_fps]  #设置传送图像格式、帧数while(1):time.sleep(0.1)             #推迟线程运行0.1s_,object.img=camera.read()  #读取视频每一帧object.img=cv2.resize(object.img,object.resolution)     #按要求调整图像大小(resolution必须为元组)_,img_encode=cv2.imencode('.jpg',object.img,img_param)  #按格式生成图片img_code=numpy.array(img_encode)                        #转换成矩阵object.img_data=img_code.tostring()                     #生成相应的字符串try:#按照相应的格式进行打包发送图片client.send(struct.pack("lhh",len(object.img_data),object.resolution[0],object.resolution[1])+object.img_data)except:camera.release()        #释放资源returnif __name__ == '__main__':camera=Carame_Accept_Object()while(1):client,D_addr=camera.server.accept()clientThread=threading.Thread(None,target=RT_Image,args=(camera,client,D_addr,))clientThread.start()

客户端Demo如下:

#客户端import socket
import cv2
import threading
import struct
import numpyclass Camera_Connect_Object:def __init__(self,D_addr_port=["",8880]):self.resolution=[640,480]self.addr_port=D_addr_portself.src=888+15                 #双方确定传输帧数,(888)为校验值self.interval=0                 #图片播放时间间隔self.img_fps=100               #每秒传输多少帧数def Set_socket(self):self.client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)self.client.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)def Socket_Connect(self):self.Set_socket()self.client.connect(self.addr_port)print("IP is %s:%d" % (self.addr_port[0],self.addr_port[1]))def RT_Image(self):#按照格式打包发送帧数和分辨率self.name=self.addr_port[0]+" Camera"self.client.send(struct.pack("lhh", self.src, self.resolution[0], self.resolution[1]))while(1):info=struct.unpack("lhh",self.client.recv(8))buf_size=info[0]                    #获取读的图片总长度if buf_size:try:self.buf=b""                #代表bytes类型temp_buf=self.bufwhile(buf_size):            #读取每一张图片的长度temp_buf=self.client.recv(buf_size)buf_size-=len(temp_buf)self.buf+=temp_buf      #获取图片data = numpy.fromstring(self.buf, dtype='uint8')    #按uint8转换为图像矩阵self.image = cv2.imdecode(data, 1)                  #图像解码gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)cv2.imshow(self.name, self.image)                   #展示图片except:pass;finally:if(cv2.waitKey(10)==27):        #每10ms刷新一次图片,按‘ESC’(27)退出self.client.close()cv2.destroyAllWindows()breakdef Get_Data(self,interval):showThread=threading.Thread(target=self.RT_Image)showThread.start()if __name__ == '__main__':camera=Camera_Connect_Object()camera.addr_port[0]=input("Please input IP:")camera.addr_port=tuple(camera.addr_port)camera.Socket_Connect()camera.Get_Data(camera.interval)

运行效果还是比较流畅的,因为传输网络视频流,所以画质欠佳。

树莓派视频传输改进方式见:https://blog.csdn.net/m0_38106923/article/details/82628061

树莓派视频传输最优方法:https://blog.csdn.net/m0_38106923/article/details/86562451

树莓派/PC实现实时摄像头数据共享(Python—OpenCV)相关推荐

  1. 树莓派/PC实现实时摄像头数据共享(Python—picamera)

    上次实验使用Python-OpenCV实现,发现传输效果并不是很理想,接下来使用Python和picamera实现树莓派/PC实时摄像头数据共享,主要也可分为服务器和客户端两部分. 服务器(PC/树莓 ...

  2. USB 摄像头 进行python OpenCV 操作的基础设置【以yolo 目标检测为例】

    文章大纲 基本读取摄像头逻辑 opencv 中设置摄像头参数 opencv 生成 特定样式图片 纯黑图片 websocket 发送图片 参考文献与学习路径 项目地址 基本读取摄像头逻辑 cap = c ...

  3. Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储

    原 Python+OpenCv实现AI人脸识别身份认证系统(2)--人脸数据采集.存储 2019年07月02日 08:47:52 不脱发的程序猿 阅读数 602更多 所属专栏: 人脸识别身份认证系统设 ...

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

    目录 一.任务概述 二.环境安装 三.实现 3.1 上位机端(PC服务器端) 3.2 树莓派端(客户请求端) 四.运行效果 一.任务概述 最近在做一个树莓派自动驾驶小车,上位机使用windows10 ...

  5. 使用Python,OpenCV在视频中进行实时条形码检测

    使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...

  6. python+opencv用电脑调用手机摄像头或其他网路摄像头

    python+opencv用电脑调用手机摄像头或其他网路摄像头 文章目录: 1 获取手机摄像头或网络摄像头的ip 1.1 获取手机摄像头的ip 1.2 获取网络摄像头的IP 1.3 关于RTSP协议 ...

  7. python控制摄像头拍照_python+opencv+pyqt5控制摄像头在Qlabel上显示

    import cv2 import numpy as numpy from PIL import * import sys from PyQt5.QtWidgets import * from PyQ ...

  8. python opencv调用摄像头并追踪移动物体,浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估...

    使用摄像头追踪人脸由于血液流动引起的面部色素的微小变化实现实时脉搏评估. 效果如下(演示视频): 由于这是通过比较面部色素的变化评估脉搏所以光线.人体移动.不同角度.不同电脑摄像头等因素均会影响评估效 ...

  9. Python+OpenCV 调用手机摄像头并实现人脸识别

    文章内容: 1.windows 环境下安装 OpenCV 机器视觉环境搭建: 2.基于通过 Python+OpenCV调用手机摄像头并实现人脸检测识别. 目录 1 实验环境 2 实验准备 2.1 下载 ...

最新文章

  1. oschina多媒体工具
  2. 基于ESP32的竞赛裁判系统功能调试-光电条检测板
  3. IC/FPGA 设计资源整理推荐
  4. 百度的云智一体,让视频变得“硬核性感”
  5. 安洵杯——game(混淆控制流平坦化)
  6. mysql通过binlog日志来恢复数据
  7. 【STM32】ST-LINK固件升级
  8. java查询数据库的方式_Java连接各种数据库方式速查表
  9. android实现通知栏搜索功能,actionBar+SearchView实现搜索功能
  10. Nginx中间件web服务安装
  11. Mosets Tree开发笔记
  12. yii2 asset资源 basePath,baseUrl,sourcePath
  13. 光伏发电系统最大功率点跟踪MPPT matlab/simulink仿真 扰动观察法
  14. springboot集成微信app支付
  15. 【GAMES-202实时渲染】4、3D空间全局光照(RSM、LPV、VXGI)
  16. [转]多CLIENT的SCC4设置
  17. 聊一聊数据分析师这个职业
  18. 高盛发布区块链报告:从理论到实践(中文版)七
  19. 数据挖掘与分析应用1:Excel表数据分析,sum,sumif,sumifs,vlookup,match,index,几个配合使用
  20. 马克飞象自定义代码段风格

热门文章

  1. android 快速点击开启某功能(不如快速点击打开开发者模式)
  2. flutter中的路由跳转
  3. Linux磁盘空间满的处理方法
  4. Go 学习笔记(5)— 算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、取地址和指针运算符
  5. eclipse或者myeclipse的代码提示功能
  6. 进程、线程、多线程相关总结
  7. usaco Picture(离散化求线段周长)
  8. apppath php,App.php
  9. 一篇论文摘要计算机英语,推荐:计算机毕业论文英文摘要的写作方法
  10. confirm自定义按钮文字_公众号涨粉神器——自定义菜单,互动运营更灵活!