【发布时间】:2018-12-15 06:13:51
【问题描述】:
我通过在终端中使用以下代码从树莓派零流式传输实时 USB 摄像头馈送:
gst-launch-1.0 -v v4l2src device=/dev/video0 ! "image/jpeg,width=640, height=480, framerate=30/1" ! rtpjpegpay ! udpsink host=<MyRPiIPHere> port=5000
通过在终端中使用以下代码,我可以毫无问题地从我的计算机(ubuntu 18.4)获取低延迟高帧率流:
gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, encoding-name=JPEG, payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink
但是,我想使用 python 和 opencv 获取该流,以便对图像进行一些操作。
当我尝试使用带有此代码的 cv2 库获取图像时:
cap = cv2.VideoCapture('udpsrc port=5000 ! application/x-rtp, encoding-name=JPEG, payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink')
它什么也抓不到。我还尝试将各种类型的! videoconvert ! video/x-raw, format=(string)BGR ! appsink 版本添加到视频捕获参数中。
frame 在调用ret, frame = cap.read() 之后总是返回None。
我已经分别安装了 opencv (cv2.__version__ = 3.4.0) 和 gstreamer (gst-launch-1.0)。
我搜索了很多解决方案,但找不到一个简单的解决方案。我读过类似“你应该用gstreamer支持构建opencv”之类的东西。我如何检查我的opencv是否支持gstreamer以及如何安全地构建带有gstreamer支持的opencv,记住我在计算机上安装了opencv和gstreamer(我不介意卸载它们,但因为我的linux知识不好应该给我一步一步的说明:/)
我有什么解决方案可以在不卸载重建 opencv 的情况下使用 python 和 cv2 库获取该流?
如果我需要使用 Gstreamer 模块支持重建 opencv,如何安全地卸载已安装的库并重建 opencv?
非常感谢任何帮助!
【问题讨论】:
-
你好,我的opencv是在Gstreamer支持下编译的,但很遗憾:调用ret后frame也总是None,frame = cap.read() @Oncel Umut TURER:我的位置与你是:streming 在命令行中与 gstreamer 一起工作,但我不能让它与 python 一起工作。最后找到解决办法了吗?
标签: python opencv ubuntu raspberry-pi gstreamer