Od Turris OS 4.0 není připojení webkamery oficiálně podporováno a byla odebrána možnost jednoduché instalace přes rozhraní Foris.
V tomto návodu je popsán postup instalace a zprovoznění USB webkamer na routeru Turris. Možností využití se nabízí celá řada – od pořizování timelapse fotografií, pozorování domácího terária, sledování počasí až po jednoduchý zabezpečovací systém.
Funkčnost byla otestována na webkamerách Logitech HD Webcam c270 a Creative Live! Cam SYNC HD. Tyto kamery jsou schopné pořizovat snímky a zaznamenávat video v rozlišení až 1280×720 pixelů.
Vyhovovat by měly i další typy webkamer splňující standard UVC (USB Video Class). Obsáhlý přehled kompatibilních modelů lze nalézt např. na http://www.ideasonboard.org/uvc/#devices nebo http://en.wikipedia.org/wiki/List_of_USB_video_class_devices.
Příslušný modul ovladače pro zařízení třídy UVC je již standardně k dispozici v repozitáři distribuce OpenWRT v podobě balíčku. Nainstalujeme jej spuštěním příkazu:
opkg install kmod-video-uvc
Poznámka: Pokud správce balíčků nenalezne balíček s tímto názvem, aktualizujeme nejdříve seznam balíčků příkazem.
opkg update
Po nainstalování zavedeme modul do jádra systému a připojíme webkameru do volného USB portu na zadní straně routeru Turris.
modprobe uvcvideo
Kernel by měl nyní kameru rozpoznat a vytvořit příslušné zařízení v adresáři /dev
. Můžeme se o tom přesvědčit z výpisu posledních několika řádků zprávy jádra příkazem
dmesg | tail [424800.758181] uvcvideo: Found UVC 1.00 device Live! Cam Sync HD VF0770 (041e:4095) [424800.777268] input: Live! Cam Sync HD VF0770 as /devices/soc.0/ffe22000.usb/fsl-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input1 [424800.791581] usbcore: registered new interface driver uvcvideo [424800.797447] USB Video Class driver (1.1.1)
Pokud se v odpovědi zobrazí něco podobného jako na ukázce, byla kamera úspěšně rozpoznána. Jméno uzlu zařízení lze zjistit pomocí:
ls /dev/video*
Pokud k routeru Turris nejsou připojena žádná další zařízení pro zpracování videa, bude se s velkou pravděpodobností jednat o /dev/video0
.
Zde jsou uvedeny tipy na užitečný software, který lze na routeru Turris použít pro práci s webkamerou.
Pořizování jednotlivých obrázků je tím nejzákladnějším při práci s jakoukoliv kamerou. V linuxu existuje k tomuto účelu utilita fswebcam
. V repozitáři OpenWRT opět existuje příslušný balíček, instalace je tedy jednoduchá:
opkg install fswebcam
Aplikace nad získaným snímkem rovněž umí provádět základní operace jako je otočení, převrácení, ořez, převod na stupně šedi apod.
Příklad: Pořízení a uložení obrázku v rozlišení 800×600 do souboru foto1.jpg
ve formátu JPEG s kvalitou 85:
fswebcam -d /dev/video0 -r 800x600 --jpeg 85 --save foto1.jpg
Pomocí softwaru motion je možné na routeru Turris implementovat jednoduchý bezpečnostní systém, který v případě detekce pohybujícího-se objektu před kamerou zaznamená video na paměťové médium a volitelně informuje uživatele o vzniku této události.
Motion je opět možné nainstalovat z OpenWRT repozitáře:
opkg install motion
Tato verze má však jedno omezení – není zkompilována s ffmpeg knihovnou a sama o sobě neumí ukládat video. Lze zaznamenávat pouze sérii obrázků, což je ovšem velice neefektivní z hlediska datové velikosti. Překlad vlastní verze motion
se zabudovanou ffmpeg knihovnou je velice složitý, z důvodu, že aplikace s touto knihovnou komunikuje pomocí zastaralého API, které již v nových verzích ffmpeg není podporováno. Toto omezení lze naštěstí jednoduše obejít instalací standalone verze enkodéru ffmpeg, kterému následně motion předává data ke zpracování pomocí roury.
Nainstalujeme tedy ffmpeg:
opkg install ffmpeg
Aplikaci motion je před prvním použitím nutné správně nastavit. Konfigurace se provádí v souboru /etc/motion.conf
. Možnosti nastavení jsou velice široké, na tomto místě bude uveden pouze přehled nejdůležitějších voleb, které je potřeba změnit oproti výchozímu stavu. Soubor je bohatě komentovaný a funkci většiny pokročilejších konfiguračních voleb z něj lze snadno vyčíst. Ukázkový konfigurační soubor je možné stáhnout zde motion-turris.conf.
daemon (on|off)
– Určuje, zda motion poběží interaktivně v konzoli, nebo na pozadí jako démon. Pro počáteční nastavení vypneme (off), po odladění nastavení volbu povolíme (on). videodevice /dev/video0
– Zde se nastavuje, jaké zařízení bude motion používat (viz Instalace ovladače). Ve většině případů, máme-li k Turris routeru připojenou jenom jednu kameru, pravděpodobně můžeme ponechat výchozí /dev/video0
width 640
a height 480
– Velikost obrazu v pixelech. Toto nastavení závisí na konkrétním modelu kamery, rozumný kompromis je například 640×480. framerate 15
– Snímková frekvence zaznamenávaného videa. Tu je nutné zvolit s ohledem na omezený výkon procesoru v routeru Turris a velikost datového úložiště (viz kapitola Test výkonu). Obvykle volíme hodnoty v rozmezí 5 až 15 snímků za sekundu. Při nižším rozlišení obrazu je možné nastavit vyšší framerate a obráceně. output_pictures (on|off|first|best|center)
– Zapne/vypne ukládání diskrétních obrázků v případě detekce pohybu.off
– vypne ukládání snímků on
– uloží všechny pořízené snímky (nepoužíváme, pokud budeme současně ukládat video)first
– uloží první snímek, na kterém byl detekován pohybující-se objekt best
– uloží snímek, kde bylo detekováno nejvíce pohybucenter
– uloží snímek, kde je pohybující-se objekt co nejvíce uprostřed (doporučeno)quality 85
– Kvalita ukládaných JPEG obrázků od 0 do 100. output_movies off
– Povolí nebo zakáže ukládání videa. Toto nastavení a stejně tak ostatní volby v daném bloku (ffmpeg_bps, ffmpeg_video_codec), má vliv pouze pokud motion používá zabudovanou ffmpeg knihovnu, v opačném případě nezpůsobí vůbec nic. Ponecháme tedy vypnuté.use_extpipe on
:extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size 640x480 -framerate %fps -i pipe:0 -c:v mpeg4 -b:v 1500k -threads 2 -f avi %f.avi
Zapnutí předávání videa rourou a nastavení parametrů ffmpeg enkodéru:
-y | Přepíše případný existující soubor |
-f | Kontejner vstupního video streamu |
-pix_fmt | Barevný formát vstupu |
-video_size | Rozměry vstupního videa. Je nutné nastavit shodně s „width“ a „height“ (zde bohužel neexistují příslušné proměnné)! |
-framerate | Snímková frekvence vstupu. Lze využít obsah proměnné %fps. |
-i | Zdroj vstupních dat |
-c:v | Formát výstupního videa |
-b:v | Datový tok výstupního videa. Nastavíme s ohledem na rozměry obrazu (cca 400k - 2000k) |
-threads | Počet souběžných vláken, ve kterých poběží komprese videa. Ne všechny videoformáty podporují vícevláknovou kompresi. |
-f | Kontejner výstupního videa |
<out> | Název výstupního souboru. Proměnná %f obsahuje jméno souboru včetně přípony a absolutní cesty (formát názvu specifikován v movie_filename, viz dále) |
target_dir
– Důležité nastavení, určuje, kam se budou ukládat pořízená videa a obrázky. Tato data není vhodné ukládat do interní flash paměti routeru, z důvodu omezeného počtu přepisů a především nízké zápisové rychlosti. Je možné použít například USB flash zapojený v druhém USB portu nebo síťové úložiště. picture_filename …
, movie_filename …
– Tyto volby specifikují, v jaké tvaru budou názvy výstupních souborů. Význam jednotlivých proměnných je detailně popsán v komentáři konfiguračního souboru. on_event_start
, on_event_end
. on_picture_save
, on_motion_detected
, on_area_detected
, on_movie_start
, on_movie_end
, on_camera_lost
– Jako argument těchto položek je možné zadat cestu ke skriptu, který bude spuštěn v případě, že nastane nějaká událost (detekce pohybu, uložení videa, ztráta kamery). Tato funkce je velice užitečná pro upozornění uživatele prostřednictvím e-mailu, SMS apod.Příklad: Chceme, aby nás systém při zachycení pohybu neprodleně upozornil e-mailem a zároveň v příloze odeslal snímek z kamery, který způsobil spuštění poplachu. Výše uvedená nastavení by pak vypadala přibližně takto:
output_pictures first on_picture_save python /root/mail.py -t prijemce@server.cz -s "Spusten poplach!" -b "Kamerovy system detekoval pohyb" -a %f
Na odesílání e-mailů s přiloženým obrázkem byl speciálně vytvořen skript v Pythonu mail.py
(odkaz ke stažení: mail.py). Před prvním spuštěním je nutné provést konfiguraci SMTP serveru v jeho hlavičce.
Po nastavení je možné spustit motion příkazem (nečekaně):
motion
a otestovat funkci např. mávnutím ruky před kamerou. V závislosti na nastavení volby 'daemon' bude motion buďto vypisovat stavové informace do konzole nebo pracovat na pozadí.
Jádro procesoru P2020 v routeru Turris není příliš optimální pro kompresi videa, zejména vzhledem k absenci vektorových jednotek altivec
.
V následující tabulce jsou uvedena testovaná nastavení. Celkové vytížení procesoru se pohybovalo kolem 45% (enkodér mpeg4 v knihovně ffmpeg zřejmě nepodporuje multithread), zároveň ale ještě bylo video ukládáno bez framedropu.
Video bylo zapisováno na NFS síťové úložiště, připojené přes ethernet (tj. kabelem).
Rozlišení | Formát | Framerate |
---|---|---|
640×480 | mpeg4, 1500kb/s | 15 snímků/s |
800×600 | mpeg4, 1500kb/s | 10 snímků/s |
1280×720 | mpeg4, 2000kb/s | 4 snímky/s |