Чтобы свести к минимуму проблемы при развертывании этого проекта, я решил использовать 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.