Motion s Raspberry kamerou

Motion je software pro záznam z kamer, který umí zaznamenávat video i jednotlivé snímky při zjištění pohybu, a současně streamovat téměř živý pohled přes webové rozhraní. Využívá infrastruktury v4l (video for Linux). Pro Raspberry PI a jeho „originální“ kameru dlouho neexistovaly v4l ovladače, pouze řádkové utility raspivid a raspistill. Na internetu naleznete většinou návody, jak rozchodit upravenou verzi motion_mmal. To je naštěstí minulost, už to jde rozchodit „nativně“. Takže začneme nezbytným

sudo apt-get update
sudo apt-get upgrade
sudo rpi-update

(poslední příkaz je aktualizace firmwaru). Pro další předpokládám, že uživatel má zprovozněnou a připojenou kameru, otestovanou například raspistill jako funkční.

Teď se podíváme na zařízení. Zadáme:

pi@raspberrypi ~ $ v4l2-ctl --info

a pokud dostaneme odpověď

Failed to open /dev/video0: No such file or directory

je prozatím všechno v pořádku. Nyní zadáme

sudo modprobe bcm2835-v4l2

a zopakujeme dotaz.Měli bychom dostat výstup podobný následujícímu:

pi@raspberrypi ~ $ v4l2-ctl --info
Failed to open /dev/video0: No such file or directory
pi@raspberrypi ~ $ sudo modprobe bcm2835-v4l2
pi@raspberrypi ~ $ v4l2-ctl --info
Driver Info (not using libv4l2):
 Driver name : bm2835 mmal
 Card type : mmal service 15.1
 Bus info : platform:bcm2835-v4l2
 Driver version: 3.12.25
 Capabilities : 0x85000005
   Video Capture
   Video Overlay
   Read/Write
   Streaming
   Device Capabilities
 Device Caps : 0x05000005
   Video Capture
   Video Overlay
   Read/Write
   Streaming

Takže jsme z ruky nahráli ovladač kamery a máme zařízení /dev/video0. Pokud chceme ovladač nahrát automaticky při restartu, stačí zapsat jeho název, tj. bcm2835-v4l2, na samostatný řádek do souboru /etc/modules. Ten musíme pochopitelně editovat přes sudo, jinak na něj nemáme právo.

Nyní nainstalujeme motion:

sudo apt-get install motion

Nahraje se nám spousta závislých balíčků. Nyní si v oblíbeném editoru otevřeme konfigurační soubor /etc/motion/motion.conf. Ještě si musíme rozmyslet, kam budeme zachycené obrázky, videa atd. ukládat, protože souborový systém by se nám asi rychle zaplnil. Já ukládám na windowsové sdílení, přimountované do /mnt/camera (návod někdy příště). Pro základní otestování změníme pár parametrů.

width 1296
height 1024
framerate 2
pre_capture 2
post_capture 2
gap 60
max_mpeg_time 600

width a height jsou šířka a výška, framerate kolik obrázků za sekundu, pre_ a post_capture je kolik snímků před a po zachyceném pohybu se přidá k záznamu, gap je počet sekund, v jehož rámci se ještě detekce pohybu považuje za jeden „event“, max_mpeg_time je maximální délka jednoho videa. Parametry jsou popsané v komentářích, je možno nahrávat video během pohybu, jednotlivé snímky všechny nebo jeden během pohybu, a pomaloběžné video a snímky s daným intervalem pořád, bez ohledu na to, zda je detekován pohyb. Pokud nám nevyhovuje defaultní formát videa, což je SWF, můžeme se přepnout na microsoftí AVI:

ffmpeg_video_codec msmpeg4

Kam se mají věci ukládat, je zde:

target_dir /mnt/camera

a pokud nemá být živé video přístupné jen z Raspberry samého, nastavíme

webcam_localhost off

Teď už můžeme pustit motion (sudo motion) a připojit se k našemu raspberry prohlížečem na portu 8081 (pokud jsme port nezměnili v konfiguračním souboru). Až si dostatečně vyhrajeme s parametry (přerušení běžícího motion přes Ctrl-C), je možno pustit motion jako démona (to se udělá editací dvou souborů, /etc/default/motion, zde se změní start_motion_daemon=no
na yes, a pak v samotném /etc/motion/motion.conf  je hned ze začátku souboru daemon off, tak to přepíšeme na on).

