диагностика WEB-камеры

Обмен опытом по установке Линукс на разные аппаратные конфигурации

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

диагностика WEB-камеры

Непрочитанное сообщение Olej » 25 янв 2023, 16:55

Диагностика (работоспособности) WEB-камеры (любой USB-камеры) в Linux - это совсем не так просто...
Это уже возникало в разных темах:
какое устройство - WEB камера? - как выбрать камеру когда их несколько?
USB камера 093a:2471 - это не работающая камера? или это я просто не смог совладать с этим типом камеры?
VirtualBox: USB-устройства - как пробросить WEB-камеру в виртуальную машину + и как её там заставить работать (и проверить)?

Проверка, более-менее, работоспособности WEB-камеры проделывалась вот здесь: Open CV (продолжение) ....

Проверка видеокамеры - это не так просто, усложняется тем, что нужно проверять несколько "слоёв":
- нужно проверять корректность аппаратного подключения, что камера видится...
- нужно выбрать камеру если их несколько...
- нужно проверять и настраивать не только аппаратную видимость камеры, но и корректную работу всей видеоподсистемы V4L

Конечные GUI программы: Cheese, VLC и др. - не годятся. Потому что уже не раз замечено, что в некоторых случаях, чуть сложнее простейших, та же Cheese - путается и не понимает что ей читать. Да и инсталлировать навороченные программы для проверки работоспособности - это не дело, если мне эти программы не нужны ни для чего более.

Хотелось бы иметь консольные процедуры проверки ... и возможно захвата кадра.

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

диагностика WEB-камеры

Непрочитанное сообщение Olej » 25 янв 2023, 17:05

Olej писал(а):
25 янв 2023, 16:55
- нужно проверять корректность аппаратного подключения, что камера видится...
- нужно выбрать камеру если их несколько...

Код: Выделить всё

[olej@xenix ~]$ cat /etc/os-release
NAME="Fedora Linux"
VERSION="37 (Thirty Seven)"
ID=fedora
VERSION_ID=37
VERSION_CODENAME=""
PLATFORM_ID="platform:f37"
PRETTY_NAME="Fedora Linux 37 (Thirty Seven)"
...

Код: Выделить всё

[olej@xenix ~]$ lsusb
Bus 002 Device 002: ID 8087:8000 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 1908:2310 GEMBIRD USB2.0 PC CAMERA
Bus 003 Device 004: ID 1005:b113 Apacer Technology, Inc. Handy Steno/AH123 / Handy Steno 2.0/HT203
Bus 003 Device 003: ID 2101:020f ActionStar
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Камера GEMBIRD USB2.0 PC CAMERA
Отображается так:

Код: Выделить всё

[olej@xenix ~]$ ls -l /dev/video*
crw-rw----+ 1 root video 81, 0 янв 25 13:06 /dev/video0
crw-rw----+ 1 root video 81, 1 янв 25 13:06 /dev/video1
Т.е. если не отображается никаким dev/video* - то проблемы в железе, и дальше ковыряться нечего - нужно это выправлять :!:
Устройство из которого V4L будет читать видеокадры (кстати, для WEB камер это сжатые JPG кадры) - это то, которое отображается как index0:

Код: Выделить всё

[olej@xenix ~]$ ls -l /dev/v4l/by-id
итого 0
lrwxrwxrwx 1 root root 12 янв 25 13:06 usb-Generic_USB2.0_PC_CAMERA-video-index0 -> ../../video0
lrwxrwxrwx 1 root root 12 янв 25 13:06 usb-Generic_USB2.0_PC_CAMERA-video-index1 -> ../../video1

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

диагностика WEB-камеры

Непрочитанное сообщение Olej » 25 янв 2023, 17:31

Olej писал(а):
25 янв 2023, 16:55
- нужно проверять и настраивать не только аппаратную видимость камеры, но и корректную работу всей видеоподсистемы V4L
Один из способов комплексной диагностики видеоподсистемы - это использование проекта компьютерного зрения OpenCV (Open Conputer Vision) - установка и использование пакета описано здесь: Open CV (продолжение) ....
Делаем в терминале так:

Код: Выделить всё

