python - Gstreamer 输入到 opencv
问题描述
从这个链接我想我可能已经接近了,但是当我使用流时,除了 Nonetype 错误之外,我没有收到任何错误。
cap = cv2.VideoCapture("tcpclientsrc host=192.168.1.111 port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! opencvsink sync=false")
我正在努力寻找上述行中的错误。有没有人做到这一点并介意帮助我。
我有一个树莓派使用 gstreamer 发布视频流,并且可以成功地将其流式传输到终端中带有 gstreamer 的 Ubuntu pc。
发件人:
raspivid -t 999999 -h 720 -w 1080 -fps 25 -hf -b 2000000 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.1.111 port=5000
接收者
gst-launch-1.0 -v tcpclientsrc host=192.168.1.111 port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
我试图开始工作的python脚本
import cv2
cap = cv2.VideoCapture('tcpclientsrc host=192.168.1.111 port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! '
'videoconvert ! appsink')
while True:
r, frame = cap.read()
try:
cv2.imshow('yes', frame)
except cv2.error as e:
print(e)
给出错误OpenCV(3.4.3) /io/opencv/modules/highgui/src/window.cpp:356: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'
解决方案
与许多其他人一起发布的对话帮助我制定了解决方案。我使用 GStreamer 和 OpenCV 使用以下方法将视频从 Raspberry Pi 4 Model B 无线传输到 Jetson Nano:
在 Raspberry Pi 上启动 GStreamer:
raspivid -t 0 -h 720 -w 1080 -fps 25 -hf b 2000000 -o – | gstlaunch-1.0 v fdsrc ! h264parse ! rtph264pay ! config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.1.147 port=5000
在 Jetson Nano 终端中接收视频流:
gst-launch-1.0 -v tcpclientsrc host=192.168.1.147 port=5000 ! gdpdepay ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink sync=false
在 Jetson Nano VideoCapture 对象中接收视频流:
import cv2
import matplotlib.pyplot as plt
RaspiStreamCam=cv2.VideoCapture(‘tcpclientsrc host=192.168.1.147 port=5000 ! gdpdepay ! rtph264depay ! h264parse ! omxh264dec ! nvvidconv ! video/x-raw, format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink’, cv2.CAP_STREAMER)
while True:
ret, frameRaspiIP=RaspiStreamCam.read()
cv2.imshow(‘RaspiStreamCam’,frameRaspiIP)
if cv2.waitKey(1)==ord(‘q’):
break
RaspiStreamCam.release()
cv2.destroyAllWindows()
推荐阅读
- php - 如何在没有模型的 Yii 框架的下拉列表中添加指向所有选项的链接?
- c# - 尝试激活“”时无法解析类型“”的服务
- ios - iOS:NSManagedObjectContext / NSFetchRequest / NSEntityDescription 的问题
- google-apps-script - 通过基于时间的触发器发送具有函数运行的电子邮件
- xcode - 在安装 Xcode 10 GM 之前卸载 Xcode 9.4.1?
- reactjs - 卸载时 react.cloneElement 中的属性设置未定义类型错误反应
- memory - 谷歌云平台内存使用总和
- c# - 如何防止 MVC 使用 JSON 属性?
- bazel - 如何让 Bazel、ccache 和沙盒协同工作(ccache 只读文件系统)
- ecmascript-6 - 空手道可用于 ecmascript-6