Почему я не могу прочитать поток с фронтальной камеры планшета с помощью OPENCV VideoCapture? - PullRequest
0 голосов
/ 05 декабря 2018

Чтобы свести к минимуму проблемы при развертывании этого проекта, я решил использовать Docker поверх Debian поверх Oracle VM Virtual Box.В этой конкретной ситуации Virtual Box работает под Windows 8.

Веб-камера, к которой я пытаюсь получить доступ через OpenCV, - это OmniVision OV2722 , поставляемая DELL на планшете Venue 11 Pro.

Путь, которым я пользуюсь для использования этого ресурса, следующий:

  • После включения виртуальной машины Debian я проверяю веб-камеру в меню devices > webcams.
  • ИнициироватьКонтейнер Docker анализирует веб-камеру с флагом --device=/dev/video0:/dev/video0.
  • Запустите мой скрипт внутри контейнера.

Результат:

  • VideoCaptureконструктор не возвращает указатель NULL.
  • Камера открыта, при проверке метода с помощью cap.isOpened()
  • При попытке получить следующий кадр с cap.read(), скрипт возвращается с select timeout
  • Сразу после select timeout отображается следующая ошибка:

Ошибка OpenCV: подтверждение не выполнено (buf.data && buuf.idContinuos ()) в imdecode_,файл /riit/icv-tmp/opencv-2.4.11/modules/highui/src/loadsave.cpp, строка 307

Traceback (последний вызов был последним): файл "main.py, строка 285, ret, frame = cap.read () cv2.error: /root/ocv-tmp/opencv-2.4.11/modules/hihgui/src/loadsave.coo: 307: ошибка: (-215) buf.data && buf.isContinuos () в функции imdecode_

Что я пробовал до сих пор:

  • Изменить размер изображенияс помощью метода cv2.VideoCapture.set(): получил HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
  • Извлеките и вставьте модуль ядра UVCVIDEO из контейнера хоста docker linux и контейнера linux, установив флаги --nodrop=1 и --timeout=10000.
  • Выполнение того же сценария с USB-камерой ( Logitech C920 ): ЭТО РАБОТАЕТ!
  • На cap = cv2.VideoCapture() уже пробовали с -1, 0, 1, 2, 3 индексами: ТОЛЬКО -1и 0 заставило меня перейти к ошибке root.1, 2 и 3 вызвали фатальную ошибку при выполнении.
  • Попытка запустить Виртуальный ящик с правами администратора.

Дополнительная информация:

ВЕДУЩАЯ: Windows 8.1 Pro, 2 ГБ, Intel Atom Z3775 ГОСТЕВАЯ: Debian 9, 1 ГБИзображение DOCKER: bamos / openface

Код, который я здесь использую, довольно стандартный, кстати, он основан на документе OpenCV

 cap = cv2.VideoCapture(0)
 if cap is not None and not cap.isOpened():
    print 'Found issues on open the camera'
    exit()

 ret, frame = cap.read()

Хорошо,Я не знаю, был ли я достаточно конкретен.Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.Заранее спасибо за любую поддержку в этом.

ОБНОВЛЕНИЕ:

Как уже упоминалось @MarianD, правильное выражение if: if cap is None and not cap.isOpened():

На тех вещах, которые я уже сделал, я только что закончил обновлять драйверы веб-камер наПланшет Windows.

1 Ответ

0 голосов
/ 05 декабря 2018

Вместо

if cap is not None and not cap.isOpened():

используйте

if cap is None or not cap.isOpened():
...