[olej@xenix ~]$ python
Python 3.11.1 (main, Jan  6 2023, 00:00:00) [GCC 12.2.1 20221121 (Red Hat 12.2.1-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.6.0'
>>> vc = cv2.VideoCapture(0)
[ INFO:0@327.239] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/videoio_registry.cpp (223) VideoBackendRegistry VIDEOIO: Enabled backends(8, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); V4L2(970); CV_IMAGES(960); CV_MJPEG(950); FIREWIRE(940); UEYE(930)
[ INFO:0@327.262] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1104) open OpenCV | GStreamer: v4l2src device=/dev/video0 ! videoconvert ! appsink drop=true
[ INFO:0@327.378] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1137) open OpenCV | GStreamer: mode - MANUAL
[ WARN:0@328.116] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1405) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
>>> retval, frame = vc.read()
>>> print(retval)
True
>>> cv2.imshow("", frame)
[ INFO:0@416.858] global /builddir/build/BUILD/opencv-4.6.0/modules/highgui/src/registry.impl.hpp (114) UIBackendRegistry UI: Enabled backends(3, sorted by priority): GTK(1000); GTK3(990); GTK2(980) + BUILTIN(QT5)
[ INFO:0@417.687] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/registry_parallel.impl.hpp (96) ParallelBackendRegistry core(parallel): Enabled backends(2, sorted by priority): TBB(1000); OPENMP(990)
[ INFO:0@417.687] global /builddir/build/BUILD/opencv-4.6.0/modules/core/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp (54) ParallelForBackend Initializing TBB parallel backend: TBB_INTERFACE_VERSION=11103
[ INFO:0@417.687] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/parallel.cpp (77) createParallelForAPI core(parallel): using backend: TBB (priority=1000)
>>> cv2.waitKey(0)
...
Только после последнего вызова waitKey() захваченный кадр изображения "проявляется":
Снимок экрана от 2023-01-25 15-31-38.png
Снимок экрана от 2023-01-25 15-31-38.png (615.85 КБ) 58 просмотров
(Это кадр моего аквариума, захваченного наугад ... это не важно)

Но! OpenCV - проект крупный.
Меня он вполне устраивает ... потому что уже не один год (лет 10?) входит в круг моих интересов, используется в разных целевых разработок (время от времени), состояние дел там находится под постоянным моим наблюдением...

А как быть тем кто не использует такой инструментарий?
Устанавливать (хоть это и просто) только для того чтобы "забороть" упрямую камеру? :cry:
Есть ли более простые способы проверки всего тракта?

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

диагностика WEB-камеры

Непрочитанное сообщение Olej » 25 янв 2023, 18:10

Olej писал(а):
25 янв 2023, 17:31
Есть ли более простые способы проверки всего тракта?
1. Как мне помнится, в мультимедиа популярны такие пакеты для захвата (имиджей или видеопотока).... которые, возможно, нужно доустановить - поскольку это сейчас я делаю в Fedora, то это находится так:

Код: Выделить всё

[olej@xenix ~]$ which mplayer
...
Имеющиеся пакеты
ffmpeg.x86_64                                                                 5.1.2-9.fc37                                                                             rpmfusion-free-updates
mencoder.x86_64                                                               1.5.1-0.2.20220726svn.fc37                                                               rpmfusion-free
mplayer.x86_64                                                                1.5.1-0.2.20220726svn.fc37                                                               rpmfusion-free

2. В самой Linux V4L подсистеме есть такая утилита streamer ... которая в DEB репозиториях находится в пакете:

Код: Выделить всё

olej@R420:~$ apt contains streamer
...
streamer: /usr/bin/streamer
streamer: /usr/share/doc/streamer
streamer: /usr/share/doc/streamer/changelog.Debian.gz
streamer: /usr/share/doc/streamer/contrib
streamer: /usr/share/doc/streamer/contrib/streamer-wrapper.pl
streamer: /usr/share/doc/streamer/copyright
streamer: /usr/share/man/es/man1/streamer.1.gz
streamer: /usr/share/man/man1/streamer.1.gz

Код: Выделить всё

