Видеонаблюдение.
В сегодняшнем видео я рассказал о видеонаблюдении, и затронул скрипты которые работают совместно с моей камерой (Foscam FI8918W).
Ими я и хочу поделится с вами.
Ваши идеи и предложения пишите в комментариях.
Скрипт для патруля камеры.
(/usr/local/bin/cam_patrol)
#!/bin/bash # Variables #start Posirion SP=1 #forward (0:1) F=1 #Last camera position END_POS=3 #Timer wait camera snap (seconds) SNT=2 #Timer wait camera motion (seconds) MT=10 echo "===================================================" echo "Start camera control $(date)" echo "Start position : $SP" echo "Direction motion: $F" echo "Timers: Snap_time: $SNT, Motion_time: $MT" echo "===================================================" while : do MSP=$SP if [ "$F" = "1" ]; then echo "Motion: L to R --> " SP=$(($SP+1)) if [ "$SP" = "$END_POS" ]; then. echo "End position [$END_POS], change direction <--" F=0 fi else echo "Motion: R to L <-- " SP=$(($SP-1)) if [ "$SP" = "1" ]; then echo "Start position [$SP], change direction -->" F=1 fi fi echo "Snap..." /usr/local/bin/cam snap $MSP sleep $SNT echo "Motion..." /usr/local/bin/cam go $SP sleep $MT echo "===================================================" done
Скрипт для управления камерой он же (/usr/local/bin/cam)
#!/bin/bash [ -z "$1" ] && exec $0 h #CAMERA auth data user="admin" pass="password" #CAMERA ip address ip="192.168.1.100" #################################### #################################### addy="http://${ip}" arg=$# while [ "$arg" -ne "0" ]; do case "$1" in go) echo "Setup position: $2" [ $2 = 1 ] && wget -q -O - "${addy}/decoder_control.cgi?command=31&user=${user}&pwd=${pass}" [ $2 = 2 ] && wget -q -O - "${addy}/decoder_control.cgi?command=33&user=${user}&pwd=${pass}" [ $2 = 3 ] && wget -q -O - "${addy}/decoder_control.cgi?command=35&user=${user}&pwd=${pass}" [ $2 = 4 ] && wget -q -O - "${addy}/decoder_control.cgi?command=37&user=${user}&pwd=${pass}" [ $2 = 5 ] && wget -q -O - "${addy}/decoder_control.cgi?command=39&user=${user}&pwd=${pass}" [ $2 = 6 ] && wget -q -O - "${addy}/decoder_control.cgi?command=41&user=${user}&pwd=${pass}" [ $2 = 7 ] && wget -q -O - "${addy}/decoder_control.cgi?command=43&user=${user}&pwd=${pass}" [ $2 = 8 ] && wget -q -O - "${addy}/decoder_control.cgi?command=45&user=${user}&pwd=${pass}" [ $2 = 9 ] && wget -q -O - "${addy}/decoder_control.cgi?command=47&user=${user}&pwd=${pass}" [ $2 = 10 ] && wget -q -O - "${addy}/decoder_control.cgi?command=49&user=${user}&pwd=${pass}" [ $2 = 11 ] && wget -q -O - "${addy}/decoder_control.cgi?command=51&user=${user}&pwd=${pass}" [ $2 = 12 ] && wget -q -O - "${addy}/decoder_control.cgi?command=53&user=${user}&pwd=${pass}" [ $2 = 13 ] && wget -q -O - "${addy}/decoder_control.cgi?command=55&user=${user}&pwd=${pass}" [ $2 = 14 ] && wget -q -O - "${addy}/decoder_control.cgi?command=57&user=${user}&pwd=${pass}" [ $2 = 15 ] && wget -q -O - "${addy}/decoder_control.cgi?command=59&user=${user}&pwd=${pass}" [ $2 = 16 ] && wget -q -O - "${addy}/decoder_control.cgi?command=61&user=${user}&pwd=${pass}" shift; shift; arg=$(($arg - 2));; ir) [ $2 = on ] && wget -q -O - "${addy}/decoder_control.cgi?command=95" [ $2 = off ] && wget -q -O - "${addy}/decoder_control.cgi?command=94" shift; shift; arg=$(($arg - 2));; snap) echo "Snap position: $2" snapfile=`date +%s` mkdir -p /opt/snap/`date +%Y%m%d`/$2 wget -q -O ${snapfile}.jpg "${addy}/snapshot.cgi?user=${user}&pwd=${pass}" dates=$(stat ${snapfile}.jpg | grep Modify | cut -d ' ' -f 2,3 | cut -d ':' -f1,2) convert ${snapfile}.jpg -gravity SouthEast -pointsize 22 -fill white -annotate +30+30 "$dates (P:$2)" /opt/snap/`date +%Y%m%d`/$2/${snapfile}.jpg; rm -f ${snapfile}.jpg /usr/local/bin/upload_web /opt/snap/`date +%Y%m%d`/$2/${snapfile}.jpg echo "snap: OK" shift; shift; arg=$(($arg - 2));; esac done
Пояснение:
В начале стоит заглушка от многократных запусков.
Указываются сразу логин — пароль и ip камеры, и скрипт готов к работе.
В аргументе snap используется аплоадер (/usr/local/bin/upload_web) изображений на веб сервер.
входные аргументы:
go %1-16% — движение камеры к позициям от 1 до 16
snap %POS% — снапшот с номером позиции (тут добавляется еще время и дата)
ir %on-off% — включение и отключение подсветки ИК
Аплоадер (/usr/local/bin/upload_web)
Входящая переменная есть путь до файла снапшота.
#!/bin/bash pth=$1 curl -i \ -F "prefix=SALT" \ -F "filecomment=This upload current state" \ -F "image=@$pth" \ http://www.URL.domain/cam_uploader.php
Веб скрипт (cam_uploader.php)
Во стороны вебсервера скрипт очень простой и примитивный, служит только для загрузки файла.
$uploaddir = '/var/www/domain/cam/'; $uploadfile = $uploaddir . "camera.jpg"; if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) { echo "OK\n"; } else { echo "ERR\n"; }
Ну и для видео архива используется простой скрипт (/usr/local/bin/cam_video)
#!/bin/bash name="`date +%Y-%m-%d_%H.%M`" BASEpath='/opt' RECdate=`date +%Y-%m-%d` user='admin' pass='password' ip='192.168.1.100' port='80' RECpath=$BASEpath'/video/cam01/'$RECdate mkdir -p $RECpath > /dev/null ffmpeg -i http://${user}:${pass}@${ip}:${port}/videostream.asf -r 30 -vcodec copy -an -t 300 $RECpath/$name.mp4 /dev/null 2>/tmp/cam01.log &
Что хочу подчеркнуть в отдельные переменные не вынесены параметры ffmpeg если, кто захочет сделает сам.
Подсказка:
«-r 30» — фреймрейт
«-an» — без звука
«-t 300» — длительность 5 минут
Вроде всё, теперь поговорим о запуске.
Стартуют скрипты в скрине
screen -d -m /usr/local/bin/cam_patrol
Видео запись стартует по крону (/etc/cron.d/cam_video
) с переодичностью в 5 минут, что позволяет закончить предыдущую запись и начать новую.
*/5 * * * * root /root/cam_video
На этом всё.
Делайте свои камеры умными.
И наслаждайтесь технологиями.
Ждите следующих видео!
Не забудьте подписаться на канал!