Простое управление USB камерой через fswebcam

Posted by

Сегодня раз мои рабочие дни выпали на праздничные дни дня защитника отечества и ввиду того факта, что все работает без сбоев есть время чтобы заняться самообразованием. А речь пойдет о том, как к плате и подключенной к ней USB Camera С250 управлять ею через утилиту . Утилита fswebcam предназначена для захвата изображений с камер, а для всяких эффектов на изображение задействуется библиотека LibGD (GD Graphics Library). Где возможности библиотеки:

  • Удаление первых кадров
  • Изменение размера изображения
  • Наложение подписи на изображение
  • Сжатие для PNG и JPEG

и т.д.

По сути эта утилита еще один инструмент в продолжении заметки luvcview опубликованной ранее.

Итак моя система на плате Raspberry Pi 3 Model B:

pi@raspberrypi:~ $ uname -a && lsb_release -a

Linux raspberrypi 4.4.48-v7+ #964 SMP Mon Feb 13 16:57:51 GMT 2017 armv7l GNU/Linux

No LSB modules are available.

Distributor ID: Raspbian

Description: Raspbian GNU/Linux 8.0 (jessie)

Release: 8.0

Codename: jessie

Устанавливаю пакет fswebcam:

pi@raspberrypi:~ $ apt-cache search fswebcam && sudo apt-cache show fswebcam | grep Version

fswebcam - Tiny and flexible webcam program

Version: 20140113-1

pi@raspberrypi:~ $ sudo apt-get install fswebcam -y

Направив камеру на себя к примеру, а после переключившись на консоль набираю:

pi@raspberrypi:~ $ fswebcam test.jpg

--- Opening /dev/video0...

Trying source module v4l2...

/dev/video0 opened.

No input was specified, using the first.

Adjusting resolution from 384x288 to 352x288.

--- Capturing frame...

Captured frame in 0.00 seconds.

--- Processing captured image...

Writing JPEG image to 'test.jpg'.

Информация по сформированной картинке:

pi@raspberrypi:~ $ file test.jpg

test.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 96x96, segment length 16, comment: "CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 255", baseline, precision 8, 352x288, frames 3

И получаю снимок того куда была направлена USB камера:

Снимок захваченный USB камерой из утилиты fswebcamТак на экране есть временные отметки ( это хорошо), и не даром я сделал первоначальные настройки где настроил правильное время и часовой пояс. Данные реальные и точны.

Из предыдущей заметки где я показывал, как получить всю информацию по USB камере я выделил, либо с использование утилиты fswebcam прямо здесь и сейчас:

pi@raspberry:~ $ fswebcam -d v4l2:/dev/video0 -i 0 --list-controls

Информация по возможностям моей USB камерычто данная камера поддерживает разрешение 640×480, а зная это можно сформировать картинку указав с каким разрешение захватить изображение:

pi@raspberrypi:~ $ fswebcam -r 640x480 image2.jpg

pi@raspberrypi:~ $ file image2.jpg

image2.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 96x96, segment length 16, comment: "CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 255", baseline, precision 8, 640x480, frames 3

Чтобы на изображение не записывать временную отметку, можно добавить ключ запрещающий это дело:

pi@raspberrypi:~ $ fswebcam -r 640x480 --no-banner image3.jpg

Как говорит документация по данной утилите, все выше указанное можно оформить скриптом:

pi@raspberrypi:~ $ nano webcam

#!/bin/bash

DATE=$(date +"%d_%m_%Y_%H%M%S")

fswebcam -r 640x480 --no-banner /home/pi/screenshot$DATE.jpg

pi@raspberrypi:~ $ ./webcam

--- Opening /dev/video0...

Trying source module v4l2...

/dev/video0 opened.

No input was specified, using the first.

--- Capturing frame...

Captured frame in 0.00 seconds.

--- Processing captured image...

Disabling banner.

Writing JPEG image to '/home/pi/screenshot19_02_2017_164301.jpg'.

Тут все просто, либо же дополнить скрипт чтобы делал каждые 5 секунд снимок экрана:

pi@raspberrypi:~ $ nano webcam2

#!/bin/bash

while true

do

DATE=$(date +"%d_%m_%Y_%H%M%S")

fswebcam -r 640x480 --no-banner /home/pi/screenshot$DATE.jpg

sleep 5

done

pi@raspberrypi:~ $ chmod +x webcam2

pi@raspberrypi:~ $ ./webcam2

Чтобы его прервать следует нажать Ctrl + C. Сохраненные снимки будут доступны в каталоге, в моем случае в домашнем.

Помимо указания всех параметров в одну строку можно использовать конфигурационный файл где предопределил необходимые параметры запуск будет уже не столь пугающим:

pi@raspberrypi:~ $ nano fswebcam.conf

device "v4l2:/dev/video0"

resolution 640x480

input 0

frequency 30

palette YUYV
title "I on Work"

info "The Office"

banner-colour #FF000000

line-colour #FF000000
exec "mkdir -p /home/pi/archive/%d%m%Y 2> /dev/null"

save "/home/pi/archive/%d%m%Y/01-%d%m%Y%S.jpeg"

pi@raspberrypi:~ $ fswebcam -c fswebcam.conf

--- Opening v4l2:/dev/video0...

/dev/video0 opened.

--- Capturing frame...

Captured frame in 0.00 seconds.

--- Processing captured image...

Setting title "I on Work".

Setting info text "The Office".

Setting banner background colour to #FF000000.

Setting banner line colour to #FF000000.

Executing 'mkdir -p /home/pi/archive/24022017 2> /dev/null'...

Writing JPEG image to '/home/pi/archive/24022017/01-2402201730.jpeg'.

А картинка получается:

Захваченное изображение с применением тегов на изображенииПолучается с использованием этой утилиты fswebcam можно сделать, что запустив ее раз или по планировщику в заданные моменты она будет делать снимать того куда направлена USB камера и добавлять на снимок meta информацию, такую как: дату, время,заданное месторасположение. А уже потом через любой скрипт можно из множества изображений сделать видеоряд.

Примеры использования:

pi@raspberrypi:~ $ fswebcam -r 640x480 -S 30 --flip h --title "I work" --subtitle "The Office" --info "Monitor Active" --jpeg 9 -save office.jpg -q -l 60

  • —title → левый нижний угол изображения
  • —subtitile → левый нижний угол изображения под содержимым —title
  • —info → правый нижний угол изображения под содержимым отметки времени и даты.
  • -q → скрыть все сообщения из вывода
  • -l 60 → обновление сохраненного изображения каждый 60 секунд
  • —flip → переворачивать ли изображение (h — нормально, v — перевернуто)
  • —jpeg → сжатие изображения
  • -S → пропустить количество кадров перед захватом изображения

Вообще советую посмотреть справку по параметрам: fswebcam —help, man fswebcam

И так я рассмотрел работу своей usb камеры и платы Raspberry Pi 3 Model B с использованием утилиты fswebcam, конечно я понимаю что это не все, а лишь малая часть, но ведь надо же с чего-то начитать, а уже потом в задачу подбирается инструмент для ее решения. Короче это просто заметка, что получать изображения сохранением кадров с USB камеры можно через утилиту fswebcam и не обязательно это может быть плата Raspberry. А раз так, то и заметку где я смотрел за своим газовым котлом можно переделать, утилита fswebcam снимает изображения, а в конце дня происходит слияние множества снимков в единый видео файл. На этом всё с уважением Олло Александр aka ekzorchik.