Linux (v4l) Webcam - Einstellungen "stick" vornehmen

2114
petr

Meine Logitech-Kamera (C300) wird ordnungsgemäß erkannt und unter / dev / video0 angezeigt. Der Kontrast und die Sättigung des Bildes sind jedoch standardmäßig auf Maximum eingestellt, wodurch die Bildqualität erheblich beeinträchtigt wird. Ich kann die Einstellungen mit guvcview ändern, aber nach dem Beenden sind die Einstellungen wieder normal (ich verwende mplayer, um Frames aufzunehmen). Wie kann ich die in guvcview vorgenommenen Änderungen dauerhaft vornehmen?

BEARBEITEN:

Es sieht so aus, als ob die Einstellungen von guvcview tatsächlich "klebrig" sind - wenn ich es wieder öffne, bleibt das Bild gleich. Es ist also etwas, was die anderen Programme zur Initialisierung der Webcam tun (dasselbe Problem bei mplayer und vlc)

2

2 Antworten auf die Frage

2
Alicia

Zuerst die schlechte Nachricht: Derzeit gibt es keine integrierte Lösung, um dies in jeder mir bekannten Distribution zu tun.

Die gute Nachricht ist, dass eine solche Lösung sehr einfach zu implementieren ist und für viele ähnliche Probleme angepasst werden kann: Wir brauchen nur etwas Udev und Bash.

Erstens benötigen wir eine programmatische (script-freundliche) Methode, um diese Einstellungen festzulegen. Mein Favorit ist v4l2ctrl, da er V4L2-Konfigurationen speichern und bei Bedarf wiederherstellen kann. Zum Beispiel:

  1. Ändern Sie zunächst die Kameraeinstellungen mit einem beliebigen Programm. Ich empfehle qv4l2 wirklich dafür, es ist großartig.
  2. Speichern Sie dann die Kameraeinstellungen in einer Datei. ( -d /dev/video0ist optional, aber nützlich, wenn Sie mehr als eine Kamera haben.)

    v4l2ctrl -d /dev/video0 -s camera-settings.txt 
  3. Wenn Sie den Stecker ziehen und erneut anschließen, gehen die Einstellungen verloren. Jetzt können wir sie wiederherstellen:

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

Sobald es funktioniert, ist es an der Zeit, es mit udev zu automatisieren. Dazu erstellen wir eine Regeldatei, die der Kamera entspricht. Die Datei kann aufgerufen werden /etc/udev/rules.d/99-v4l2-default-settings.rulesund etwa Folgendes enthalten:

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

Das obige wird als root das Skript ausführen /etc/camera-defaults/udev-hook.sh, das wir in Kürze erstellen werden, wenn ein Gerät des Subsystems mit dem video4linuxHerstellernamen "HD Pro Webcam C920" erkannt oder entfernt wird.

Wir könnten unserer Regel viele verschiedene Filter hinzufügen. Sie können udevadm info -a -p $(udevadm info -q path -n /dev/video0)alle möglichen Variablen für das Gerät sowie für seine übergeordneten Geräte abrufen.

Erstellen Sie schließlich das Skript. Hier ist etwas einfaches, das funktionieren wird. Erteilen Sie ihm Ausführungsberechtigungen!

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

Verschieben Sie camera-settings.txtin das angegebene Verzeichnis, ziehen und wieder einstecken. Die Einstellungen aus dieser Datei sollten erfolgreich wiederhergestellt worden sein.

In Zukunft müssen Sie Ihre Einstellungen dauerhaft speichern. Verwenden Sie Ihr bevorzugtes Programm, um sie zu optimieren, und führen Sie dann Folgendes aus:

v4l2ctrl -s /etc/camera-defaults/camera-settings.txt 
Ich habe diese Lösung konsolidiert und in einem Git-Repository veröffentlicht: https://git.ao2.it/v4l2-persistent-settings.git/ Ich habe auch versucht, auf Linux-Media zu fragen, was v4l-Entwickler darüber denken: https: //www.spinics.net/lists/linux-media/msg143521.html Antonio Ospite vor 5 Jahren 0
1
terdon

Ich habe ein ähnliches Problem mit diesen Schritten behoben (von der Quelle übernommen ):

$ 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