V tomto krátkém článku si ukážeme, jak použít oficiální Raspberry Pi kameru (tu na CSI rozhraní) jako bezpečnostní kameru. O zpracování obrazu se bude starat jiný software na vzdáleném serveru. Šikovný čtenář si v konfiguračním souboru nastaví sám, jak se bude kamera na Raspberry Pi chovat, každopádně ten je velice dobře popsaný.
Nejdříve je potřeba kameru zprovoznit v konfigurátoru:
raspi-config Enable Camera -> Restart # Zkouska 1 raspivid -o smazat
Pomocí VLC přehrávače můžeme streamovat video do sítě. Vezmeme výstup z programu raspivid a přeneseme ho do cvlc (VLC v příkazové řádce, bez grafického rozhraní). To vytvoří HTTP server na adrese Raspberry a portu 8080. Adresu Raspberry je možné získat z výstupu příkazu ip a.
# Zkouska 2 apt-get install vlc-nox raspivid -o - -t 0 -w 640 -h 480 -fps 15 --vflip --hflip | cvlc stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8080}' :demux=h264
Software pro kamerový systém Motion
Nejdříve zapneme ovladač V4L pro kameru. Ten nám vytvoří soubor /dev/video0, který reprezentuje aktuální obraz z kamery. Rozhodně nedoporučuji UV4L (ten se používal dříve), protože si pak nerozuměl s programem motion a zobrazoval obraz velmi nekvalitně. Pak nainstalujeme program motion a nastavíme ho.
modprobe bcm2835-v4l2 apt-get install motion
Upravit soubor /etc/motion/motion.conf
daemon on videodevice /dev/video0 width 640 height 480 framerate 15 threshold 150000 output_pictures off ffmpeg_output_movies off text_right stream_maxrate 15
Motion se bude spouštět na pozadí jako démon. Obraz bude čerpat z /dev/video0 (to jsme vytvořili pomocí modprobe) a chceme ho ve formátu 640×480. Vyšší rozlišení způsobovalo padání programu. Tato konfigurace je speciální v tom, že neukládá žádné obrázky ani videa. Proto je threshold nastavený tak vysoko. Obyčejně se v pravém dolním rohu objevuje datum, ale ani to nás nezajímá. Potřebujeme pouze obraz, který bude zpracovávat jiný software. Samozřejmě je možné, aby detekci pohybu zaznamenávalo samotné Raspberry. Pak je ale třeba dát pozor, kam se budou zachycené snímky a videa ukládat. Rozhodně nedoporučuji na SD kartu, ale raději na síťový disk připojený pomocí sshfs. Posledním důležitým parametrem je maximální počet snímků poslaných za vteřinu. Standardně je nastaveno 1, my to zvýšíme na 15.
V konfiguračním souboru je nastavený port 8081, na kterém bude v prohlížeči vidět aktuální obraz z kamery (například na http://192.168.1.247:8081).
Program se spouští příkazem motion.
Nastavení spuštění kamery po restartu:
Po každém startu zavedeme modul pro ovládání kamery (vytvoří se soubor /dev/video0):
echo "bcm2835-v4l2" >> /etc/modules
Upravit soubor /etc/default/motion
start_motion_daemon=yes
mjpeg-streamer
Vynikající program mjpeg-streamer umožňuje jednoduše streamovat do několika výstupů. Dokumentace k jednotlivým výstupním (ale i vstupním) pluginům je uvedena v README.md v odkazu výše.
Instalaci provedeme standardně pomocí make (mně chyběly knihovny cmake a libjpeg-dev, proto je na začátku doinstalujeme).
sudo apt-get install cmake libjpeg-dev make sudo make install export LD_LIBRARY_PATH=. ./mjpg_streamer -o "output_http.so -w ./www" -i "input_raspicam.so --width 1280 --height 720 --framerate 15 -vf"
Plugin pro Raspberry Pi přijímá (asi) většinu vstupních parametrů, takže je možné měnit rozlišení, rotovat obraz apod. Po spuštění příkazu mjpeg_streamer vypíše základní informace na standardní výstup a parametry nastavení kamery. Plugin HTTP spouští webový server na adrese 0.0.0.0:8080 a tam se dozvíte, jak se ke streamu připojit (např. přes VLC http://RASPI_IP_ADDR:8080/?action=stream).
Python Camera
Pomocí Pythonu lze naprogramovat různé chování kamery. http://picamera.readthedocs.io/en/latest/install.html
Linux streamování
Na počítači s monitorem:
nc -l 8000 | vlc --demux h264 -
Na Raspberry PI:
raspivid -w 640 -h 480 -t 0 -o - | nc PC_IP_ADDRESS 8000