olej@R420:~$ apt show streamer
Package: streamer
Version: 3.107-1.1
Priority: extra
Section: universe/graphics
Source: xawtv
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 160 kB
Depends: xawtv-plugins (= 3.107-1.1), libc6 (>= 2.34), libjpeg8 (>= 8c)
Suggests: xawtv
Homepage: https://www.linuxtv.org/wiki/index.php/Xawtv
Download-Size: 57,9 kB
APT-Manual-Installed: yes
APT-Sources: http://mirror.mirohost.net/ubuntu jammy/universe amd64 Packages
Description: инструмент захвата кадров (и видео) с телевизионного источника
 XawTV is a set of software for watching and recording television channels
 and webcams.
 .
 Пакет предоставляет инструмент для выполнения захвата
 одиночных/множественных кадров, или записи видео с устройства video4linux.
Эти пакет/утилита могут быть, с большой вероятностью, уже установлены вместе с какими-то мультимедийными пакетами...

Код: Выделить всё

olej@R420:~$ sudo apt install streamer
[sudo] пароль для olej:
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово
Уже установлен пакет streamer самой новой версии (3.107-1.1).
Обновлено 0 пакетов, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 5 пакетов не обновлено.
Но в Fedora такую утилиту нужно поискать:

Код: Выделить всё

[olej@xenix ~]$ dnf provides streamer
Последняя проверка окончания срока действия метаданных: 0:03:05 назад, Ср 25 янв 2023 17:01:59.
xawtv-3.107-7.fc37.x86_64 : TV applications for video4linux compliant devices
Репозиторий        : @System
Совпадения с:
Имя файла   : /usr/bin/streamer

xawtv-3.107-7.fc37.x86_64 : TV applications for video4linux compliant devices
Репозиторий        : fedora
Совпадения с:
Имя файла   : /usr/bin/streamer

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

диагностика WEB-камеры

Непрочитанное сообщение Olej » 25 янв 2023, 18:25

Olej писал(а):
25 янв 2023, 18:10
2. В самой Linux V4L подсистеме есть такая утилита streamer

Код: Выделить всё

olej@R420:~$ streamer -help
streamer grabs image(s), records movies and sound

usage: streamer [ options ]

general options:
  -h          print this help text
  -q          quiet operation
  -d          enable debug output
  -p n        use n compression threads    [1]
  -w seconds  wait before grabbing         [0]

video options:
  -o file     video/movie file name
  -f format   specify video format
  -c device   specify video4linux device   [/dev/video0]
  -D driver   specify video4linux driver   [libv4l]
  -r fps      frame rate                   [10.000]
  -s size     specify size                 [320x240]

  -t times    number of frames or hh:mm:ss [1]
  -b buffers  specify # of buffers         [16]
  -j quality  quality for mjpeg or jpeg    [75]
  -n tvnorm   set pal/ntsc/secam
  -i input    set video source
  -a          don't unmute/mute v4l device.

audio options:
  -O file     wav file name
  -F format   specify audio format
  -C device   specify dsp device           [/dev/dsp]
  -R rate     sample rate                  [44100]


movie writers:
  files - multiple image files
    video formats:
      ppm     24 bit TrueColor (BE: rgb)   [ppm]
      pgm     8 bit StaticGray             [pgm]
      jpeg    JPEG (JFIF)                  [jpeg]
    audio formats:
      mono8   8bit mono                    [wav]
      mono16  16bit mono (LE)              [wav]
      stereo  16bit stereo (LE)            [wav]

  raw - single file, raw video data
    video formats:
      rgb     24 bit TrueColor (BE: rgb)   [raw]
      gray    8 bit StaticGray             [raw]
      422     16 bit YUV 4:2:2 (packed, YUYV) [raw]
      422p    16 bit YUV 4:2:2 (planar)    [raw]
      4mpeg   yuv4mpeg (mpeg2enc >= 1.6)   [yuv]
      4mpeg-o yuv4mpeg (old mpeg2enc)      [yuv]
    audio formats:
      mono8   8bit mono                    [wav]
      mono16  16bit mono (LE)              [wav]
      stereo  16bit stereo (LE)            [wav]

  avi - Microsoft AVI (RIFF) format
    video formats:
      rgb15   15 bit TrueColor (LE)        [avi]
      rgb24   24 bit TrueColor (LE: bgr)   [avi]
      mjpeg   MJPEG (AVI)                  [avi]
      jpeg    JPEG (JFIF)                  [avi]
    audio formats:
      mono8   8bit mono                    [avi]
      mono16  16bit mono (LE)              [avi]
      stereo  16bit stereo (LE)            [avi]

