OS: Ubuntu 20.04 (Focal Fossa)
Am cumpărat recent o cameră Logitech c930e pentru a fi utilizată în examenele supravegheate online, unde supraveghetorul poate solicita afișarea unui act de identitate emis de guvern. Camera are o funcționalitate de focalizare automată care poate focaliza inițial pe obiecte apropiate (dacă unul este plasat în fața camerei la pornire), dar odată ce își mută focalizarea pe obiecte îndepărtate, nu poate re-detecta și focaliza ulterior pe obiecte apropiate. plasat în fața camerei. Acest lucru face ca textul de pe actele de identitate emise de guvern plasate în fața camerei să devină ilizibil.
După câteva cercetări inițiale, se pare că pot instala v4l-utils
și obțineți o listă de parametri pe care îi pot regla pe cameră după cum urmează (presupunând că nodul dispozitivului asociat este /dev/video1
):
$ v4l2-ctl -d /dev/video1 --list-ctrls
Filtrarea rezultatului pentru a include numai opțiunile legate de focalizare oferă:
$ v4l2-ctl -d /dev/video1 --list-ctrls | focus grep
focus_absolute 0x009a090a (int): min=0 max=255 step=5 default=0 value=0 flags=inactiv
focus_auto 0x009a090c (bool): implicit=1 valoare=1
Asa de focus_auto
este setat sa 1
și focus_absolut
la 0
implicit, care poate fi văzut și rulând următoarele comenzi:
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 1
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolut: 0
După câteva experimente manuale, se pare că focus_auto: 0
și focus_absolut: 75
oferă un echilibru bun de a face textul de prim-plan suficient de clar, fără a estompa prea mult obiectele îndepărtate:
$ v4l2-ctl -d /dev/video1 --set-ctrl focus_auto=0
$ v4l2-ctl -d /dev/video1 --set-ctrl focus_absolute=75
Așa că scriu un fișier de reguli udev /etc/udev/rules.d/90-logitech-c930e.rules
pentru aplicarea acestor setări:
KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0843", RUN+="/usr/bin/v4l2- ctl -d $devnode --set-ctrl focus_auto=0", RUN+="/usr/bin/v4l2-ctl -d $devnode --set-ctrl focus_absolute=75"
Acest fișier poate fi găsit și pe GitHub
The idVendor: 046d
și idProdus: 0843
am obtinut cu lsusb
:
$ lsusb | grep Logitech
Bus 001 Dispozitiv 002: ID 046d:0843 Logitech, Inc. Webcam C930e
Apoi repornesc systemd-udevd.service
:
$ sudo systemctl restart systemd-udevd.service
Deconectați camera și conectați-o din nou. În primele secunde, focus_auto
este setat sa 0
și focus_absolut
la 75
cum era de așteptat:
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 0
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolut: 75
Dar după câteva zeci de secunde cel mult, setările revin la valorile implicite:
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 1
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolut: 0
De ce ar putea fi asta? Este posibil să dezactivați acest comportament? Dacă da, cum?