Я разрабатываю многопоточное приложение для захвата изображений с четырех веб-камер 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 или отключить / снова подключить камеру, чтобы получить доступ обратно.
Любые идеи, почему второй доступ к камере может вызвать эту проблему, или как ее исправить?
Я проверил, что камера фактически выпущена. Я могу получить доступ к камере