Linux E X P R E S

Facebook

Motion - zachyťte pohyb

Možná jste si někdy pohrávali s myšlenkou, jak zabezpečit majetek před nenechavci všeho druhu. Poměrně účinnou metodou je cenné věci někde skrýt, přivázat, přišroubovat, zamknout a vůbec nejlepší je nic nemít. Jak ale ochránit majetek na veřejně přístupných místech? Může to být auto, kolo nebo výpočetní technika. S tímto problémem se potýkala i naše škola a jak to tak bývá, někoho chytrého napadlo koupit kamery.


Zakoupily se tedy tři síťové kamery Axis 205. V kamerách běží jako operační systém Linux a jejich konfigurace je možná prostřednictvím webového prohlížeče. Přes webové rozhraní také můžete sledovat video nebo zachytit snímek z kamery. Video je v rozlišení 640x480 a používá se mjpeg (Motion JPEG).

Obrázek: 1.jpg

Spolu s programem doporučuji také instalaci mencoderu pro vytváření snímků s denním záznamem. Budete-li vytvářet video ve formátu msmpeg4 (viz dále), bude nutné doinstalovat i knihovnu avisynth.dll. Umístěte ji do adresáře s kodeky (/usr/lib/win32/). Knihovna je potřebná pro správnou funkci mencoderu.

Další otázkou je záznam a zpracování výsledků. Pomocí klasických nástrojů běžně dostupných v kterékoliv linuxové distribuci (wget, trocha skriptování a cron) jsem zanedlouho vytvořil "automat" schopný uchovat týdenní záznam. Vše běželo dobře a nebylo nutné se o nic dalšího starat. Staré záznamy se mazaly, nové přibývaly a když se něco vyskytlo, tak člověk sáhnul do adresáře a potřebné snímky vytáhl. Vše běželo na starším počítači (P200, 64 MB RAM, 80 GB disk). Data zabírala do 40 GB a počítač uchovával týdenní záznam - obrázky zhruba v 1-2 sekundových intervalech po 12 hodin denně.

Pak jsem ovšem narazil na program Motion. Motion je softwarový detektor pohybu. Tento program tedy hlídá danou kameru a v případě detekce pohybu začne ukládat záznam. Jak probíhá detekce pohybu? Program porovnává jednotlivé snímky, a pokud mezi nimi zaznamená rozdíl překračující stanovenou mez, začne záznamenávat. Samozřejmě k tomu přidá i stanovený počet předchozích snímků zachycujících pohyb a vše pěkně uloží do video souboru, případně uloží i jednotlivé snímky ve formátu JPG. Program umí také streamovat video dál do sítě ve formátu mjpeg (webcam server), či ukládat do MySQL nebo PostgreSQL databáze. Je také možné odesílat záznam (pohyb) na další zařízení přes video4linux.

Program neobsahuje žádné speciální ovladače pro kamery, a tak jsou podporována snad všechna zařízení rozeznaná jádrem - video4linux (např. /dev/video0) a síťové kamery.

Obrázek: 2.jpg

Nastavení

Většina konfigurace se provádí v souboru /etc/motion.conf. Volby jsou dobře okomentovány, takže můžete začít nastavovat. Ze začátku bych ale doporučil držet se některých výchozích hodnot, neboť špatně nastavené hodnoty (příliš přemrštěné) mohou značně zatížit počítač a razantně tak snížit výkon a schopnosti celého programu. Některé volby si nyní projdeme, i když se omezím na mnou použitou konfiguraci pro síťové kamery.

daemon [on/off] spustit na pozadí
 
rotate [0,90, 180, 270] rotace obrázků a videa ve stupních
 
width hodnota šířka obrázku (podle možností kamery)
 
height hodnota výška obrázku (podle možností kamery)
 
framerate hodnot počet snímků za sekundu, nastavte dle výkonu počítače
 
brightness [0..255] nastavení jasu
 
contrast [0..255] nastavení kontrastu
 
saturation [0..255] nastavení sytosti
 
target_dir /cesta/do/adresare umístění adresáře, kde se budou uchovávat obrázky a videa z kamery
 