If you want to capture to multiple image files you should include some
digits into the movie filename (foo0000.jpeg for example), streamer will
use the digit block to enumerate the image files.

For file formats which can hold *both* audio and video (like AVI and
QuickTime) the -O option has no effect.

streamer will use the file extension of the output file name to figure
which format to use.  You need the -f/-F options only if the extension
allows more than one format.
...
Examples:
  capture a single frame:
    streamer -o foobar.ppm

  capture ten frames, two per second:
    streamer -t 10 -r 2 -o foobar00.jpeg

  record 30 seconds stereo sound:
    streamer -t 0:30 -O soundtrack.wav -F stereo

  record a quicktime movie with sound:
    streamer -t 0:30 -o movie.mov -f jpeg -F mono16

  build mpeg movies using mjpegtools + compressed avi file:
    streamer -t 0:30 -s 352x240 -r 24 -o movie.avi -f mjpeg -F stereo
    lav2wav +p movie.avi | mp2enc -o audio.mp2
    lav2yuv +p movie.avi | mpeg2enc -o video.m1v
    mplex audio.mp2 video.m1v -o movie.mpg

  build mpeg movies using mjpegtools + raw, uncompressed video:
    streamer -t 0:30 -s 352x240 -r 24 -o video.yuv -O audio.wav -F stereo
    mp2enc -o audio.mp2 < audio.wav
    mpeg2enc -o video.m1v < video.yuv
    mplex audio.mp2 video.m1v -o movie.mpg
-- 
(c) 1998-2001 Gerd Knorr <kraxel@bytesex.org>
Ну, вот такая элементарная проверка:

Код: Выделить всё

[olej@xenix FUJITSU.ESPRIMO.P420]$ streamer -o foobar.ppm
files / video: 24 bit TrueColor (BE: rgb) / audio: none

Код: Выделить всё

[olej@xenix FUJITSU.ESPRIMO.P420]$ ls -l foobar.ppm
-rw-r--r-- 1 olej olej 230415 янв 25 17:35 foobar.ppm

Код: Выделить всё

[olej@xenix FUJITSU.ESPRIMO.P420]$ file foobar.ppm
foobar.ppm: Netpbm image data, size = 320 x 240, rawbits, pixmap

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

диагностика WEB-камеры

Непрочитанное сообщение Olej » 25 янв 2023, 18:47

Olej писал(а):
25 янв 2023, 18:25
Ну, вот такая элементарная проверка:
Попутно можем попробовать проверить работу и аудио-канала:

Код: Выделить всё

[olej@xenix FUJITSU.ESPRIMO.P420]$ inxi -A
Audio:
  Device-1: Intel 8 Series/C220 Series High Definition Audio
    driver: snd_hda_intel
  Device-2: NVIDIA GF119 HDMI Audio driver: snd_hda_intel
  Device-3: GEMBIRD USB2.0 PC CAMERA type: USB
    driver: snd-usb-audio,uvcvideo
  Sound API: ALSA v: k6.1.7-200.fc37.x86_64 running: yes
  Sound Server-1: PipeWire v: 0.3.64 running: yes
У меня тут их аж 3 :!:

Код: Выделить всё

[olej@xenix FUJITSU.ESPRIMO.P420]$ streamer -t 0:30 -O soundtrack.wav -F mono16
files / video: none / audio: 16bit mono (LE)
oss: open /dev/dsp: No such file or directory
movie writer initialisation failed
Но тут - ошибка ... в связи с использованием старой звуковой системы OSS.
Которая по умолчанию в современном Linux не устанавливается.
Но может устанавливаться как плагин к ALSA, как мне помнится...
Обращаем внимание на годы развития streamer:
1998-2001
:-(

Ответить

Вернуться в «Железо для Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя