我通过在终端中使用以下代码从树莓派零流式传输实时 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()
后.我已经分别安装了 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?
任何帮助深表感谢!
最佳答案
我自己刚刚经历了一个类似的问题,并且在调试它时度过了一段“愉快”的时光。 Here是我的相关帖子。
关于如何安装 cv2 python 模块,您的问题没有给出具体的见解。如果您使用 pip 获取包,则无法为包启用 gstreamer。这是因为 pip 仅部署 cv2 包的预构建二进制文件,并且它们都不支持 gstreamer。
您需要做的( 这确实相当容易 )是,跟随 these instructions从源代码分发构建 OpenCV。
小心不要犯我犯的同样的错误。使用 cmake 或 ccmake 配置构建时,请确保仅将 WITH_GSTREAMER 设置为 ON。确保 WITH_GSTREAMER_0_10 设置为 OFF。
此外,在从源代码安装之前,请确保鞭打所有现有的二进制文件。
对于 cv2 的 pip 安装,这意味着:
pip unistall opencv-python
如果您已经从 opencv 源构建了二进制文件,则必须:
sudo make uninstall
来自
<opencv-src>/build
文件夹。然后继续,再试一次。
关于python - 如何使用 opencv 和 python 获取 Gstreamer 直播流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51213730/