IOError при попытке использовать PyFakeWebcam - PullRequest
1 голос
/ 05 мая 2020

Итак, недавно я пытался использовать PyFakeWebcam, но у меня возникла небольшая проблема. Всякий раз, когда я пытаюсь что-то с ним сделать, я сталкиваюсь с этой ошибкой:

Traceback (most recent call last):
    File "fakecam.py", line 13, in <module>
        fake1 = pyfakewebcam.FakeWebcam('/dev/video1', IMG_W, IMG_H)
    File "/home/user/.local/lib/python3.6/site-packages/pyfakewebcam/pyfakewebcam.py", line 54, in __init__
        fcntl.ioctl(self._video_device, _v4l2.VIDIOC_S_FMT, self._settings)
OSError: [Errno 22] Invalid argument

Для справки я использую этот код:

import cv2
import time
import pyfakewebcam
import numpy as np

IMG_W = 1280
IMG_H = 720

cam = cv2.VideoCapture(0)
cam.set(cv2.CAP_PROP_FRAME_WIDTH, IMG_W)
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, IMG_H)

fake1 = pyfakewebcam.FakeWebcam('/dev/video1', IMG_W, IMG_H)
fake2 = pyfakewebcam.FakeWebcam('/dev/video2', IMG_W, IMG_H)

while True:
    ret, frame = cam.read()

    flipped = cv2.flip(frame, 1)

    # Mirror effect 
    frame[0 : IMG_H, IMG_W//2 : IMG_W] = flipped[0 : IMG_H, IMG_W//2 : IMG_W]

    fake1.schedule_frame(frame)
    fake2.schedule_frame(flipped)

    time.sleep(1/15.0)

Что вызывает эту ошибку, и является ли это разрешимо?

1 Ответ

1 голос
/ 08 мая 2020

Попробуйте выбрать другое устройство - / dev / video1 может быть недоступен и modprobe создан /dev/video2 и /dev/video3. Проверьте вывод ls /dev | grep -P '^video\d+$' для доступных видеоустройств и выберите одно из последних.

После запуска скрипта проверьте результат с помощью ffplay /dev/video3.

Если это не решит вашу проблему, вам нужно будет установить v4l2loopback-utils, специфицированную версию c.

Подробнее см. на github issue

...