Как мне заставить VideoCapture возвращать ошибки вместо предупреждений?

#python #opencv #error-handling #video-capture

#python #opencv #обработка ошибок #видеозахват

Вопрос:

При попытке реализовать базовую инструкцию try / except для получения кадров с камеры в Linux я заметил, что OpenCV не выдает ошибку, когда камера отсутствует или неверный индекс устройства; вместо этого он выводит предупреждение. Как я мог это уловить?

Пример:

 import cv2

def foo(camera_index):
    try:
        cap = cv2.VideoCapture(camera_index)
    except Exception:
        print("Couldn't open camera at {}".format(camera_index))
  

Запуск foo(1) с рабочей камерой в /dev/video/0 приведет к печати:

WARN:0] global /tmp/pip-req-build-kne9u3r2/opencv/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video1): can't open camera by index

Тогда мое исключение бесполезно, потому что cv2 никогда не вызовет правильное исключение (хотя текст сообщения звучит как ошибка).

Ответ №1:

Вы не можете перехватить эти предупреждения, но вы можете проверить, был ли VideoCapture объект успешно создан с помощью метода isOpened() .

В качестве примера:

 cap = cv2.VideoCapture(camera_index)
if not cap.isOpened():
  raise Exception("Couldn't open camera {}".format(camera_index))
  

Выполнение этой проверки после создания VideoCapture объекта является распространенным шаблоном; смотрите Здесь другой пример.

Комментарии:

1. Отлично, это именно то, что мне было нужно. Спасибо 🙂