Захват OpenCV Python завершится неудачно, если я снова получу доступ к веб-камере после ее выпуска - PullRequest
0 голосов
/ 29 августа 2018

Я разрабатываю многопоточное приложение для захвата изображений с четырех веб-камер USB. Для простоты и раннего развития я использую Logitech C920 со скоростью 640x480 и 30 кадров в секунду.

У меня есть простая функция, которая открывает камеру и устанавливает некоторые параметры, а затем отпускает камеру. Поскольку это многопоточное приложение, каждый из четырех потоков запускает его при нажатии кнопки. Отлично работает.

def camParameter(previewName, camID):
    #Set camera object and set parameters
    start_time = time.time()
    cam_test = True
    while cam_test:  
        cam = cv2.VideoCapture(camID)  
        present_time = time.time()
        if present_time - start_time > 2:
            print("Could not open camera ", str(camID))
            break
        if cam.isOpened():
            cam_test=False

    width = 640
    height = 480
    fps = 30
    test_width = cam.get(3)
    test_height = cam.get(4)
    test_fps = cam.get(5)

    if test_width != width:
        cam.set(3,width) 
    if test_height != height:
        cam.set(4,height) 
    if test_fps != fps:
        cam.set(5,fps) 

    print("Parameters set for camera ", str(camID))
    cam.release()

Однако, если я снова вызываю функцию или пытаюсь открыть камеру для потоковой передачи, я получаю следующую ошибку:

ОШИБКА ВИДЕО: V4L2: формат пикселя входящего изображения не поддерживается OpenCV Невозможно остановить поток: устройство или ресурс заняты

Я могу открыть камеру с помощью GUVCviewer или отключить / снова подключить камеру, чтобы получить доступ обратно.

Любые идеи, почему второй доступ к камере может вызвать эту проблему, или как ее исправить?

Я проверил, что камера фактически выпущена. Я могу получить доступ к камере

1 Ответ

0 голосов
/ 10 октября 2018

Я перекомпилировал openCV с GStreamer - это намного более дружественно к многопоточности.

...