Uživatelské nástroje

Nástroje pro tento web


Připojení USB webkamery k routeru Turris

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.

Podporovaný hardware

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.

Instalace ovladače

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.

Software

Zde jsou uvedeny tipy na užitečný software, který lze na routeru Turris použít pro práci s webkamerou.

fswebcam – pořizování snímků

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 

motion – detekce pohybu, nahrávání videa

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 pohybu
    • center – 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í.

Test výkonu

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