我正在尝试用 Python 开发一个程序,通过 ML 过程将网络摄像头捕获的视频流式传输到“互联网”。
是否有专门的 Python 包旨在处理实时网络摄像头捕获和来自互联网的流式传输/接收?我对 ML 流程了解得相当清楚,但目前需要从存储加载,而我试图从本质上了解如何用 Python 制作 P2P 视频聊天客户端。
任何指针都非常感谢
您可以使用
opencv-python
从网络摄像头捕获视频,如下所示:
import cv2
cap = cv2.VideoCapture(0) # Open the default camera (0)
while True:
ret, frame = cap.read() # Read a frame from the webcam
# Perform your ML processing here on 'frame'
cv2.imshow('Webcam', frame) # Display the frame
if cv2.waitKey(1) & 0xFF == ord('q'): # Press 'q' to exit
break
cap.release()
cv2.destroyAllWindows()
对于通过网络流式传输视频,您可以使用
imagezmq
库将 OpenCV 图像从一台计算机流式传输到另一台计算机。它基于 ZeroMQ,这是一个消息传递库,允许您通过网络连接多个设备。
import cv2
import zmq
import base64
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5555") # Set the appropriate address and port
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
# Perform your ML processing here on 'frame'
_, buffer = cv2.imencode('.jpg', frame)
jpg_as_text = base64.b64encode(buffer)
socket.send(jpg_as_text)
cap.release()
import zmq
import cv2
import numpy as np
import base64
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://sender_ip:5555") # Replace 'sender_ip' with the actual sender's IP
socket.setsockopt_string(zmq.SUBSCRIBE, '')
while True:
jpg_as_text = socket.recv()
jpg_original = base64.b64decode(jpg_as_text)
jpg_as_np = np.frombuffer(jpg_original, dtype=np.uint8)
frame = cv2.imdecode(jpg_as_np, flags=1)
cv2.imshow('Receiver', frame)
if cv2.waitKey(1) & 0xFF == ord('q'): # Press 'q' to exit
break
cv2.destroyAllWindows()
这是视频流设置的基本方法,使用
OpenCV
进行网络摄像头捕获、帧上的 ML 处理,并使用 imagezmq
通过网络流传输帧。但请记住,设置 P2P 视频聊天客户端涉及更多复杂性,例如处理网络发现、建立连接、处理延迟以及可能合并信令协议。对于成熟的 P2P 视频聊天,您可以考虑专门为实时通信设计的其他库或框架,例如 WebRTC。
您可以从我发现的本教程中获得更清晰的想法:https://pyimagesearch.com/2019/04/15/live-video-streaming-over-network-with-opencv-and-imagezmq/