树莓派/PC实现实时摄像头数据共享(Python—picamera)
2021/6/29 11:22:53
本文主要是介绍树莓派/PC实现实时摄像头数据共享(Python—picamera),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
上次实验使用Python—OpenCV实现,发现传输效果并不是很理想,接下来使用Python和picamera实现树莓派/PC实时摄像头数据共享,主要也可分为服务器和客户端两部分。
服务器(PC/树莓派)Demo如下:
import numpy as np import cv2 import socket class VideoStreamingTest(object): def __init__(self, host, port): self.server_socket = socket.socket() self.server_socket.bind((host, port)) self.server_socket.listen(0) self.connection, self.client_address = self.server_socket.accept() self.connection = self.connection.makefile('rb') self.host_name = socket.gethostname() self.host_ip = socket.gethostbyname(self.host_name) self.streaming() def streaming(self): try: print("Host: ", self.host_name + ' ' + self.host_ip) print("Connection from: ", self.client_address) print("Streaming...") print("Press 'q' to exit") # need bytes here stream_bytes = b' ' while True: stream_bytes += self.connection.read(1024) first = stream_bytes.find(b'\xff\xd8') last = stream_bytes.find(b'\xff\xd9') if first != -1 and last != -1: jpg = stream_bytes[first:last + 2] stream_bytes = stream_bytes[last + 2:] image = cv2.imdecode(np.frombuffer(jpg, dtype=np.uint8), cv2.IMREAD_COLOR) cv2.imshow('image', image) if cv2.waitKey(1) & 0xFF == ord('q'): break finally: self.connection.close() self.server_socket.close() if __name__ == '__main__': # host, port h, p = "192.168.0.4", 8000 VideoStreamingTest(h, p)
客户端(树莓派)Demo如下:
import io import socket import struct import time import picamera # create socket and bind host client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('192.168.2.104', 8000)) connection = client_socket.makefile('wb') try: with picamera.PiCamera() as camera: camera.resolution = (320, 240) # pi camera resolution camera.framerate = 15 # 15 frames/sec time.sleep(2) # give 2 secs for camera to initilize start = time.time() stream = io.BytesIO() # send jpeg format video stream for foo in camera.capture_continuous(stream, 'jpeg', use_video_port = True): connection.write(struct.pack('<L', stream.tell())) connection.flush() stream.seek(0) connection.write(stream.read()) if time.time() - start > 600: break stream.seek(0) stream.truncate() connection.write(struct.pack('<L', 0)) finally: connection.close() client_socket.close()
无论是运行速度还是画质都是比较理想的。
树莓派与PC视频数据传输 最优方法:https://blog.csdn.net/m0_38106923/article/details/86562451
这篇关于树莓派/PC实现实时摄像头数据共享(Python—picamera)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享