netcam_url adresa URL adresa kamery (u kamer Axis adresa vypadá zpravidla takto: http://ip.adr.sitove.kamery/mjpg/video.mjpg)

V případě připojení na více kamer nechejte volbu netcam_url (doporučuji i target_dir) prázdnou a naopak do souboru přidejte následující:

thread cesta/k/souboru např. thread /etc/kamera1.conf

Zde platí následující pravidlo: co kamera, to další soubor. Každá kamera tedy musí mít vlastní konfigurační soubor. Nastavení se pak načítá ze souboru /etc/motion.conf (zde je společné nastavení pro všechny kamery) a pak z konfiguračního souboru dané kamery. Parametry určené v souboru /etc/motion.conf jsou společné pro všechny kamery, nicméně pokud je nastavíte v souboru konkrétní kamery, bude použita tato volba. V mém případě použití tří síťových kamer je konfigurace tato:

thread /etc/kamera1.conf
thread /etc/kamera2.conf
thread /etc/kamera3.conf
Soubor /etc/kamera1.conf pak obsahuje pouze dvě volby
netcam_url http://ip.adr.sitove.kamery/mjpg/video.mjpg
target_dir /cesta/do/adresare/kamery1

Tyto soubory je nejlepší vytvořit ručně a pouze tam dodat upravené parametry nutné pro danou kameru. Vytvoření souboru zkopírováním /etc/motion.conf je sice možné, ale proč to dělat složitější, než to je.

 
threshold hodnota množství změněných pixelů, který považujeme za pohyb
 
noise_level hodnota úroveň šumu, stejně jako threshold umožňuje jemné doladění detekce pohybu
 
pre_capture počet počet uložených snímků před detekcí pohybu
 
post_capture počet počet uložených snímků po ukončení pohybu (u těchto parametrů opatrně, příliš vysoké hodnoty pre_capture i post_capture mohou značně zatížit počítač)
 
gap hodnota dva pohyby jsou považovány za různé, je-li překročena tato hodnota (v sekundách); Motion rozděluje jednotlivé pohyby, je-li časový úsek mezi pohyby menší než tato hodnota, budou pohyby považovány za jeden a spojeny dohromady
 
output_normal [on, off, first] při detekci pohybu ukládej také obrázky (JPG) stále (on), nikdy (off), pouze první snímek (first)
 
ffmpeg_cap_motion [on, off] je-li zapnuto pak (kromě videa zachycujícího celou oblast) vytvoří i video obsahující pouze pohybující se objekt - "snímky zeleného ducha"
 
ffmpeg_video_codec [mpeg1, mpeg4, msmpeg4] důležitá volba, která říká, v jakém formátu má být ukládáno video, mpeg1 vytváří soubory .mpg, mpeg4 a msmpeg4 .avi; chcete-li si však přehrát video i ve Windows bez nutnosti dodatečně instalovat příslušný kodek, použijte msmpeg4
 
snapshot_interval hodnota vytvoření pravidelného snímku v intervalu hodnota (v sekundách)
 
snapshot_filename formatovaci_retezec název automatického snímku
 
jpeg_filename formatovaci_retezec název obrázků zachycujících pohyb
 
ffmpeg_filename formatovaci_retezec název videa zachycujícího pohyb (doporučuji nechat výchozí hodnoty, řetězec obsahuje datum, čas, atd..)
 
mail emailova_adresa při detekci pohybu pošle e-mail
 
execute prikaz při detekci pohybu vykoná příkaz

Nyní máme nakonfigurováno, a tak můžeme spustit vlastní program. To provedeme příkazem motion. Pokud jsme nastavili daemon on, pak bude program spuštěn na pozadí. Teď už jen stačí zamávat do kamery a můžete si prohlédnout výsledek své práce.

Použitý HW: Intel Pentium III 700 MHz, 2x 18GB SCSI disky v poli RAID 0, 256 MB RAM.

Automatizujeme činnost

Nejprve bych chtěl upozornit, že následující postup není jediný možný a na stránkách projektu naleznete další. Bohužel mi nefungoval. Nicméně chyba bude zřejmě někde mezi židlí a klávesnicí. Zadáme crontab -e a můžeme napsat:

0 6 * * * /usr/bin/motion
0 21 * * * killall motion
10 21 * * * /nejaka/cesta/zpracovani
0 3 * * * /usr/bin/find /cesta/k/zaznamum -type f -name '*.avi' -mtime +14 -exec rm {} @reboot /usr/bin/motion

Po ukončení editoru dojde k aktivaci nového crontabu. Výše uvedené znamená toto: v 6:00 spusť motion a ukonči ho ve 21:00, ve 21:10 spusť zpracovani a konečně ve 3:00 smaž záznamy starší 14 dnů. Poslední záznam pak spustí motion při startu počítače. Skript zpracovani se stará o vytvoření denního snímku a smazání dále nepotřebných souborů.

#!/bin/bash
# skript zpracovani
# zjištění aktuálního data, které se použije v názvu souboru
datum=`date +%d`
# zpracování jedné kamery, pro další kamery nutno přidat a upravit
cd /cesta/do/adresare/kamera1
#vytvoření denního záznamu
cat `ls -r -t *.avi` >> /cesta/hotovo/kamera1/video.avi
rm *
cd /cesta/hotovo/kamera1
#oprava výsledného souboru pomocí mencoderu
mencoder -noidx -o $datum.avi -ovc copy  -oac copy video.avi
rm video.avi

Při vytvoření denního záznamu je vhodnější použít výše uvedené cat `ls -r -t *.avi` než cat *, jak je uvedeno ve FAQ projektu. Pomocí ls si totiž záznamy seřadíme dle času vzniku, a tak jsou ve výsledku umístěny v pořadí, v jakém byly vytvořeny.

Náročnost jedné kamery: vytížení CPU se pohybuje v rozmezí 10 až 30 % podle prováděné činnosti - hlídání resp. zachycení pohybu a ukládání výsledku. Velikost denního záznamu je v rozmezí 200-300 MB a délce kolem jedné hodiny, při rychlosti snímání dva snímky za sekundu.

Nyní už zbývá jenom zpřístupnit adresář s výsledným (průběžným) záznamem i ostatním počítačům - např. pomocí Samby. Počítač umístit na nějaké vhodné místo a na bednu raději napsat heslo uživatele root - pro případ, že bychom ho zapomněli. (To je samozřejmě vtip, pozn. red.)

Diskuze (2) Nahoru