Linux (v4l) webcam - ajuste as configurações

2

Minha câmera Logitech (C300) é detectada corretamente e está presente em / dev / video0. No entanto, por padrão, a imagem tem contraste e saturação definidos no máximo, o que degrada significativamente a qualidade da imagem. Eu posso alterar as configurações usando o guvcview, mas depois de sair as configurações estão de volta ao normal (estou usando o mplayer para capturar quadros). Como posso fazer as alterações que eu faço no guvcview permanente?

EDITAR:

Parece que as configurações do guvcview são realmente "pegajosas" - se eu abri-lo novamente, a imagem permanece a mesma. Então é algo que os outros programas estão fazendo na inicialização da webcam (mesmo problema no mplayer e na vlc)

    
por petr 08.09.2012 / 08:04

2 respostas

1

Primeiro, a má notícia: atualmente não há solução integrada para fazer isso em qualquer distro que eu conheça.

A boa notícia é que essa solução é muito fácil de implementar e pode ser adaptada para muitos problemas semelhantes: só precisamos usar um pouco de udev e bash.

Primeiro, precisamos de uma maneira programática (amigável ao script) para definir essas configurações. Meu favorito é v4l2ctrl , pois ele pode salvar as configurações do V4L2 e restaurá-las sob demanda. Por exemplo:

  1. Primeiro, altere as configurações da sua câmera com qualquer programa de sua preferência. Eu realmente recomendo qv4l2 para isso, é incrível.
  2. Em seguida, salve as configurações da câmera em um arquivo. ( -d /dev/video0 é opcional, mas útil se você tiver mais de uma câmera.)

    v4l2ctrl -d /dev/video0 -s camera-settings.txt
    
  3. Se você desconectar e conectar novamente, as configurações serão perdidas, mas agora podemos recuperá-las:

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

Uma vez que você trabalhe assim, é hora de automatizá-lo com o udev. Para isso, vamos criar um arquivo de regras do nosso gosto que combine com a câmera. O arquivo pode ser chamado de /etc/udev/rules.d/99-v4l2-default-settings.rules e contém algo assim:

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

O texto acima executará como root o script /etc/camera-defaults/udev-hook.sh que será criado em breve sempre que um dispositivo do subsistema video4linux cujo nome do fabricante for "HD Pro Webcam C920" for detectado ou desconectado.

Poderíamos adicionar muitos filtros diferentes à nossa regra. Você pode usar udevadm info -a -p $(udevadm info -q path -n /dev/video0) para obter todas as variáveis possíveis para o dispositivo, bem como para seus dispositivos pai.

Por fim, crie o script. Aqui está algo simples que irá funcionar. Conceder permissões de execução!

#!/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

Mova camera-settings.txt para o diretório especificado, desconecte e conecte novamente. As configurações desse arquivo devem ter sido restauradas com sucesso.

A qualquer momento, no futuro, você precisará salvar suas configurações permanentemente, usar seu programa favorito para ajustá-las e, em seguida, executar:

v4l2ctrl -s /etc/camera-defaults/camera-settings.txt
    
por 11.09.2017 / 23:37
1

Eu consertei um problema semelhante seguindo essas etapas (adaptado da fonte ):

$ 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
    
por 15.09.2012 / 15:47