Критическая ошибка gstreamer при попытке захвата видео с помощью веб-камеры Python OpenCV

Я пытаюсь снять видео с веб-камеры, используя opencv и python с простым кодом

import numpy as np
import cv2

cap = cv2.VideoCapture(0)
print('cap.isOpened')
if cap.isOpened():
    print ('cap is opened')
    while(True):
        re,img=cap.read()
        cv2.imshow("video output", img)
        k = cv2.waitKey(10)&0xFF
        if k==27:
            break
cap.release()
cv2.destroyAllWindows()

все работает нормально, если я пытаюсь воспроизвести существующее видео, например, файл.mp4. но когда я пытаюсь использовать веб-камеру, я получаю сообщение об ошибке

GStreamer-CRITICAL **: gst_element_get_state: утверждение 'GST_IS_ELEMENT (element)' не удалось cap.isOpened

Для получения дополнительной информации я использую odroid xu4 с Ubuntu 16.04, веб-камеру. Я использую Logitech C170 (он работает правильно в веб-тестировании и использует guvcview), но он не работает на сыр и каморамы.

нужна помощь об этом, пожалуйста..

1 ответ

Следующий обходной путь имеет разумные шансы на работу:

cap = cv2.VideoCapture(0, cv2.CAP_V4L)

Возможность выбора бэкэндов была добавлена ​​в OpenCV 3, см. VideoCapture() документы

Обходной путь переключает серверную часть на V4L (из GStreamer по умолчанию) для моей сборки OpenCV 3.4.4 с поддержкой GStreamer на коробке 16.04. Здесь вывод кода вопроса с обходом после export OPENCV_VIDEOIO_DEBUG=TRUE:

[ WARN:0] VIDEOIO(cvCreateCameraCapture_V4L(index)): trying ...

[ WARN:0] VIDEOIO(cvCreateCameraCapture_V4L(index)): result=0x20b1470 ...

cap.isOpened
cap is opened

Если обходной путь не работает для вас, вы можете проверить, поддерживает ли ваша сборка OpenCV V4L с помощью print(cv2.getBuildInformation()), Вот соответствующий раздел для моей сборки:

Video I/O:
  DC1394:                      YES (ver 2.2.4)
  FFMPEG:                      YES
    avcodec:                   YES (ver 56.60.100)
    avformat:                  YES (ver 56.40.101)
    avutil:                    YES (ver 54.31.100)
    swscale:                   YES (ver 3.1.101)
    avresample:                NO
  GStreamer:                  
    base:                      YES (ver 1.8.3)
    video:                     YES (ver 1.8.3)
    app:                       YES (ver 1.8.3)
    riff:                      YES (ver 1.8.3)
    pbutils:                   YES (ver 1.8.3)
  libv4l/libv4l2:              NO
  v4l/v4l2:                    linux/videodev2.h
Другие вопросы по тегам