Zřizujeme webkameru s OpenWRT

Adam Štrauch 18. 9. 2009

Dnešní díl se nebude točit ani tak kolem OpenWRT jako takového, ale kolem jednoho balíčku, který nám velmi jednoduše umožní nakonfigurovat webovou kameru tak, aby byla přístupná pro naše přátele na síti. V minulém díle jsme si představili RouterStation s USB portem, tak proč toho teď nevyužít.

Postup, který níže uvedu, je s malými obměnami platný pro všechny distribuce. Tahle činnost je ale pro OpenWRT a pro malé desky jako stvořená, takže by byla škoda si o ní neříct.

Nabízí se otázka, proč monitorovat okolí domu nebo třeba i vnitřek. Lidé, včetně mě, k tomu mají svoje důvody. Pro linuxáky by mělo stačit „protože můžu“, ale existují i jiné důvody jako „soused mi krade dříví“, „chci se podívat, jaké je doma počasí“, „moje manželka asi s někým spí“ a samozřejmě velmi populární „kdo mi v noci objel klíčem auto“. Využití je spousta a dostat se k požadované funkčnosti není tak složité.

Jestli se vám myšlenka líbí a chcete si něco podobného vytvořit, tak musíte splňovat následující podmínky:

  • Funkční OpenWRT na HW s USB portem
  • Podporovanou webkameru
  • Program Motion

Pokud jste seriál sledovali dobře a vyzkoušeli si nastavit OpenWRT, měli byste mít na stole vše pro splnění první podmínky. Druhá podmínka se vyplňuje hůře. Já měl se svou MSI StarCam Clip štěstí a stačilo nainstalovat balíčky kmod-video-core a kmod-video-sn9c102. Tím přidáme do OpenWRT podporu pro Video for Linux a ovladač pro web kameru. Pokud máte funkční ovladač, tak zbývá nainstalovat program Motion.

Nyní přejdeme k HW části. Zmíněná kamerka je určená k použití v pohodlí rámu monitoru. Pokud jste na tom stejně jako já a chcete si dát kamerku ven, mělo by stačit ji dát do nějaké průhledné krabičky a zaizolovat silikonem. Tři týdny mi takhle kamerka funguje bez jediného problému a prošla již i několikrát deštěm. Použití venku se přímo nabízí, protože routery často bývají někde pod střechou.

webcam

Motion

Pro detekci pohybu, záznam obrazu a provozování webkamery jako takové se nejvíce hodí multifunkční program Motion. Obsahuje webový server, přes který se dá dívat na aktuální obraz nebo částečně ovlivňovat konfiguraci. Motion také umí jednou za čas uložit jeden snímek a tím zaznamenávat, co se děje v okolí.

Motion nainstalujeme jednoduše z balíčku.

$ opkg install motion 

Nainstaluje se nám trošku okleštěnější Motion, kterému budeme muset upravit konfigurační soubor tak, aby se nesnažil nastavovat, co v něm není zakompilované. Abychom se dostali až k webovému serveru, musíme nastavit několik hodnot v konfiguračním souboru /etc/motion.conf. Jde o tyto hodnoty:

daemon on # daemon mód
process_id_file /var/run/motion/motion.pid # PID
videodevice /dev/video0 # cesta ke kameře
width 640 # šířka videa
height 480 # výška videa
quality 75 # kvalita obrazu
text_right %Y-%m-%d\n%T-%q # text v pravo dole
text_left Lanskroun - Housti # text v levo dole
target_dir /tmp/cam/ # kam ukládat snímky
webcam_port 8081 # port, na kterém má běžet webserver s obrazem kamery
webcam_quality 70 # kvalita obrazu
webcam_motion on # zvýšit framerate při detekování pohybu
webcam_maxrate 3 # maximální počet snímků za sekundu
webcam_localhost off # povolit přístup i z jiných strojů než localhostu
control_port 8080 # konfigurační stránka
control_localhost on # povolit konfiguraci jen z lokálního stroje
control_html_output on # používat HTML

Dále je potřeba odstranit několik hodnot, které sice konfigurační soubor obsahuje, ale patří vlastnostem, které nejsou v Motionu zkompilované. Jde o všechny parametry začínající na ffmpeg, sql a ještě parametry movie_filename a timelapse_filename.

U ostatních parametrů necháváme výchozí hodnoty. Co znamenají, se dá najít v manuálu.

