【问题标题】:Install gstreamer support for opencv python package为 opencv python 包安装 gstreamer 支持
【发布时间】:2019-01-08 16:16:30
【问题描述】:

我已经从源代码构建了我自己的 opencv python 包。

import cv2
print(cv2.__version__)

打印:3.4.5

现在我面临的问题是关于使用 opencv 的 VideoCapture 类中的 gstreamer。我试图让这个最小的工作示例在 python3 上运行

cap = cv2.VideoCapture("videotestsrc ! appsink")

if not cap.isOpened():
    print("Cannot capture test src. Exiting.")
    quit()

while True:
    ret, frame = cap.read()
    if ret == False:
        break
    cv2.imshow("CVtest",frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

捕获失败,产生上面的打印(请参阅if 声明)。我检查了:

import cv2
print(cv2.getBuildInformation())

打印:

Video I/O:
DC1394:                      NO
FFMPEG:                      NO
  avcodec:                   NO
  avformat:                  NO
  avutil:                    NO
  swscale:                   NO
  avresample:                NO
GStreamer:                   NO
libv4l/libv4l2:              NO
v4l/v4l2:                    linux/videodev2.h

看到这一点,我的 gstreamer 管道不起作用是绝对有道理的。我确保在 OpenCV 的 ccmake 期间将 WITH_GSTREAMER 设置为 ON(它已经是)。问题仍然存在。我什至也尝试将 WITH_GSTREAMER_0_10 设置为 ON。从 cv2 python 模块启用 gstreamer 仍然没有运气。

在有人建议使用 pip3 安装 cv2 之前。我也试过了。从 pip 获取包的问题是,它根本不允许您配置 gstreamer 支持。

谁能在这里提供帮助?

【问题讨论】:

    标签: python python-3.x opencv gstreamer


    【解决方案1】:

    opencv support forum 的帮助下,我能够解决这个问题。查看 cmake 输出提示问题:

    -- Checking for module 'gstreamer-base-0.10'
    --   No package 'gstreamer-base-0.10' found
    -- Checking for module 'gstreamer-video-0.10'
    --   No package 'gstreamer-video-0.10' found
    -- Checking for module 'gstreamer-app-0.10'
    --   No package 'gstreamer-app-0.10' found
    -- Checking for module 'gstreamer-riff-0.10'
    --   No package 'gstreamer-riff-0.10' found
    -- Checking for module 'gstreamer-pbutils-0.10'
    --   No package 'gstreamer-pbutils-0.10' found
    

    在 ccmake 期间,我将 WITH_GSTREAMER 和 WITH_GSTREAMER_0_10 都设置为 ON。似乎 cmake 更喜欢 gstreamer0.10 标志而不是 gstreamer1.0 标志。由于我只安装了 gstreamer1.0,opencv 完全无法设置 gstreamer 依赖项。

    我确保鞭打所有以前部署的二进制文件:

    cd <opencv-src>/build 
    sudo make uninstall
    

    然后我只是重新安装,调整后的设置(根据我上面的知识):

    ccmake ..
    make -j8
    sudo make install
    

    当我

    import cv2
    print(cv2.getBuildInformation())
    

    我的控制台现在输出

    Video I/O:
    DC1394:                      NO
    FFMPEG:                      NO
      avcodec:                   NO
      avformat:                  NO
      avutil:                    NO
      swscale:                   NO
      avresample:                NO
    GStreamer:                   
      base:                      YES (ver 1.8.3)
      video:                     YES (ver 1.8.3)
      app:                       YES (ver 1.8.3)
      riff:                      YES (ver 1.8.3)
      pbutils:                   YES (ver 1.8.3)
    libv4l/libv4l2:              NO
    v4l/v4l2:                    linux/videodev2.h
    

    底线是,如果您确实想要 gstreamer1.0,请不要在 cmake 期间将 WITH_GSTREAMER_0_10 设置为 ON。在这种情况下,您只能将 WITH_GSTREAMER 设置为 ON

    【讨论】:

      【解决方案2】:

      对于那些在 Windows 上遇到同样问题的人...我必须设置以下 CMake 选项:

      1. 仅将“WITH_GSTREAMER”选项设置为 True,“WITH_GSTREAMER_0_10”必须为 FALSE
      2. 添加新条目“GSTREAMER_DIR”=(gstreamer 的路径) 对我来说是“C:/gstreamer/1.0/x86_64” 我找到了这个解决方案here

      我的 OpenCV 版本:3.4.3

      【讨论】:

        【解决方案3】:

        安装包libgstreamer1.0-devlibgstreamer-plugins-base1.0-dev 帮助我解决了这个问题。

        sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
        

        【讨论】:

        • 如何在opencv-python 4.1.2版本中安装DC1394?如果没有 CAP_DC1394,我无法为我的 IP 摄像机设置缓冲区大小。
        猜你喜欢
        • 1970-01-01
        • 2011-03-12
        • 1970-01-01
        • 2017-01-20
        • 2014-07-09
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多