fundal
Bine, așa că am putut să-mi configurez desktopul Windows 10 cu WSL2 pentru a rula Ubuntu 18.04. Încerc să fac ca camera web să fie accesibilă și am ales și adunat următoarele tutoriale pentru a ajunge acolo unde sunt.
De ce
"De ce ai trece prin acest efort minuțios? Pare prost." s-ar putea să îți spui. Ei bine, cred că este o prostie că WSL2 nu are un USB pass-through, așa că există asta. Dar dezvolt pe Windows în mod tradițional și, cu un proiect recent de computer vision pe care îl întreprind, care încorporează SDK-ul Nvidia Isaac (disponibil doar pe Ubuntu 18.04), speram să continui să folosesc Windows pentru a dezvolta, iar apoi Ubuntu 18.04 pentru a testa. Încerc să stau departe de pornirea duală, deoarece comutarea înainte și înapoi între sistemele de operare necesită mult timp.
Starea curenta
Ceea ce pot face este să trec prin camera web folosind usbip din Windows utilizând următoarele comenzi
.\usbip.exe bind -b 1-189
.\usbipd.exe -d -4
și apoi pe partea linux îl conectez rulând
sudo usbip attach --remote=172.30.64.1 --busid=1-220
cu excepția faptului că am introdus propria mea adresă de la distanță și busid
Rezultă abilitatea de a vedea că camera este atașată și văzută de Linux, dar indiferent de programul/biblioteca pe care îl folosesc, niciunul dintre ei nu poate deschide camera web.
Iată câteva rezultate de la diferite comenzi pe care oamenii le-au folosit pentru a afișa informații despre cameră:
~$ v4l2-ctl --list-devices
Cameră web Logitech C930e (usb-vhci_hcd.0-1):
/dev/video0
/dev/video1
~$ v4l-info /dev/video0
### informații despre dispozitiv v4l2 [/dev/video0] ###
informatii generale
VIDIOC_QUERYCAP
driver: "uvcvideo"
card: "Camera web Logitech C930e"
bus_info : „usb-vhci_hcd.0-1”
versiunea: 4.19.84
capabilități: 0x84a00001 [VIDEO_CAPTURE,?,?,STREAMING,(null)]
standardele
intrări
VIDIOC_ENUMINPUT(0)
indice: 0
nume: "Camera 1"
tip: CAMERA
set audio: 0
tuner: 0
std: 0x0 []
stare: 0x0 []
captură video
VIDIOC_ENUM_FMT(0,VIDEO_CAPTURE)
indice: 0
tip: VIDEO_CAPTURE
steaguri: 0
descriere: "YUYV 4:2:2"
format pixel: 0x56595559 [YUYV]
VIDIOC_ENUM_FMT(1,VIDEO_CAPTURE)
indice: 1
tip: VIDEO_CAPTURE
steaguri: 1
descriere: „Motion-JPEG”
format pixel: 0x47504a4d [MJPG]
VIDIOC_G_FMT(VIDEO_CAPTURE)
tip: VIDEO_CAPTURE
lățime fmt.pix: 640
fmt.pix.inaltime: 480
fmt.pix.pixelformat: 0x56595559 [YUYV]
fmt.pix.field: NIMIC
fmt.pix.bytesperline: 1280
fmt.pix.sizeimage : 614400
fmt.pix.colorspace : SRGB
fmt.pix.priv : 4276996862
controale
VIDIOC_QUERYCTRL(BASE+0)
ID: 9963776
tip: INTEGER
nume: „Luminozitate”
minim: 0
maxim: 255
pasul 1
valoare_default: 128
steaguri : necunoscute
VIDIOC_QUERYCTRL(BASE+1)
ID: 9963777
tip: INTEGER
nume: "Contrast"
minim: 0
maxim: 255
pasul 1
valoare_default: 128
steaguri : necunoscute
VIDIOC_QUERYCTRL(BASE+2)
ID: 9963778
tip: INTEGER
nume: "Saturație"
minim: 0
maxim: 255
pasul 1
valoare_default: 128
steaguri : necunoscute
VIDIOC_QUERYCTRL(BASE+12)
ID: 9963788
tip: BOOLEAN
nume: „Temperatura balans de alb, automat”
minim: 0
maxim: 1
pasul 1
default_value : 1
steaguri : necunoscute
VIDIOC_QUERYCTRL(BASE+19)
ID: 9963795
tip: INTEGER
nume: "Castig"
minim: 0
maxim: 255
pasul 1
valoare_default: 0
steaguri : necunoscute
VIDIOC_QUERYCTRL(BASE+24)
ID: 9963800
tip: MENU
nume: „Frecvența liniei de alimentare”
minim: 0
maxim: 2
pasul 1
default_value : 2
steaguri : necunoscute
VIDIOC_QUERYCTRL(BASE+26)
ID: 9963802
tip: INTEGER
nume: „Temperatura balansului de alb”
minim: 2000
maxim: 7500
pasul 1
valoare_default: 4000
steaguri : INACTIV
VIDIOC_QUERYCTRL(BASE+27)
ID: 9963803
tip: INTEGER
nume: "Sharpness"
minim: 0
maxim: 255
pasul 1
valoare_default: 128
steaguri : necunoscute
VIDIOC_QUERYCTRL(BASE+28)
ID: 9963804
tip: INTEGER
nume: „Compensarea luminii de fundal”
minim: 0
maxim: 1
pasul 1
valoare_default: 0
steaguri : necunoscute
~$ sudo ffmpeg -y -t 5 -f video4linux2 -i /dev/video0 out.mov
ffmpeg versiunea 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 dezvoltatorii FFmpeg
construit cu gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
configurație: --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-libie c61883 --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: eroare de intrare/ieșire
~$ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -frames 1 out.jpg
ffmpeg versiunea 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 dezvoltatorii FFmpeg
construit cu gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
configurație: --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-libie c61883 --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: eroare de intrare/ieșire
Nu sunt sigur dacă nu am o anumită bibliotecă, driver, altceva aleatoriu, dar tot ce am încercat până acum pare să nu rezolve problema.
Întrebare
Linux vede camera web, știe că este o cameră web, dar nu procesează fluxul camerei. Ce mi-ați recomanda să fac pentru a putea procesa fluxul video? Cred că aceasta este o problemă cu setările mele când am configurat inițial Linux cu menuconfig
.
Orice ajutor ar fi apreciat :)