Webcam-Streaming von Windows 10 auf Ubuntu 18.04 über WSL2 und usbip

Webcam-Streaming von Windows 10 auf Ubuntu 18.04 über WSL2 und usbip

Hintergrund
Okay, ich konnte meinen Windows 10-Desktop mit WSL2 einrichten, um Ubuntu 18.04 auszuführen. Ich versuche, die Webcam zugänglich zu machen und habe die folgenden Tutorials ausgewählt und zusammengestellt, um dahin zu gelangen, wo ich jetzt bin.

Das Warum
„Warum sollte man sich diese mühselige Mühe machen? Scheint dumm“, sagen Sie sich vielleicht. Nun, ich finde es dumm, dass WSL2 keinen USB-Passthrough hat, also ist das schon mal was. Aber ich entwickle traditionell unter Windows, und bei einem aktuellen Computer-Vision-Projekt, das ich durchführe und das das Nvidia Isaac SDK (nur unter Ubuntu 18.04 verfügbar) enthält, wollte ich weiterhin Windows zum Entwickeln und dann Ubuntu 18.04 zum Testen verwenden. Ich versuche, Dual-Booting zu vermeiden, da das Hin- und Herwechseln zwischen den Betriebssystemen zeitaufwändig ist.

Aktuellen Zustand
Was ich tun kann, ist, die Webkamera mit usbip von Windows aus mit den folgenden Befehlen durchzuleiten
.\usbip.exe bind -b 1-189
.\usbipd.exe -d -4

und dann auf der Linux-Seite verbinde ich es, indem ich es ausführe,
sudo usbip attach --remote=172.30.64.1 --busid=1-220
außer dass ich meine eigene Remote-Adresse und Busid eingebe

Das Ergebnis ist, dass ich zwar sehen kann, dass die Kamera angeschlossen ist und von Linux gesehen wird, aber egal, welches Programm/welche Bibliothek ich verwende, keines davon kann die Webcam öffnen

Hier sind einige Ausgaben verschiedener Befehle, die zum Anzeigen von Kamerainformationen verwendet wurden:

~$ v4l2-ctl --list-devices 
Logitech Webcam C930e (usb-vhci_hcd.0-1):
    /dev/video0
    /dev/video1

~$ v4l-info /dev/video0

### v4l2 device info [/dev/video0] ###
general info
    VIDIOC_QUERYCAP
    driver                  : "uvcvideo"
    card                    : "Logitech Webcam C930e"
    bus_info                : "usb-vhci_hcd.0-1"
    version                 : 4.19.84
    capabilities            : 0x84a00001 [VIDEO_CAPTURE,?,?,STREAMING,(null)]

standards

inputs
    VIDIOC_ENUMINPUT(0)
    index                   : 0
    name                    : "Camera 1"
    type                    : CAMERA
    audioset                : 0
    tuner                   : 0
    std                     : 0x0 []
    status                  : 0x0 []

video capture
    VIDIOC_ENUM_FMT(0,VIDEO_CAPTURE)
    index                   : 0
    type                    : VIDEO_CAPTURE
    flags                   : 0
    description             : "YUYV 4:2:2"
    pixelformat             : 0x56595559 [YUYV]
    VIDIOC_ENUM_FMT(1,VIDEO_CAPTURE)
    index                   : 1
    type                    : VIDEO_CAPTURE
    flags                   : 1
    description             : "Motion-JPEG"
    pixelformat             : 0x47504a4d [MJPG]
    VIDIOC_G_FMT(VIDEO_CAPTURE)
    type                    : VIDEO_CAPTURE
    fmt.pix.width           : 640
    fmt.pix.height          : 480
    fmt.pix.pixelformat     : 0x56595559 [YUYV]
    fmt.pix.field           : NONE
    fmt.pix.bytesperline    : 1280
    fmt.pix.sizeimage       : 614400
    fmt.pix.colorspace      : SRGB
    fmt.pix.priv            : 4276996862

controls
    VIDIOC_QUERYCTRL(BASE+0)
    id                      : 9963776
    type                    : INTEGER
    name                    : "Brightness"
    minimum                 : 0
    maximum                 : 255
    step                    : 1
    default_value           : 128
    flags                   : unknown
    VIDIOC_QUERYCTRL(BASE+1)
    id                      : 9963777
    type                    : INTEGER
    name                    : "Contrast"
    minimum                 : 0
    maximum                 : 255
    step                    : 1
    default_value           : 128
    flags                   : unknown
    VIDIOC_QUERYCTRL(BASE+2)
    id                      : 9963778
    type                    : INTEGER
    name                    : "Saturation"
    minimum                 : 0
    maximum                 : 255
    step                    : 1
    default_value           : 128
    flags                   : unknown
    VIDIOC_QUERYCTRL(BASE+12)
    id                      : 9963788
    type                    : BOOLEAN
    name                    : "White Balance Temperature, Auto"
    minimum                 : 0
    maximum                 : 1
    step                    : 1
    default_value           : 1
    flags                   : unknown
    VIDIOC_QUERYCTRL(BASE+19)
    id                      : 9963795
    type                    : INTEGER
    name                    : "Gain"
    minimum                 : 0
    maximum                 : 255
    step                    : 1
    default_value           : 0
    flags                   : unknown
    VIDIOC_QUERYCTRL(BASE+24)
    id                      : 9963800
    type                    : MENU
    name                    : "Power Line Frequency"
    minimum                 : 0
    maximum                 : 2
    step                    : 1
    default_value           : 2
    flags                   : unknown
    VIDIOC_QUERYCTRL(BASE+26)
    id                      : 9963802
    type                    : INTEGER
    name                    : "White Balance Temperature"
    minimum                 : 2000
    maximum                 : 7500
    step                    : 1
    default_value           : 4000
    flags                   : INACTIVE
    VIDIOC_QUERYCTRL(BASE+27)
    id                      : 9963803
    type                    : INTEGER
    name                    : "Sharpness"
    minimum                 : 0
    maximum                 : 255
    step                    : 1
    default_value           : 128
    flags                   : unknown
    VIDIOC_QUERYCTRL(BASE+28)
    id                      : 9963804
    type                    : INTEGER
    name                    : "Backlight Compensation"
    minimum                 : 0
    maximum                 : 1
    step                    : 1
    default_value           : 0
    flags                   : unknown

~$ sudo ffmpeg -y -t 5 -f video4linux2  -i /dev/video0  out.mov
ffmpeg version 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --prefix=/usr --extra-version=0ubuntu0.2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
/dev/video0: Input/output error

~$ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -frames 1 out.jpg
ffmpeg version 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --prefix=/usr --extra-version=0ubuntu0.2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
/dev/video0: Input/output error

Ich bin nicht sicher, ob ich nicht eine bestimmte Bibliothek, einen Treiber oder irgendetwas anderes habe, aber alles, was ich bisher versucht habe, scheint das Problem nicht zu lösen.

Frage
Linux erkennt die Webcam, weiß, dass es eine Webcam ist, verarbeitet den Kamera-Feed aber nicht. Was würden Sie mir empfehlen, um den Video-Feed verarbeiten zu können? Ich denke, das liegt an meinen Einstellungen, als ich Linux ursprünglich eingerichtet habe menuconfig. Für jede Hilfe wäre ich dankbar :)

verwandte Informationen