背景
好吧,我可以使用 WSL2 設定 Windows 10 桌面來執行 Ubuntu 18.04。我正在嘗試讓網路攝影機變得可訪問,並挑選並拼湊了以下教程,以便讓自己達到我所在的位置。
- 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
為什麼
“為什麼要費這麼大的力氣?看起來很愚蠢。”你可能會告訴自己。嗯,我認為 WSL2 沒有 USB 直通功能很愚蠢,所以就是這樣。但我傳統上在 Windows 上進行開發,最近我正在進行一個電腦視覺項目,該項目包含 Nvidia Isaac SDK(僅在 Ubuntu 18.04 上可用),我希望繼續使用 Windows 進行開發,然後使用 Ubuntu 18.04 進行測試。我試圖遠離雙啟動,因為在作業系統之間來回切換非常耗時。
目前狀態
我能夠做到的是使用以下命令從 Windows 使用 usbip 透過網路攝影機
.\usbip.exe bind -b 1-189
.\usbipd.exe -d -4
然後在linux端我透過運行來連接它,
sudo usbip attach --remote=172.30.64.1 --busid=1-220
除了我輸入了我自己的遠端位址和busid
結果是能夠看到相機已連接並被Linux看到,但無論我使用什麼程式/庫,它們都無法打開網路攝影機
以下是人們用來顯示相機資訊的不同指令的一些輸出:
~$ 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
我不確定我是否沒有特定的庫、驅動程式、隨機的其他東西,但到目前為止我嘗試過的一切似乎都無法解決問題。
問題
Linux 看到網路攝影機,知道它是網路攝影機,但不處理攝影機輸入。您建議我做什麼才能處理視訊來源?我認為這是我最初使用 linux 設定時的設定問題menuconfig
。任何幫助,將不勝感激 :)