Задний план
Итак, я смог настроить рабочий стол Windows 10 с помощью WSL2, чтобы запустить Ubuntu 18.04. Я пытаюсь сделать веб-камеру доступной и собрал и собрал воедино следующие уроки, чтобы добраться туда, где я есть.
Почему
«Зачем тебе прикладывать такие кропотливые усилия? Кажется глупым». вы могли бы сказать себе. Ну, я думаю, что это глупо, что WSL2 не имеет сквозного порта USB, вот и все. Но я традиционно разрабатываю для Windows, и с недавним проектом компьютерного зрения, который я предпринимаю, который включает SDK Nvidia Isaac (доступен только в Ubuntu 18.04), я надеялся продолжить использовать Windows для разработки, а затем Ubuntu 18.04 для тестирования. Я стараюсь избегать двойной загрузки, потому что переключение между ОС требует много времени.
Текущее состояние
Что я могу сделать, так это пройти через веб-камеру, используя usbip из окон, используя следующие команды
.\usbip.exe привязать -b 1-189
.\usbipd.exe -d -4
а затем на стороне Linux я подключаю его, запустив
sudo usbip прикрепить --remote=172.30.64.1 --busid=1-220
за исключением того, что я ввел свой собственный удаленный адрес и busid
В результате получается возможность видеть, что камера подключена и видна Linux, но независимо от того, какую программу/библиотеку я использую, ни одна из них не может открыть веб-камеру.
Вот некоторые результаты различных команд, которые люди использовали для отображения информации о камере:
~$ v4l2-ctl --список-устройств
Веб-камера Logitech C930e (usb-vhci_hcd.0-1):
/dev/video0
/dev/видео1
~$ v4l-info /dev/video0
### Информация об устройстве v4l2 [/dev/video0] ###
Главная информация
VIDIOC_QUERYCAP
драйвер: "uvcvideo"
карта: "Веб-камера Logitech C930e"
bus_info : "usb-vhci_hcd.0-1"
версия : 4.19.84
возможности: 0x84a00001 [VIDEO_CAPTURE,?,?,STREAMING,(null)]
стандарты
входы
VIDIOC_ENUMINPUT(0)
индекс : 0
Название: "Камера 1"
тип : КАМЕРА
аудиосет : 0
тюнер : 0
стандарт: 0x0 []
статус: 0x0 []
захват видео
VIDIOC_ENUM_FMT(0,VIDEO_CAPTURE)
индекс : 0
тип : VIDEO_CAPTURE
флаги : 0
описание: "ЮЙВ 4:2:2"
формат пикселей: 0x56595559 [YUYV]
VIDIOC_ENUM_FMT(1,VIDEO_CAPTURE)
индекс : 1
тип : VIDEO_CAPTURE
флаги : 1
описание : "Движение-JPEG"
формат пикселей: 0x47504a4d [MJPG]
VIDIOC_G_FMT(VIDEO_CAPTURE)
тип : VIDEO_CAPTURE
fmt.pix.width: 640
fmt.pix.height: 480
fmt.pix.pixelformat: 0x56595559 [YUYV]
fmt.pix.field : НЕТ
fmt.pix.bytesperline : 1280
fmt.pix.sizeimage : 614400
fmt.pix.colorspace: SRGB
fmt.pix.priv : 4276996862
контролирует
VIDIOC_QUERYCTRL(BASE+0)
идентификатор: 9963776
тип: ЦЕЛОЕ
Название: "Яркость"
минимум : 0
максимум : 255
шаг 1
значение_по умолчанию : 128
флаги: неизвестно
VIDIOC_QUERYCTRL(BASE+1)
идентификатор: 9963777
тип: ЦЕЛОЕ
Название: "Контраст"
минимум : 0
максимум : 255
шаг 1
значение_по умолчанию : 128
флаги: неизвестно
VIDIOC_QUERYCTRL(BASE+2)
идентификатор: 9963778
тип: ЦЕЛОЕ
Название: "Насыщенность"
минимум : 0
максимум : 255
шаг 1
значение_по умолчанию : 128
флаги: неизвестно
VIDIOC_QUERYCTRL(BASE+12)
идентификатор: 9963788
тип : BOOLEAN
name : "Температура баланса белого, Авто"
минимум : 0
максимум : 1
шаг 1
значение_по умолчанию: 1
флаги: неизвестно
VIDIOC_QUERYCTRL(BASE+19)
идентификатор: 9963795
тип: ЦЕЛОЕ
Название: "Выигрыш"
минимум : 0
максимум : 255
шаг 1
значение_по умолчанию: 0
флаги: неизвестно
VIDIOC_QUERYCTRL(BASE+24)
идентификатор: 9963800
тип : МЕНЮ
Название: "Частота линии электропередач"
минимум : 0
максимум : 2
шаг 1
значение_по умолчанию : 2
флаги: неизвестно
VIDIOC_QUERYCTRL(BASE+26)
идентификатор: 9963802
тип: ЦЕЛОЕ
Название: "Температура баланса белого"
минимум : 2000
максимум : 7500
шаг 1
значение_по умолчанию : 4000
флаги: НЕАКТИВНО
VIDIOC_QUERYCTRL(BASE+27)
идентификатор: 9963803
тип: ЦЕЛОЕ
Название: "Резкость"
минимум : 0
максимум : 255
шаг 1
значение_по умолчанию : 128
флаги: неизвестно
VIDIOC_QUERYCTRL(BASE+28)
идентификатор: 9963804
тип: ЦЕЛОЕ
Название: "Компенсация контрового света"
минимум : 0
максимум : 1
шаг 1
значение_по умолчанию: 0
флаги: неизвестно
~$ sudo ffmpeg -y -t 5 -f video4linux2 -i /dev/video0 out.mov
ffmpeg версии 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 разработчики FFmpeg
построен с помощью gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
конфигурация: --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: ошибка ввода/вывода
~$ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -frames 1 out.jpg
ffmpeg версии 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 разработчики FFmpeg
построен с помощью gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
конфигурация: --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: ошибка ввода/вывода
Я не уверен, что у меня нет конкретной библиотеки, драйвера, случайных других вещей, но все, что я пробовал до сих пор, похоже, не решает проблему.
Вопрос
Linux видит веб-камеру, знает, что это веб-камера, но не обрабатывает изображение с камеры. Что бы вы порекомендовали мне сделать, чтобы иметь возможность обрабатывать видеопоток? Я думаю, что это проблема с моими настройками, когда я изначально устанавливал Linux с помощью менюконфигурация
.
Любая помощь будет оценена по достоинству :)