Веб-камера Linux (v4l) - настройка " stick"

моя камера Logitech (C300) правильно обнаружена и присутствует в каталоге /dev/video0. Однако по умолчанию контрастность и насыщенность изображения установлены на максимум, что значительно ухудшает качество изображения.
Я могу изменить настройки с помощью guvcview, но после выхода настройки возвращаются к нормальному состоянию (я использую mplayer для захвата кадров). Как я могу сделать изменения, которые я делаю в guvcview постоянным?

изменить:

похоже, что настройки guvcview действительно " липкие" - если я открою его снова, изображение останется прежним. Таким образом, это то, что другие программы делают для инициализации веб-камеры (та же проблема на mplayer и vlc)

9
задан petr
09.05.2023 21:37 Количество просмотров материала 2872
Распечатать страницу

2 ответа

первая плохая новость: В настоящее время нет встроенного решения для этого в любом дистрибутиве, который я знаю.

хорошая новость заключается в том, что такое решение очень легко реализовать и может быть адаптировано для многих подобных задач: нам нужно только использовать немного udev и bash.

во-первых, нам нужен программный (дружественный к сценарию) способ установки этих параметров. Мой любимый v4l2ctrl, по мере того как оно может сохранить конфигурации V4L2 и после этого восстановить их по требованию. Для пример:

  1. сначала измените настройки камеры с помощью любой программы, которая вам нравится. Я очень рекомендую qv4l2 для этого, это здорово.
  2. затем сохраните настройки камеры в файл. (-d /dev/video0 необязательно, но полезно, если у вас есть более чем одна камера.)

    v4l2ctrl -d /dev/video0 -s camera-settings.txt
    
  3. если вы отключите и снова подключите настройки будут потеряны, но теперь мы можем восстановить их:

    v4l2ctrl -d /dev/video0 -l camera-settings.txt
    

как только вы получите это работает, как это, пришло время автоматизировать его с помощью udev. Для этого мы создадим файл правил по нашему вкусу, который соответствует камере. Файл можно назвать /etc/udev/rules.d/99-v4l2-default-settings.rules и содержать что-то вроде этого:

SUBSYSTEM=="video4linux", ATTR{name}=="HD Pro Webcam C920", RUN+="/etc/camera-defaults/udev-hook.sh"

выше будет работать как root скрипт /etc/camera-defaults/udev-hook.sh что мы скоро создадим всякий раз, когда устройство подсистемы video4linux чье имя производителя "HD Pro Webcam C920" обнаружено или отключено от сети.

мы могли бы добавить много различных фильтров к нашему правилу. Вы можете использовать udevadm info -a -p $(udevadm info -q path -n /dev/video0) чтобы получить все возможные переменные для устройства, а также для его родительских устройств.

наконец, создать сценарий. Вот что-то простое, что будет работать. дайте ему разрешения на выполнение!

#!/bin/bash
set -eu

# Useful for debugging, if you want to check what variables are available:
# set > /tmp/vars

if [ "$ACTION" == "add" ]; then
  v4l2ctrl -d "$DEVNAME" -l "/etc/camera-defaults/camera-settings.txt"
fi

движение camera-settings.txt в указанную директорию, отсоедините и снова подключите. Параметры из этого файла должны были быть успешно восстановлены.

в любое время в будущем вам нужно сохранить ваши настройки на постоянной основе, используйте свою любимую программу, чтобы настроить их а потом запустите:

v4l2ctrl -s /etc/camera-defaults/camera-settings.txt
1
отвечен Alicia 2023-05-11 05:25

я исправил подобную проблему, выполнив следующие шаги (адаптировано из source):

$ sudo apt-get install mercurial
$ hg clone http://linuxtv.org/hg/v4l-dvb
$ cd v4l-dvb
$ sudo make menuconfig <-- dont change anything, just "Exit" and save changes
$ sudo emacs v4l/.config <-- change CONFIG_DVB_FIREDTV=m to CONFIG_DVB_FIREDTV=n
$ make
$ sudo make install
$ v4l2ucp <-- Auto Gain off
1
отвечен terdon 2023-05-11 07:42

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх