Сегодня раз мои рабочие дни выпали на праздничные дни дня защитника отечества и ввиду того факта, что все работает без сбоев есть время чтобы заняться самообразованием. А речь пойдет о том, как к плате Raspberry Pi 3 Model B и подключенной к ней USB Camera С250 управлять ею через утилиту fswebcam. Утилита 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+ # 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 прямо здесь и сейчас:
pi@raspberry:~ $ fswebcam -d v4l2:/dev/video0 -i 0 --list-controls
что данная камера поддерживает разрешение 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.