Po nastartování programu Motion se už můžeme podívat na obraz zadáním IP adresy routeru a portu 8081 do prohlížeče, např. 10.0.0.1:8081. Parametrem webcam_macrate nastavíme počet snímků za sekundu a pokud máte rychlou linku, dostanete se na relativně plynulý obraz.

Motion

Motion není náročný a na RouterStation zatěžuje procesor přibližně na 30 %, když se na video někdo dívá při třech snímcích za sekundu, přičemž změna počtu snímků za sekundu se výrazně nepodepisuje na zatížení. Co je trochu více limitující, je velikost flash paměti. Pokud si chcete ukládat každých XX sekund snímky, připravte si externí nebo síťový disk, na kterém to bude možné realizovat.

Bohužel má Motion v OpenWRT malé nedostatky. Nedokáže se samo spustit jako daemon, i když mu to uživatel řekne jak v konfiguračním souboru, tak parametrem. Daemon také nereaguje na některé parametry, např. na snapshot_interval. Tím se nastavuje interval mezi ukládáním snímků na disk. Když do něj nastavíte nějakou hodnotu, bude Motion stejně ukládat snímky, jak se mu zlíbí. Oba problémy by pravděpodobně vyřešila nová verze programu.

První problém můžeme obejít např. přes pythoní skript:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os,sys

if __name__ == "__main__":
        # do the UNIX double-fork magic, see Stevens' "Advanced
        # Programming in the UNIX Environment" for details (ISBN 0201563177)
        try:
                pid = os.fork()
                if pid > 0:
                        # exit first parent
                        sys.exit(0)
        except OSError, e:
                print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
                sys.exit(1)

        # decouple from parent environment
        os.chdir("/")   #don't prevent unmounting....
        os.setsid()
        os.umask(0)

        # do second fork
        try:
                pid = os.fork()
                if pid > 0:
                        # exit from second parent, print eventual PID before
                        #print "Daemon PID %d" % pid
                        open("/var/run/pythondm",'w').write("%d"%pid)
                        sys.exit(0)
        except OSError, e:
                print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
                sys.exit(1)

        os.system("motion -c /etc/motion.conf")

Tomu ještě musíme doplnit init skript /etc/init.d/motion:

widgety

#!/bin/sh /etc/rc.common

start() {
        echo "Starting motion"
        /opt/daemon.py
}

stop() {
        echo "Stopping motion"
        killall motion
}

Skript by se dal nahradit programem daemon, který je napsaný v C, a tak nevyžaduje nainstalovaný Python. Ten ale není v repositáři OpenWRT.

Závěr

Takto provozovaná webkamera jede stabilně a bez náznaku potíží. Rozchodit ji je trochu kostrbaté, ale můžeme doufat, že se to v budoucnu změní.

Odkazy

Našli jste v článku chybu?
Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Podnikatel.cz: Chystá se smršť legislativních novinek

Chystá se smršť legislativních novinek

Vitalia.cz: Nová vakcína proti chřipce se aplikuje nosem

Nová vakcína proti chřipce se aplikuje nosem

Vitalia.cz: Antibakteriální mýdla nepomáhají, spíš škodí

Antibakteriální mýdla nepomáhají, spíš škodí

120na80.cz: Galerie: Čínští policisté testují českou minerálku

Galerie: Čínští policisté testují českou minerálku

Root.cz: Hořící telefon Samsung Note 7 zapálil auto

Hořící telefon Samsung Note 7 zapálil auto

Vitalia.cz: Vodárny varují: Ve vodě z kohoutku jsou bakterie

Vodárny varují: Ve vodě z kohoutku jsou bakterie

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

Podnikatel.cz: Nemá dluhy? Zjistíte to na poště

Nemá dluhy? Zjistíte to na poště

DigiZone.cz: Sat novinky: NASA Ultra HD (4K)

Sat novinky: NASA Ultra HD (4K)

Lupa.cz: Cimrman má hry na YouTube i vlastní doodle

Cimrman má hry na YouTube i vlastní doodle

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

DigiZone.cz: Budoucnost TV vysílání ve Visegrádu

Budoucnost TV vysílání ve Visegrádu

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Lupa.cz: Adblock Plus začal prodávat reklamy

Adblock Plus začal prodávat reklamy

Vitalia.cz: Jsou vegani a vyrábějí nemléko

Jsou vegani a vyrábějí nemléko

Vitalia.cz: Tradiční čínská medicína a rakovina

Tradiční čínská medicína a rakovina