2

我使用战士分支(poky 战士、meta-tegra Warriors-l4t-r32.2、openembedded Warriors)和 CUDA 10 在 Jetson Nano 上使用 Yocto/poky 创建了一个最小的 xfce 图像。

图像启动并完美运行,相机测试:

$ gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=3820, height=2464, framerate=21/1, format=NV12' ! nvvidconv flip-method=0 ! 'video/x-raw,width=960, height=616' ! nvvidconv ! nvegltransform ! nveglglessink -e

奇迹般有效。

现在我想在相机源上使用 OpenCV,但我无法让它工作。

我已将这些软件包添加到IMAGE_INSTALL

...
opencv \
libopencv-core \
libopencv-imgproc \
opencv-samples \
gstreamer1.0-omx-tegra \
python3 \
python3-modules \
python3-dev \
python-numpy \
...

安装 OpenCV。当我运行 /usr/bin/opencv_version 时,它返回版本 3.4.5,python 版本是 3.7.2,GCC 版本是 7.2.1。

当我尝试运行此 OpenCV 测试代码时,它会返回

[ WARN:0] VIDEOIO(createGStreamerCapture(filename)): trying ...

(python3.7:5163): GStreamer-CRITICAL **: ..._: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed
[ WARN:0] VIDEOIO(createGStreamerCapture(filename)): result=(nil) isOpened=-1 ...

Unable to open camera

我试过在网上四处寻找解决方案,但它们似乎不起作用。

编辑:在 VideoCapture 函数中使用 CAP_GSTREAMER 似乎确实存在问题,因为使用 CAP_FFMPEG 运行相同的程序而不是在 mp4 视频上运行良好。

仅使用cv2.VideoCapture("/dev/video0", CAP_FFMPEG)isOpen=-1 返回。如何让相机在 python 中打开?

4

2 回答 2

2

这是您所说的适合您的管道:

gst-launch-1.0 -v nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=3820, height=2464, framerate=21/1, format=NV12' ! nvvidconv flip-method=0 ! 'video/x-raw,width=960, height=616' ! nvvidconv ! nvegltransform ! nveglglessink -e

这是脚本中提到的管道:

gst-launch-1.0 -v nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=3280, height=2464, framerate=21/1, format=NV12' ! nvvidconv flip-method=0 ! 'video/x-raw, width=820, height=616, format=BGRx' ! videoconvert ! video/x-raw, format=BGR ! appsink

工作管道和非工作管道之间的区别在于添加了videoconvertappsink 错误GStreamer-CRITICAL **: ..._: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed表明您的系统中缺少一些 GStreamer 元素。您可以尝试通过将以下包组添加到您的图像来添加缺少的插件:

gstreamer1.0-plugins-base

或者,您可以将管道替换为face_detect.py您的工作管道,但请记住,脚本可能需要将视频转换为 BGR,然后才能将其提供appsink给算法才能工作。您可能需要查找该nvidconv元素的文档以查看是否受支持。

编辑:从您的评论来看,您可能也失踪gstreamer1.0-python了。

于 2019-09-18T20:04:33.057 回答
0

使用以下 gstreamer 管道:

流='nvarguscamerasrc!video/x-raw(memory:NVMM), width=%d, height=%d, format=(string)NV12, framerate=(fraction)%d/1 !nvvidconv flip-method=%d ! nvvidconv !视频/x-raw,宽度=(int)%d,高度=(int)%d,格式=(字符串)BGRx!视频转换!应用程序' % (1280, 720, 30,0, 640, 480)

帽= cv2.VideoCapture(流,cv2.CAP_GSTREAMER)

这将解决问题

于 2019-10-01T11:03:18.450 回答