0

当我尝试在 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 与运行该程序的 Jetson TX2 一起工作https://github.com/naisy/realtime_object_detection

我让它与普通网络摄像头一起使用,但与它提供的 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 上安装的与网络摄像头格式兼容性相关的配置略有不同泽维尔 VS TX2。我对这一切都很陌生,所以如果我要求更多澄清,请原谅我。

最后一点信息,这是来自与 USB 相关的 FLIR Boson 手册:

8.2.2 USB Boson 能够作为 USB 视频类 (UVC) 兼容设备提供数字数据。提供了两个输出选项。请注意,这些选项不是通过 CCI 选择的,而是通过用户选择的视频捕获或查看软件选择的。选项包括:

■ Pre-AGC(16 位):输出与阵列中每个像素上入射的通量成线性比例;320 配置的输出分辨率为 320x256,640 配置的输出分辨率为 640x512。请注意,AGC 设置、缩放设置和颜色编码设置对该分接点的输出信号没有影响。此选项使用“Y16”(16 位未压缩灰度图像)的 UVC 视频格式 4CC 代码标识

■ Post-Colorize,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 并重新安装 open CV 和 Tensorflow 需要几个小时。我尝试了两种不同的opencv“构建”。我曾尝试用奶酪查看网络摄像头,但从未遇到过问题。

4

2 回答 2

0

使用下面的代码,我能够找到一种让它工作的方法。开放式 CV 与 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)

https://github.com/FLIR/BosonUSB/issues/13

于 2019-02-11T20:16:12.267 回答
0

我不使用 Python,但您需要禁用转换为 RGB:

cap.set(cv.CAP_PROP_CONVERT_RGB, 0)

OpenCV 中的 v4l 示例

于 2019-01-29T07:11:58.680 回答