【问题标题】:How to get Gstreamer live stream using opencv and python?如何使用 opencv 和 python 获取 Gstreamer 直播流?
【发布时间】: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?

非常感谢任何帮助!

【问题讨论】:

  • this answer
  • 你好,我的opencv是在Gstreamer支持下编译的,但很遗憾:调用ret后frame也总是None,frame = cap.read() @Oncel Umut TURER:我的位置与你是:streming 在命令行中与 gstreamer 一起工作,但我不能让它与 python 一起工作。最后找到解决办法了吗?

标签: python opencv ubuntu raspberry-pi gstreamer


【解决方案1】:

我自己也遇到了一个类似的问题,并且在调试它时度过了一段“愉快”的时光。 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

来自&lt;opencv-src&gt;/build 文件夹。然后继续,再试一次。

【讨论】:

  • 感谢您的回答。在没有找到答案之后,我做了类似的事情并且它奏效了。但是,我一直很忙,无法在这里发布答案。因此感谢您的详细解释
  • 依赖设置可能很痛苦......很高兴我能提供帮助。
【解决方案2】:

如果您安装了带有 gstreamer 支持的 opencv,我可以回答有关如何查找的问题。

将此粘贴​​到您的 Python 脚本中:

print(cv2.getBuildInformation())

你应该找到类似的东西:

    Video I/O:
...
    GStreamer:                   
      base:                      YES (ver 1.8.3)
      video:                     YES (ver 1.8.3)
      app:                       YES (ver 1.8.3)
...

如果不是YES,则必须重新安装支持gstreamer的opencv。

【讨论】:

  • 它说不 :( 那么如何安装带有 GStreamer 支持的 opencv?我认为单独安装它们是行不通的 :(
猜你喜欢
  • 1970-01-01
  • 2021-02-13
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 1970-01-01
  • 2016-07-15
相关资源
最近更新 更多