ОС: Ubuntu 20.04 (Фокусная яма)
Недавно я купил камеру Logitech c930e для использования на онлайн-экзаменах под наблюдением, где наблюдатель может попросить предъявить удостоверение личности государственного образца. Камера имеет функцию автофокуса, которая может изначально фокусироваться на близких объектах (если один из них помещается перед камерой при ее запуске), но как только она переключает фокус на удаленные объекты, она не может повторно обнаруживать и перефокусироваться на близких объектах впоследствии. поставили перед камерой. Это приводит к тому, что текст на выданных государством удостоверениях личности, помещенных перед камерой, становится неразборчивым.
После некоторых первоначальных исследований оказалось, что я могу установить v4l-утилиты
и получить список параметров, которые я могу настроить на камере следующим образом (при условии, что связанный узел устройства /dev/видео1
):
$ v4l2-ctl -d /dev/video1 --list-ctrls
Фильтрация вывода для включения только параметров, связанных с фокусом, дает:
$ v4l2-ctl -d /dev/video1 --list-ctrls | grep фокус
focus_absolute 0x009a090a (int): мин.=0 макс.=255 шаг=5 по умолчанию=0 значение=0 флаги=неактивно
focus_auto 0x009a090c (логическое значение): по умолчанию = 1 значение = 1
Так focus_auto
установлен на 1
и focus_absolute
к 0
по умолчанию, что также можно увидеть, выполнив следующие команды:
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 1
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolute: 0
После некоторых ручных экспериментов кажется, что focus_auto: 0
и focus_absolute: 75
дает хороший баланс, делая текст крупным планом достаточно четким, не слишком сильно размывая удаленные объекты:
$ v4l2-ctl -d /dev/video1 --set-ctrl focus_auto=0
$ v4l2-ctl -d /dev/video1 --set-ctrl focus_absolute=75
Итак, я пишу файл правил udev /etc/udev/rules.d/90-logitech-c930e.rules
для применения этих настроек:
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"
Этот файл также можно найти на GitHub
idVendor: 046d
и idProduct: 0843
я получил с lsusb
:
$ lsusb | grep Logitech
Шина 001 Устройство 002: ID 046d:0843 Веб-камера Logitech, Inc. C930e
Затем я перезагружаю systemd-udevd.service
:
$ sudo systemctl перезапустить systemd-udevd.service
Отключите камеру и снова подключите ее. Первые несколько секунд focus_auto
установлен на 0
и focus_absolute
к 75
как и ожидалось:
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 0
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolute: 75
Но самое большее через несколько десятков секунд настройки возвращаются к значениям по умолчанию:
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 1
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolute: 0
Почему это может быть? Можно ли отключить это поведение? Если да, то как?