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.
- https://www.youtube.com/watch?v=IL7Jd9rjgrM
- https://github.com/rpasek/usbip-wsl2-instructions
- https://www.davecorder.org/windows-10/
- https://www.reddit.com/r/bashonubuntuonwindows/comments/gcbjfi/module_usbcore_not_found_in_directory/
- https://dmaiorino.com/?p=12
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 :)