Проблема Захват изображения с FLIR Boson с openCV на Jetson TX2

Когда я пытаюсь открыть веб-камеру (FLIR Boson) с OpenCV на Jetson TX2, выдается следующая ошибка:

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 на Ксавье против TX2. Я новичок во всем этом, так что прости меня, если я попрошу больше разъяснений.

И последняя информация, которая не относится к руководству FLIR Boson по USB:

8.2.2 USB Boson способен предоставлять цифровые данные как устройство, совместимое с USB Video Class (UVC). Предусмотрены два варианта вывода. Обратите внимание, что параметры выбираются не через CCI, а с помощью программного обеспечения для захвата видео или просмотра, выбранного пользователем. Варианты:

■ Pre-AGC (16 бит): выходной сигнал линейно пропорционален падающему потоку на каждый пиксель в массиве; выходное разрешение составляет 320x256 для конфигурации 320, 640x512 для конфигурации 640. Обратите внимание, что настройки AGC, настройки масштабирования и настройки цветовой кодировки не влияют на выходной сигнал в этой точке касания. Эта опция обозначена кодом формата 4CC UVC-видео "Y16" (16-битное несжатое изображение в оттенках серого)

■ Post-Colorize, YCbCrb: вывод преобразуется в цветовое пространство YCbCr с использованием указанной цветовой палитры (см. Раздел 6.7). Разрешение составляет 640x512 для конфигураций 320 и 640. Предусмотрено три варианта, идентифицируемых с помощью кода видео формата UVC 4CC:

• I420: 8-битная плоскость Y, за которой следуют 8-битные субсэмплированные 2x2 плоскости U и V

• NV12: 8-битная плоскость Y, за которой следует чередующаяся плоскость U/V с подвыборкой 2x2

• NV21: то же, что NV12, за исключением обратного порядка плоскостей U и V

Я попытался переустановить все несколько раз, хотя для перепрошивки TX2 и переустановки открытых CV и Tensorflow требуется несколько часов. Я пробовал две разные "сборки" opencv. Я пытался просматривать веб-камеру с сыром и никогда не было проблем.

2 ответа

Я не работаю с Python, но вам нужно отключить преобразование в RGB:

cap.set(cv.CAP_PROP_CONVERT_RGB, 0)

Увидимся v4l пример из OpenCV.

Я смог найти способ заставить его работать, используя приведенный ниже код. Казалось, проблема с открытым 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

Другие вопросы по тегам