如何使用 opencv 和 python 获取 Gstreamer 直播?
How to get Gstreamer live stream using opencv and python?
我正在通过在终端中使用以下代码从 raspberry pi 零流式传输实时 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()
.
之后总是 return None
我已经分别安装了opencv(cv2.__version__ = 3.4.0)和gstreamer(gst-launch-1.0)
我搜索了很多解决方案,但找不到简单的解决方案。我读过 "you should build opencv with gstreamer support" 之类的东西。我如何检查我的 opencv 是否具有 gstreamer 支持以及如何安全地构建具有 gstreamer 支持的 opencv 考虑到我在计算机上同时安装了 opencv 和 gstreamer(我不介意卸载它们但是因为我的 linux知识不是很好应该给我一步一步的指导:/)
有什么解决方案可以让我在不卸载重建 opencv 的情况下使用 python 和 cv2 库获取该流吗?
如果我需要重建带有 Gstreamer 模块支持的 opencv,我该如何安全地卸载我安装的库并重建 opencv?
非常感谢任何帮助!
如果您安装了支持 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)
...
如果不是,则必须重新安装支持 gstreamer 的 opencv。
我自己也遇到了类似的问题,并且 'good' 调试了它。 是我的亲戚 post。
您的问题没有提供关于您如何安装 cv2 python 模块的具体见解。如果您使用 pip 获取包,则无法为包启用 gstreamer。这是因为 pip 仅部署 cv2 包的预构建二进制文件,其中 none 支持 gstreamer。
您需要做的(确实相当容易)是,按照these instructions从源代码分发构建 OpenCV。
注意不要重蹈我的覆辙。使用 cmake 或 ccmake 配置构建时,请确保仅将 WITH_GSTREAMER 设置为 ON。确保 WITH_GSTREAMER_0_10 设置为关闭。
此外,在从源代码进行安装之前,请确保清除所有现有的二进制文件。
对于 cv2 的 pip 安装,这意味着:
pip unistall opencv-python
如果您已经从 opencv 源构建二进制文件,则必须:
sudo make uninstall
来自 <opencv-src>/build
文件夹。然后再试一次。
我正在通过在终端中使用以下代码从 raspberry pi 零流式传输实时 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)
我搜索了很多解决方案,但找不到简单的解决方案。我读过 "you should build opencv with gstreamer support" 之类的东西。我如何检查我的 opencv 是否具有 gstreamer 支持以及如何安全地构建具有 gstreamer 支持的 opencv 考虑到我在计算机上同时安装了 opencv 和 gstreamer(我不介意卸载它们但是因为我的 linux知识不是很好应该给我一步一步的指导:/)
有什么解决方案可以让我在不卸载重建 opencv 的情况下使用 python 和 cv2 库获取该流吗?
如果我需要重建带有 Gstreamer 模块支持的 opencv,我该如何安全地卸载我安装的库并重建 opencv?
非常感谢任何帮助!
如果您安装了支持 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)
...
如果不是,则必须重新安装支持 gstreamer 的 opencv。
我自己也遇到了类似的问题,并且 'good' 调试了它。
您的问题没有提供关于您如何安装 cv2 python 模块的具体见解。如果您使用 pip 获取包,则无法为包启用 gstreamer。这是因为 pip 仅部署 cv2 包的预构建二进制文件,其中 none 支持 gstreamer。
您需要做的(确实相当容易)是,按照these instructions从源代码分发构建 OpenCV。
注意不要重蹈我的覆辙。使用 cmake 或 ccmake 配置构建时,请确保仅将 WITH_GSTREAMER 设置为 ON。确保 WITH_GSTREAMER_0_10 设置为关闭。
此外,在从源代码进行安装之前,请确保清除所有现有的二进制文件。
对于 cv2 的 pip 安装,这意味着:
pip unistall opencv-python
如果您已经从 opencv 源构建二进制文件,则必须:
sudo make uninstall
来自 <opencv-src>/build
文件夹。然后再试一次。