Site Mascot
 

Не удивляйтесь, сайт переехал: был http://smacker.fatal.ru, стал http://smacker.heliohost.org.

Вебкамера Logitech C100 в Linux

22.09.2011 16:09

Как убрать размытые кадры и что я попутно узнал об этом устройстве и его настройке.

 
Вебкамеру я купил для проведения визуальной рекогносцировки в труднодоступных местах при ремонте, на смену разбитому зеркальцу. В линуксе (Debian Squeeze, Ubuntu 10.04) она завелась сразу из коробки, но при резких движениях видео получалось размытым. Ниже я расскажу, что это и как с этим бороться.

 

Logitech C100 USB Webcam

 

Во-первых, как смотреть видео с камеры? Способов много, но я предпочитаю mplayer:
 mplayer -tv device=/dev/video1 tv://
 
Устройство пришлось указать потому, что у меня уже есть /dev/video0 — это встроенная вебкамера ноутбука, в противном случае можно обойтись просто «mplayer tv://». Можно ещё использовать Cheese, Camorama и даже VLC. Это уж как кому удобнее. На камере сверху есть кнопка, она распознаётся как XF86WebCam — и, например, Cheese по нажатию на неё начинает делать фотографию.

 

Теперь о размытых кадрах. Веб-камера может работать на 30 кадрах в секунду, но по умолчанию работает в адаптивном режиме, увеличивая выдержку (и, следовательно, снижая количество кадров в секунду) для компенсации недостаточной освещённости. Картинка получается ярче, но при быстром перемещении камеры, конечно же, смазывается. Чтобы настроить камеру, понадобится утилита uvcdynctrl из одноимённого пакета.

 

Сначала посмотрим, какие у меня есть устройства:
 smacker@Battlestar:~$ uvcdynctrl -l
 Listing available devices:
   video1   UVC Camera (046d:0817)
   video0   HP Webcam
 

 

Теперь посмотрим, какие есть доступные параметры у вебкамеры C100:
 smacker@Battlestar:~$ uvcdynctrl -d video1 -c
 Listing available controls for device video1:
   Raw bits per pixel
   Disable video processing
   LED1 Frequency
   LED1 Mode
   Exposure, Auto Priority
   Exposure (Absolute)
   Exposure, Auto
   Backlight Compensation
   Sharpness
   White Balance Temperature
   Power Line Frequency
   Gain
   White Balance Temperature, Auto
   Saturation
   Contrast
   Brightness
 

 

Далее, можно было бы посмотреть их значения по одному, используя ключ -g, но я написал однострочник на bash, который выводит все параметры вместе с их текущими значениями. Вот он, в развернутом виде:

 

 DEVICE=video1; 
 uvcdynctrl -d $DEVICE -c | while read line; do 
 	echo -n $line; 
 	if [[ $line != *$DEVICE* ]]; then 
 		echo -n ": "; 
 		uvcdynctrl -d $DEVICE -g "$line"; 
 	else
 		echo;
 	fi;
 done
 

 

Его можно записать обратно в одну строчку, а можно сохранить в файл и использовать как скрипт.

 

Что же можно узнать о вебкамере C100?
 smacker@Battlestar:~$ DEVICE=video1; uvcdynctrl -d $DEVICE -c | while read line; \
  do echo -n $line; if [[ $line != *$DEVICE* ]]; then \
  echo -n ": "; uvcdynctrl -d $DEVICE -g "$line"; else echo; fi; done
 
 Listing available controls for device video1:
 Raw bits per pixel: 0
 Disable video processing: 0
 LED1 Frequency: 0
 LED1 Mode: 3
 Exposure, Auto Priority: 1
 Exposure (Absolute): 166
 Exposure, Auto: 3
 Backlight Compensation: 1
 Sharpness: 20
 White Balance Temperature: 4000
 Power Line Frequency: 2
 Gain: 0
 White Balance Temperature, Auto: 1
 Saturation: 38
 Contrast: 32
 Brightness: 128
 

 

Параметр, который меня интересовал — Exposure, Auto Priority. Если он установлен в 0, то веб-камера будет выдавать положенное число кадров в секунду без подстройки, а изображение будет чётким, но потенциально тёмным:
 uvcdynctrl -d video1 -s "Exposure, Auto Priority" 0
 

 

Я поэкспериментировал и с другими параметрами, и вот что выяснил:

 

Power Line Frequency — частота переменного напряжения в сети, используется для подавления мерцания ламп. 0 — 50 Гц, 1 — 60 Гц, 2 — отключено.

 

LED1 Mode — режим работы индикатороного светодиода. 0 — выключен, 1 — включен, 2 — мигает, 3 — вероятно, «авто». Надо отметить, что обращение к вебкамере за видеопотоком велючает светодиод в любом случае, так что снимать видео незаметно не получится.
LED1 Frequency — частота моргания светодиода в режиме 2. Чем больше значение (0-254) , тем быстрее мигает.

 

Exposure, Auto — включает (3, по умолчанию) или выключает (1) автоматический подбор времени выдержки для кадра. Если он установлен в 1, то становится возможным применять следующую опцию:
Exposure (Absolute) — задаёт длительность выдержки для кадра при отключенном автоподборе (например, 300 — это 1/30 секунды). Необходимо отметить, что менять этот параметр — в отличие от предыдущего — можно только на работающей вебкамере (т.е. когда камера снимает видео). Если установить его при отключенной камере, то при включении она вместо видео будет показывать мусор или зелёный прямоугольник. Впрочем, настройки камеры сбрасываются в умолчания при отсоединении её от компьютера.

 

Назначение остальных параметров — баланс и температура белого, резкость, контрастность, насыщенность, яркость — как мне кажется, довольно очевидно. К тому же, если вы наверняка знаете, что какой-то из них вам надо «подкрутить», то почти наверняка вы знаете о них больше, чем я.
  1. bigproger
    Email: bigproger гав-гав gmail.com  
    у меня проблема ...
    ниже написан скрипт , на самом деле качество лучше , но когда использую программку skype то изображение тормозит в точнее просто зависает , что сделать ?
    приходоться перезапускать устройство ...жду ответа на почту .... и вот ещё что , получаеться , через утилиту uvcdynctrl можно управлять любой камерой ? а как управлять удаленной камерой ?


    #!/sbin/bash
    device=video0;
    uvc=uvcdynctrl
    $uvc -d $device -s "Exposure, Auto Priority" 0 ; echo "Exposure, Auto Priority: 0"
    $uvc -d $device -s "Power Line Frequency" 1 ; echo "Power Line Frequency: 1"
    $uvc -d $device -s "LED1 Mode" 2 ; echo "LED1 Mode: 2"
    $uvc -d $device -s "LED1 Frequency" 200 ; echo "LED1 Frequency: 10"
    $uvc -d $device -s "Exposure, Auto" 3 ; echo "Exposure, Auto: 3"
    $uvc -d $device -s "Exposure (Absolute)" 0 s; echo "Exposure (Absolute): 0 "
    sleep 2
    mplayer tv:// $DEVICE
    exit 0
    [ Запись от 19.12.2011, отправлена в 6:49 ]
    1. Про Skype ничего не могу сказать, не пользуюсь.
    2. Управлять можно любой камерой стандарта V4L2, насколько это позволяют предоставляемые ей контролы.
    3. Удалённой камерой можно управлять через SSH: авторизация по ключу и указание команды, которую надо выполнить, вполне прокатят.
  2. Я буду рад, если вы оставите свой отзыв об этой заметке:

    Никнейм

    Email

    URL

    Заголовок комментария

    Проверка на человечность
    - Введите буквы:
    The CAPTCHA image