Budu rád, dáte-li mi vědět, jaké jste udělali zkušenosti s framerate a rozlišením. Já jsem se k běžícímu Raspberry s motion připojil ještě druhým SSH terminálem a pustil jsem si top, a zdá se mi, že vytížení procesoru při rozlišení a frameratu, které jsem uvedl v příkladu, je kolem 1%, čili relativně nízké. Uvědomme si, že chudák Raspberry musí přebírat data z kamery, počítat rozdíly mezi snímky, pak počítat komprese snímků a videa a ještě to ukládat do souborového systému, takže práce dost pro hračku za pár dolarů.

13 komentáře k “Motion s Raspberry kamerou

  1. zdravim, postupoval sem podle navodu a krome toho, ze ukladam obrazky primo na kartu, tak mi to funguje tak, ze mam spozdeni asi 25-30 sekund a jeden obr. za 3-5s. Kdyz sem razantne snizil rozliseni kamery, tak je obraz v prohlizeci temer online, ale zas nic nerozeznam. Neslo by nejak nastavit, aby se nic neukladalo, jen sel kontinuelni online obraz, jak sem zvykly z normalni IP kamery? Nebo kde je chyba?

  2. Ale zpoždění čeho? Jsou prakticky 4 výstupy: 3 do souborů – JPG náhled, AVI s pohybem případně timelapse všeho. A pak je online MJPEG na portu 8081. Záznamy samozřejmě mají zpoždění – musí se detekovat pohyb podle předchozích obrázků a pak spočítat a uložit na disk. A video trvá ještě dýl. Ale ten webový MJPEG sice má určité zpoždění, ale neřekl bych že je to tolik. Samozřejmě pokud se vypne detekce pohybu, bude menší zátěž.

    • vystupu na portu 8081. To co mi z toho leze mi prijde jako jpg obrazky se spozdenim 20-30s a cetnosti obrazek za cca 5 s. pokud detekuje pohyb tak jde procesor na plno a vse trva strasne dlouho.

  3. Zdravím, rád bych Raspberry Pi použil jako náhradu DVR rekordéru, protože chci pouze jeden prostor monitorovat jedinou kamerou, nepotřebuji pořizovat 4 kanálový rekordér a to za mnohem vyšší cenu než je Raspberry Pi. Otázky z toho vyplývají 3:
    1) je možné k Raspberry Pi připojit jinou kameru než co se uvádí? Mám vlastní s nočním viděním.
    2) pokud je možné připojit jinou kameru, bude fungovat s programem Motion?
    3) je možné záznam videa ukládat na externí úložiště, např. připojený externí disk a ponechávat tam zpětně záznamy, kde byl detekovuán pohyb do doby, než se disk zaplní?

    • Mám to přesně tak, druhé PI mám s kamerou Logitech přes USB, a video ukládám na Windows 2003 server, share mám mountnutý ve fstab, takže je omažitě po restartu k dispozici. Ukládat na externí USB disk nemám vyzkoušené, je to otázka propustnosti USB (kamera a disk), pro disk by byl patrně potřeba powered USB hub a mazání lze automatizovat přes cron (find … -mtime +14 -delete)

  4. Ahoj, taky by mě zajímal nějaký podrobný návod pro h264 RTSP. Respektive, než začnu experimentovat, zajímalo by mě několik maličkostí, pokud můžu poprosit o odpovědi:

    1) Mám 3 kamery (ze všech dostávám obraz přes RTSP/H264 2xFullHD, 1x720p). Lze je dostat do Rapsberry?
    2) Pokud ano, lze se na ně potom občas podívat přes web (ideálně live přes https) – zkrátka všechny kamery na jednom místě v jednom rozhraní?
    3) Prozatím neuvažuji o nahrávání, ale kdyby někdy ano, nahrávat streamy na připojený HDD nebo Flash?
    4) Byl by někdo ochoten nahodit podrobný návod, případně pomoci s rozchozením nebo dát k dispozici obraz hotového OS (klidně i za nějakou „rozumnou“ úplatu)?

    Moc a moc děkuji za jakékoliv informace.

  5. Tak páni, zkusil jsem to taky dle návodu, ale nic mě nejede. Když tak zde je moje konzole :-)

    pi@RaspBerryPi ~ $ sudo apt-get install motion
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    The following extra packages will be installed:
    ffmpeg libav-tools libavcodec54 libavdevice53 libavfilter2 libavfilter3
    libavformat54 libavresample1 libavutil52 libmysqlclient18 libopencore-amrnb0
    libopencore-amrwb0 libopencv-core2.3 libopencv-core2.4 libopencv-imgproc2.3
    libopencv-imgproc2.4 libopus0 libpq5 libswscale2 libvo-aacenc0
    libvo-amrwbenc0 libx264-130 mysql-common
    Suggested packages:
    frei0r-plugins opus-tools mysql-client postgresql-client
    The following NEW packages will be installed:
    ffmpeg libav-tools libavcodec54 libavdevice53 libavfilter2 libavfilter3
    libavformat54 libavresample1 libavutil52 libmysqlclient18 libopencore-amrnb0
    libopencore-amrwb0 libopencv-core2.3 libopencv-core2.4 libopencv-imgproc2.3
    libopencv-imgproc2.4 libopus0 libpq5 libvo-aacenc0 libvo-amrwbenc0
    libx264-130 motion mysql-common
    The following packages will be upgraded:
    libswscale2
    1 upgraded, 23 newly installed, 0 to remove and 22 not upgraded.
    Need to get 963 kB/14.1 MB of archives.
    After this operation, 39.4 MB of additional disk space will be used.
    Do you want to continue [Y/n]? y
    Err http://mirrordirector.raspbian.org/raspbian/ wheezy/main libavfilter2 armhf 6:0.8.17-2+rpi1+deb7u2
    404 Not Found
    Err http://mirrordirector.raspbian.org/raspbian/ wheezy/main mysql-common all 5.5.53-0+deb7u1
    404 Not Found
    Err http://mirrordirector.raspbian.org/raspbian/ wheezy/main libmysqlclient18 armhf 5.5.53-0+deb7u1
    404 Not Found
    Err http://mirrordirector.raspbian.org/raspbian/ wheezy/main ffmpeg armhf 6:0.8.17-2+rpi1+deb7u2
    404 Not Found
    Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/liba/libav/libavfilter2_0.8.17-2+rpi1+deb7u2_armhf.deb 404 Not Found
    Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/m/mysql-5.5/mysql-common_5.5.53-0+deb7u1_all.deb 404 Not Found
    Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/m/mysql-5.5/libmysqlclient18_5.5.53-0+deb7u1_armhf.deb 404 Not Found
    Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/liba/libav/ffmpeg_0.8.17-2+rpi1+deb7u2_armhf.deb 404 Not Found
    E: Unable to fetch some archives, maybe run apt-get update or try with –fix-missing?
    pi@RaspBerryPi ~ $ ffmpeg_video_codec msmpeg4
    bash: $’ffmpeg_video_codec\302\240msmpeg4′: command not found
    pi@RaspBerryPi ~ $ v4l2-ctl –info
    Driver Info (not using libv4l2):
    Driver name : bm2835 mmal
    Card type : mmal service 16.1
    Bus info : platform:bcm2835-v4l2
    Driver version: 4.1.19
    Capabilities : 0x85200005
    Video Capture
    Video Overlay
    Read/Write
    Streaming
    Device Capabilities
    Device Caps : 0x05200005
    Video Capture
    Video Overlay
    Read/Write
    Streaming
    pi@RaspBerryPi ~ $
    pi@RaspBerryPi ~ $ sudo motion
    sudo: motion: command not found
    pi@RaspBerryPi ~ $ sudo modprobe bcm2835-v4l2
    bash: $ sudo\302\240modprobe\302\240bcm2835-v4l2′: command not found
    pi@RaspBerryPi ~ $

Napsat komentář

Vaše emailová adresa nebude zveřejněna.