** Diskusia k článku:
Motion - II časť, rozšírená konfigurácia **
V minulej časti sme si ukazovali len tie najzákladnejšie nastavenia, konfiguráciu Motion. Dnes by som pokračoval a zakončil pár vecí. Nakonfigurovať motion na snímanie objektu v blízkosti, čo uvidíte i na priloženom videu tak, aby výsledok bol skutočne dobrý. Vysvetliť viac pár vecí z konfigurácie a vysvetliť, ako sa nahrávajú obrázky na FTP server, respektíve vytvoriť skript pre vymazávanie videí starších ako 7 dní. Poďme na to.
Rozšírená konfigurácia.
Minulé obrázky boli len obrázkami bez významu. Žiadny pohyb, len zmes obrázkov, ktoré nezlákajú využívať a predstaviť si hodnotu motion. Ja však potrebujem nastaviť motion tak, aby mi snímal už čo len tieň, aby mi nič neuniklo. Nakoniec, ukážeme si to na jednoduchom príklade. Ako som spomenul vyššie, idem sa venovať verzii snímania konkrétneho objektu. A to kvôli lepšiemu prehľadu. Zoberiem si USB kľúč a namierim naň web kameru. „ukradnem“ USB kľúč a prezriem záznam, či je zaznamenaný pohyb tak, ako si predstavujem. Avšak tu je moja druhá požiadavka. Chcem väčšie obrázky a výstup aj vo videu.
motion.conf
###########################################
# Capture device options
###########################################
# Image width (pixels). Valid range: Camera dependent, default: 352
width 640
# Image height (pixels). Valid range: Camera dependent, default: 288
height 480
Základné nastavenia rozlíšenie obrázkov v mojom prípade 640 x 480. Všetko však záleží na samotnej kamere.
# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
framerate 30
Táto voľba je zaujímavá. Určuje, koľko snímkov za 1 sekundu bude uložených, nasnímaných. To znamená, že čím vyššia hodnota, tým vyššia záťaž na počítač i na diskový priestor. Avšak to znamená i oveľa lepšiu kvalitu pri snímaní. V podstate Vám pri dobrom nastavení neunikne žiadny detail. Čo je teda optimum? Ja, ako vidíte, mám hodnotu 30. Základná hodnota je však 100 a nápoveda hovorí, že dostupný je takmer žiadny limit (To si však neviem presne predstaviť, no iste je rátané i s profesionálnymi kamerami.) Určite však nedávajte malé hodnoty, znižujú kvalitu získaného „možného dôkazného materiálu“.
######################################
# Motion Detection Settings:
######################################
# Threshold for number of changed pixels in an image that
# triggers motion detection (default: 1500)
threshold 100
Z minula už viete o čo ide. Zadaná hodnota určuje počet zmenených pixelov v snímku v pohybe. Čo to znamená presne? Ak sa na obrázku „mení“ v pohybe 100px, začne sa nahrávať. To určuje pomerne malý objekt. Pre blízke sledovanie objektu je to lepšia voľba. Ak by ste pre blízko sledovaný objekt rozhodli nastaviť väčší počet pixelov, znamená to možné straty. Samozrejme pre vzdialenejší objekt je lepšia hodnota trochu väčšia.
Dosť dôležitá je sekcia,
# Maximum length in seconds of an mpeg movie
# When value is exceeded a new mpeg file is created. (Default: 0 = infinite)
max_mpeg_time 60
ktorá určuje maximálny čas záznamu pre jedno video. Tiež opatrne, pretože malý disk môže byť zaplnený veľmi rýchlo.
####################################
# Image File Output
####################################
# The quality (in percent) to be used by the jpeg compression (default: 75)
quality 100
Kvalita kompresie snímkov. Základná hodnota je 75.
To boli základné hodnoty snímkov. Teraz keď spustíte motion, alebo motion -c /cesta/ku/konfiguracnemu/suboru/motion.conf, tak uvidíte sami oveľa lepší výsledok. Prezriete si priečinok a pred sebou máte mnoho obrázkov. Našou druhou úlohou je konfigurácia výstupu do videa. Aby ste mohli využívať túto možnosť, potrebujete balík ffmpeg. Nainštalujte si ho. Nasledujte sekciu v motion.conf.
#####################################
# FFMPEG related options
# Film (mpeg) file output, and deinterlacing of the video input
# The options movie_filename and timelapse_filename are also used
# by the ffmpeg feature
#####################################
# Use ffmpeg to encode mpeg movies in realtime (default: off)
ffmpeg_cap_new on
V reálnom čase (v dobe snímania) vytvára aj video. To je naša hlavná voľba. Zapnutím a spustením, či samotným snímaním, umožníme motion automaticky robiť videá z nasnímaných obrázkov.
# Codec to used by ffmpeg for the video compression.
# Timelapse mpegs are always made in mpeg1 format independent from this option.
# Supported formats are: mpeg1 (ffmpeg-0.4.8 only), mpeg4 (default), and msmpeg4.
# mpeg1 - gives you files with extension .mpg
# mpeg4 or msmpeg4 - gives you files with extension .avi
# msmpeg4 is recommended for use with Windows Media Player because
# it requires no installation of codec on the Windows client.
# swf - gives you a flash film with extension .swf
# flv - gives you a flash video with extension .flv
# ffv1 - FF video codec 1 for Lossless Encoding ( experimental )
# mov - QuickTime ( testing )
ffmpeg_video_codec mpeg4
Určujeme použitý kodek pri kompresii a tvorbe videa. Z dostupných volieb si vyberieme, aký chceme. Ja osobne využívam mpeg4 (mp4 video). Kvalita, ale aj využitý kodek pri spracovaní videa, hrajú veľkú úlohu pri výbere veľkosti disku. Dbajte na to.
Tak a teraz je motion nastavený tak, aby spĺňal naše požiadavky. Ukážme si to na tom popísanom príklade.
Čo má spraviť motion? Po spustení mi každých 5 sekúnd bude snímať obrázky bez toho, či ide o pohyb alebo nie. Hneď ako sa objaví moja ruka na scéne, mal by motion začať snímať obrázky a vytvárať video. Motion sa vypne hneď po tom, ako sa obraz ustáli. Som zvedavý, či motion dokáže zareagovať a ako rýchlo.
Motion bez problémov zareagoval na pohyb spred kamery. Hovoríme o snímaní objektu priamo pred kamerou. K dispozícií je i video, ktoré motion vytvoril podľa mojej definície, snímať hneď po zistení aktivity, až po ukončenie aktivity. Po skončení som nežiadal ďalšie sekundy navyše a tak je video veľmi rýchle. Stiahnete ho na adrese:
www.easy-share.com/1909161232/01-20100130172400.avi alebo po kliknutí na odkaz.
Teraz by sa to mohlo nejak využiť. Nastavíme si skript, ktorý vykoná úlohy po nasnímaní obrázkov, respektíve v čase "diania". Ide o to, aby sme sa aj my dozvedeli, že sa niečo deje.
Skript vykoná
Sekundovú kontrolu priečinku, kde sa ukladá video i každý uložený snímok. V prípade, že sa v priečinku objaví snímok, začne sa zadaná úloha. Zadaná úloha v našom prípade znamená spustenie výstražného zvuku pomocou konzolovej aplikácie na prehrávanie hudby mpg123, ktorú musíte a pravdepodobne máte nainštalovanú.
Skript
#!/usr/bin/bash
DIRTOCHECK=./scan/
SONG="/cesta/k/pesnicke/"
while [ 1 ]
do
if [ "`ls -A $DIRTOCHECK`" ]
then
if ! ps ax|grep "mpg123 $SONG"|grep -v grep > /dev/null 2> /dev/null
then
mpg123 "$SONG" > /dev/null 2> /dev/null&
fi
else
if ps ax|grep "mpg123 $SONG"|grep -v grep > /dev/null 2> /dev/null
then
# todo: kill only that one mpg123
killall -9 mpg123
fi
fi
sleep 1
done
Súbor s týmto textom uložte ako skript s koncovkou .sh.
Premenná DIRTOCHECK určuje adresu priečinka so snímkami.
SONG - určuje cestu k výstražnému zvuku
Zvuk si môžete voľne stiahnuť z tadiaľto:
simplythebest.net/sounds/WAV/events_WAV/..._WAV_files/alarm.zip
Je jasné, že pokiaľ budú v priečinku súbory, dovtedy bude skript vyhlasovať výstražný signál. Ide len o jedno z riešení, preto nemá zmysel komentovať túto voľbu. Volieb ako si ošetriť výstrahu je mnoho. Jednou ešte celkom dobrou možnosťou na výstrahu alebo informovanie je v prípade plniaceho sa obsahu priečinka notifikácia na mail. Za predpokladu, že využívate služby notifikáciu prichádzajúceho mailu na mobilný telefón, máte o zábavu postarané. (Spoločnosť Orange kedysi ponúkala možnosť notifikácie na mail). Možností je skutočne mnoho, takže ak sa nepáči tento spôsob, iste miesto kritiky napíšete a vymyslíte lepší

