- PVSM.RU - https://www.pvsm.ru -
Доброе время суток!
В предновогоднюю ночь у меня возникла идея соорудить некое подобие видеонаблюдения. Все необходимое у меня имелось на руках:
Прочитав статью [2] я решил немного развить идею автора.
Основное отличие моей идеи от идеи автора заключается в том, что у меня присутствует возможность просмотра событий в режиме реального времени без потери основной функции — видеозаписи.
Итак, для начала познакомимся c главным «компонентом»:
Внешний вид Raspberry Pi:

Характеристики:
pi@hall-pi ~ $ cat /proc/cpuinfo
processor : 0
model name : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS : 2.00
Features : swp half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xb76
CPU revision : 7
Hardware : BCM2708
Revision : 000e
Serial : 000000005a82c372
Список официально поддерживаемых дистрибутивов можно найти тут [3]. Я же остановил свой выбор на Raspbian без графической оболочки.
Процесс установки достаточно прост и не нуждается в подробном описании, поэтому перечислю основные факты, на которые стоит обратить внимание:
После выполнения всех необходимых настроек можно приступать.
Для начала выполним установку всех необходимых пакетов:
sudo apt-get install imagemagick libav-tools libjpeg8-dev subversion
После чего скачаем и соберем mjpg-streamer:
sudo svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer/ mjpg-streamer
cd mjpg-streamer
make
Т.к. у нас все данные будут храниться в облаке, настроим работу с удаленной файловой системой по WebDAV:
sudo apt-get install davfs2
sudo mkdir /mnt/dav
sudo mount -t davfs https://webdav.yandex.ru /mnt/dav -o uid=pi,gid=pi
Для того, чтобы не вводить каждый раз имя пользователя и пароль, нужно добавить их в файл
/etc/davfs2/secrets
/mnt/dav user password
Добавим в /etc/rc.local команды для монтирования WebDAV и запуска скрипта для трансляции в сеть:
mount -t davfs https://webdav.yandex.ru /mnt/dav -o uid=pi,gid=pi
cd /home/pi/mjpg-streamer && ./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"
Теперь, зайдя по адресу http://:8080/ мы получим доступ к камере. Осталось только сделать проброс порта на роутере и можно получить доступ к камере за пределами локальной сети.
Первым делом нам надо получить изображение с камеры. Т.к. она уже занята (изображение транслируется веб-сервером), то воспользуемся возможностью получения текущей картинки с веб-сервера:
curl http://localhost:8080/?action=snapshot > out.jpg
В случае, если мы хотим нарисовать дату снимка на изображение, то мы можем воспользоваться командой convert
timestamp=`stat -c %y out.jpg`
convert out.jpg -fill black -fill white -pointsize 15 -draw "text 5,15 '${timestamp:0:19}'" out_.jpg
Полная версия скрипта:
#!/bin/bash
filename=$(perl -e "print time")
foldername=$(date --rfc-3339=date)
curl http://localhost:8080/?action=snapshot > $filename
timestamp=`stat -c %y $filename`
mkdir /mnt/dav/out/$foldername
convert $filename -fill black -fill white -pointsize 15 -draw "text 5,15 '${timestamp:0:19}'" /mnt/dav/out/$foldername/$filename.jpg
rm $filename
Сборка видео осуществляется командой avconv:
avconv -r 10 -i %06d.jpg -r 10 -vcodec mjpeg -qscale 1 out.avi
Полная версия скрипта сборки видео:
#!/bin/bash
filename=$(date --rfc-3339=date)
i=0
for f in `ls -tr /mnt/dav/out/$filename/*.jpg 2>/dev/null`
do
newf=`printf %06d $i`.jpg
echo $f "-->" $newf
mv $f $newf
i=$((i+1))
done
rmdir -R /mnt/dav/out/$filename/
avconv -r 10 -i %06d.jpg -r 10 -vcodec mjpeg -qscale 1 /mnt/dav/$filename.avi
rm *.jpg
Теперь осталось только прописать выполнение скриптов в планировщике Cron:
* * * * * pi bash /home/pi/cam.sh
59 23 * * * pi bash /home/pi/build.sh
Данный подход помогает избавиться от необходимости траты большого количества времени на просмотр видео, а так-же удешевляет конечный продукт. Благодаря присутствию полноценной ОС, появляется возможность расширять функционал в нужном направлении.
P.S. К сожалению опубликовать в хабы «DIY или Сделай Сам, Железо, Гаджеты. Устройства для гиков» не хватило кармы, выбрал наиболее близко доступное.
Автор: JustCrazy
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/52002
Ссылки в тексте:
[1] Raspberry Pi: http://ru.wikipedia.org/wiki/Raspberry_Pi
[2] статью: http://habrahabr.ru/post/196598/
[3] тут: http://www.raspberrypi.org/downloads
[4] Источник: http://habrahabr.ru/post/208058/
Нажмите здесь для печати.