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).
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.
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.)