在Jetson TX2上使用openCV从FLIR Boson捕获图像

时间:2019-01-29 05:05:25

标签: python-3.x opencv webcam-capture nvidia-jetson flir

当我尝试在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“构建”。我曾尝试用奶酪查看网络摄像头,但从未遇到问题。

2 个答案:

答案 0 :(得分:0)

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

cap.set(cv.CAP_PROP_CONVERT_RGB, 0)

v4l example from OpenCV,见。

答案 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)

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