.
Automatizácia
Nasleduje posledná vec, ktorú by sme potrebovali. Nastaviť si automatizáciu. Ja si nastavujem pomocou skriptu túto udalosť:
Motion sa zapne automaticky v čase od 20.00 do 08.00. Skopíruje všetok obsah do priečinka /zaloha, do novo vytvoreného priečinka podľa aktuálneho dátumu. Súbory videí (mp4) skopíruje do priečinka /zaloha/datum/video a súbory obrázkov (jpg) skopíruje do priečinka /zaloha/datum/obrazky. Motion vymaže priečinok, kde sú aktuálne stiahnuté záznamy (u mňa /scan) a naplánuje si úlohu spustiť sa a toto isté vykonať v čase od 20.00 do 08.00. Navyše záznamy staršie ako 7 dní vymaže z priečinka /zaloha.
Skript motion.sh
#!/usr/bin/bash
# dakujem za pomoc xchg - Oliver Kindernay
MOTION="/usr/bin/motion"
CRONFILE="/var/spool/cron/crontabs/root"
START8="19 * * * * $MOTION 2> /var/log/motion_err.log > /var/log/motion.log" # pusti motion o 20.00
STOP8="7 * * * * $0 kill" # stopni motion o 8.00
DATUM=`date +"%d_%m_20%y"|tr -d '\n'`
SCANDIR="/scan"
PHOTODIR="/zaloha/$DATUM/obrazky"
VIDEODIR="/zaloha/$DATUM/video"
if [ "$1" = "kill" ]
then
killall motion
if ps -A|grep motion
then
killall -9 motion
fi
exit
fi
# Ak v crone nie su naplanovane ulohy, naplanuj ich
if ! cat $CRONFILE|grep -F "$START8" > /dev/null
then
echo "$START8" >> $CRONFILE
fi
if ! cat $CRONFILE|grep -F "$STOP8" > /dev/null
then
echo "$STOP8" >> $CRONFILE
fi
# presun nazbierane data
mv $SCANDIR/*.jpg $PHOTODIR/
mv $SCANDIR/*.mp4 $VIDEODIR/
rm -fr $SCANDIR/*
# vymaz subory starsie ako 7 dni
find /zaloha -type f -mtime +7 -exec rm {} \;
V skripte stačí pomeniť údaje v podobe:
- čas spustenia a čas vypnutia
- snímajucého priečinka
- záložného priečinka
- typy súborov
- čas vymazania súborov starších, ako
A to je všetko. Motion by ste mali v túto chvíľku mať nastavení i vrátane jeho skriptov. Vytvorili sme síce motion s nastavením na objekty blízke, no nastaviť ich na objekt vzdialenejší nie je vôbec ťažké. Dúfam že niekomu návod pomôže, minimálne uchráni to, čo potrebuje. Na koniec len dodám spomínaný upload na FTP.
on_picture_save wput ftp://username:password@yourserver %f.
Túto položku vložíte na koniec Vášho konfiguračného súboru, zmeníte parametre prihlasovacieho mena, hesla a servra Vášho FTP a uložíte. Nezabudnite si nainštalovať aplikáciu wput.