我正在尝试创建一个简单的应用程序来使用 OpenCV 通过 Python 3 中的套接字发送实时流视频。我是 OpenCV 和套接字编程的新手,所以如果您能提供详细的答案,我将不胜感激。谢谢你。
这里是 sender.py
import socket
import time
import cv2
capture = cv2.VideoCapture(0)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('192.168.1.10', 50505))
while True:
ret, frame = capture.read()
data = cv2.imencode('.jpg', frame)[1].tostring()
sock.sendall(data)
time.sleep(2)
这是receiver.py
import socket
import cv2
import numpy as np
import time
HOST = '192.168.1.10'
PORT = 50505
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('Socket created')
s.bind((HOST, PORT))
print('Socket bind complete')
s.listen(10)
print('Socket now listening')
conn, addr = s.accept()
while True:
data = conn.recv(8192)
nparr = np.fromstring(data, np.uint8)
frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
cv2.imshow('frame', frame)
time.sleep(2)
这是错误
receiver.py", line 29, in <module>
cv2.imshow('frame', frame)
cv2.error: D:\Build\OpenCV\opencv-3.4.0\modules\highgui\src\window.cpp:339:
error: (-215) size.width>0 && size.height>0 in function cv::imshow
原文由 crtIT 发布,翻译遵循 CC BY-SA 4.0 许可协议
我是 VidGear Video Processing python 库的作者,该库现在还提供 NetGear API ,专门设计用于通过网络在互连系统之间实时同步传输视频帧。您尝试如下:
A. 服务器端:(最低限度示例)
打开您最喜欢的终端并执行以下 python 代码:
注意: 您可以在服务器端按键盘上的 [Ctrl+c] 随时在服务器端和客户端结束流式传输!
B. 客户端:(最低限度示例)
然后在同一系统上打开另一个终端并执行以下 python 代码并查看输出:
NetGear 目前支持两种 ZeroMQ 消息传递模式:即
zmq.PAIR
和zmq.REQ and zmq.REP
支持的协议是:'tcp' and 'ipc'
可以在这里找到更高级的用法: https ://abhitronix.github.io/vidgear/latest/gears/netgear/overview/