当我尝试在Jetson TX2上使用OpenCV打开网络摄像头(FLIR Boson)时,出现以下错误:
libv4l2: error set_fmt gave us a different result then try_fmt!
VIDEOIO ERROR: libv4l unable convert to requested pixfmt
我正在使用以下python脚本:
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
# Display the resulting frame
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
尽管它确实显示视频,但它显示了这些错误。相关的原因是我正在尝试让FLIR Boson与运行该程序https://github.com/naisy/realtime_object_detection
的Jetson TX2一起工作我可以使用常规的网络摄像头,但可以使用FLIR Boson
libv4l2: error set_fmt gave us a different result then try_fmt!
VIDEOIO ERROR: libv4l unable convert to requested pixfmt
VIDEOIO ERROR: V4L: Initial Capture Error: Unable to load initial memory buffers.
Segmentation fault (core dumped)
上述错误并关闭。在我对错误的研究中,似乎发现使用单色网络摄像头的人来了一下,https://www.flir.com/support-center/oem/is-there-a-way-to-maximize-the-video-display-on-the-boson-app-for-windows-pc-to-full-screen/我想知道是否需要配置OpenCV或V4L2驱动程序来为网络摄像头选择正确的格式以防止错误。
我也有一个Jetson Xavier,并且可以使用相同的对象检测程序(只是具有不同的OpenCV和Tensorflow版本),所以我猜测与该OpenCV的摄像头格式兼容性有关的配置略有不同安装在Xavier VS TX2上。我对这一切都是陌生的,因此,如果我需要更多说明,请原谅我。
最后一点信息,这是与USB相关的FLIR Boson手册中的内容
8.2.2 USB 玻色子能够提供兼容USB视频类(UVC)的设备的数字数据。提供了两个输出选项。请注意,这些选项不是通过CCI选择的,而是通过用户选择的视频捕获或查看软件选择的。选项是:
■Pre-AGC(16位):输出与入射在阵列中每个像素上的通量成线性比例;对于320配置,输出分辨率为320x256,对于640配置,输出分辨率为640x512。请注意,在此分接点处,AGC设置,缩放设置和颜色编码设置对输出信号没有影响。此选项以UVC视频格式4CC代码“ Y16”标识(16位未压缩灰度图像)
■后着色,YCbCrb:使用指定的调色板将输出转换为YCbCr色彩空间(请参见6.7节)。对于320和640配置,分辨率均为640x512。提供了三个选项,通过UVC视频格式4CC代码进行标识:
•I420:8位Y平面,然后是8位2x2二次采样的U和V平面
•NV12:8位Y平面,然后是具有2x2子采样的交错U / V平面
•NV21:与NV12相同,除了U和V平面的倒序
我尝试几次重新安装所有内容,尽管重新刷新TX2并重新安装打开的CV和Tensorflow需要花费几个小时。我已经尝试过两个不同的opencv“构建”。我曾尝试用奶酪查看网络摄像头,但从未遇到问题。
答案 0 :(得分:0)
答案 1 :(得分:0)
使用下面的代码,我找到了使其工作的方法。开放式简历与v4l2交互似乎是一个问题。
pipeline = "v4l2src device=/dev/video1 ! video/x-raw,width=640,height=512,format=(string)I420,pixel-aspect-ratio=1/1, interlace-mode=(string)progressive, framerate=30/1 ! videoconvert ! appsink"
cap = cv2.VideoCapture(pipeline, cv2.CAP_GSTREAMER)