python - 如何使用 opencv 和 python 获取 Gstreamer 直播流?

标签 python opencv ubuntu raspberry-pi gstreamer

我通过在终端中使用以下代码从树莓派零流式传输实时 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/

相关文章:

python - 在python中提取不匹配的字符串

python - Facebook 连接 django/python

c# - 如何在 C# 中检测图像中的对象?

python - 在 Ubuntu 上安装 OpenCV 时出现 "fatal error: Eigen/Core: No such file or directory"

ubuntu - 解决 conda 环境卡住

python - 如何在列表中拆分字符串以在 Python 中创建键值对

python - 使用 SAGE 进行二进制字段反转

python - 如何读取和解码印度 Aadhaar 卡图像上的安全二维码

python - 给定圆心的半径和坐标,如何获得圆区域内像素的像素中位数?

ubuntu - Kubernetes:Linux docker-multinode 集群中的特权容器