Sledovací kamera s Raspberry Pi » Živý obraz jako RTSP stream

Autor: Conrad tým, 16. srpen 2023

V našem rádci k Raspberry Pi najdete všeobecné informace o tomto malém jednodeskovém počítači. Získáte přehled od sestavení a instalace až po různé varianty Raspberry Pi.



Sledovací kamera s počítačem Raspberry Pi: Potřebný materiál

  • Raspberry Pi: např. Pi 3 nebo Zero (Raspberry Pi Zero má jinou přípojku místo plochého páskového kabelu kamerového modulu; zde je zapotřebí adaptérový kabel)
  • USB síťový adaptér pro napájení
  • SD karta
  • Kamera: připojená přes plochý páskový kabel k I²C nebo USB kamera (ideálně kamera s infračerveným přisvícením pro noční provoz)


Možnosti použití sledovací kamery

Zřízení webové kamery v domácí síti
(např. pro sledování domácích zvířat)

Monitorování domovních dveří s oznamováním, aby se dveře neotevřely nezvaným hostům

Využití jako fotopast pro monitorování vlastní zahrady, resp. vlastního pozemku

Palubní kamera se záznamem v nekonečné smyčce pro auto

Použití ke sledování miminek (jako alternativa ke klasické chůvičce)



Funkce, které by sledovací kamera měla mít

  • Automatická detekce pohybu na základě změny obrazu
  • Automatický záznam obrazu a jeho ukládání na SD kartu
  • Příp. odeslání obrazu e-mailem
  • Infračervené LED diody pro noční snímky
  • Solární článek pro napájení nebo pro dobíjení baterie, resp. akumulátoru


USB kamera

USB kamera se jednoduše zapojí do volného USB portu. V nastaveních není potřeba nic měnit. V případě USB webové kamery lze tímto příkazem v terminálu LX zkontrolovat, zda byla kamera rozpoznána:

 

Příkaz „lsusb“ zobrazí všechna USB zařízení

        lsusb

Tento příkaz zobrazí všechna připojená videozařízení/kamery:

        ls/dev/video*

a tento příkaz zobrazí vlastnosti kamery:

        v4l2-ctl -V        


Takto lze zkontrolovat, zda byla kamera správně rozpoznána a zda je připravená k použití.

Raspbian má už nějaký čas nainstalovaný také přehrávač VLC Player (lze ho najít mezi multimédii). Když je televizor připojený přes HDMI kabel, lze v přehrávači kliknout na „Otevřít médium“ a u záznamového zařízení zvolit „Videokameru“. Jakmile stisknete „Přehrávání“, objeví se obraz kamery. V menu „Video“ lze vytvořit snímek obrazovky, který se pak automaticky uloží do složky pi/Obrázky.



Kamerový modul

Nyní potřebujeme nějaký „jednoduchý“ kamerový modul (bez IR).

Zapojení plochého páskového kabelu: nejprve mírně nadzvedneme plastový držák (zde bílý), pak zavedeme kabel a pak držák znovu vtlačíme dovnitř.

Kontaktní proužek (stříbrné kontakty) musí ukazovat k HDMI.

Zapojení se samozřejmě provádí ve stavu bez napětí.


Raspberry Pi kameru v zásadě podporuje. Tu je ovšem potřeba nejprve aktivovat. K tomu lze využít dvě možnosti:
 

  • přes "Start" > "Nastavení" > "Raspi Konfig"

  • přes terminál LX příkazem
          sudo raspi-config
    a tam nastavit kameru na "Aktivováno" (Enabled)


Při této příležitosti je třeba také SSH nastavit přímo na "Enabled", a tím umožnit dálkový přístup přes domácí síť. 



Přístup k SSH

Abychom nemuseli příkazy pokaždé zadávat do samotného Raspberry Pi, zřídíme si nejprve dálkový přístup přes síť. Pak můžeme příkazy zadávat pohodlně přes počítač. 

K tomuto účelu se v ideálním případě používá emulátor terminálu, např. PuTTY. Ten je obvykle k dispozici ke stažení zdarma.

Do něho zadáme IP adresu počítače Raspberry Pi. Ta se v terminálu LX zobrazí po zadání příkazu:

        hostname -I

Každá IP adresa bude pochopitelně vypadat trochu jinak.

Port ponecháme na 22, následně klikneme dole na "Open".


Pokud se objeví hlášení „Není zaručeno, zda se jedná o počítač“, jednoduše je potvrdíme stisknutím „Ano“.

Otevře se zadávací okno, poté následuje přihlášení.

Nejprve to funguje s přihlašovacím jménem „pi“ a poté se standardním heslem. V případě dálkového přístupu byste měli standardní heslo „raspberry“ v každém případě změnit. To lze změnit zde:

        „Start" > "Nastavení" > "Raspi Konfig“

Také zde lze znovu zadat oba příkazy

        ls/dev/video*

a

  v4l2-ctl -V

a na výstupu zkontrolovat, zda byla kamera rozpoznána:



Záznam snímků a videí

V případě Raspbianu má Raspberry Pi příkazy „raspistill“ a „raspivid“ již integrované jako tzv. „command line tools“. S těmito příkazy lze ze zadávacího terminálu LX vytvářet obrázky a videa:

https://www.raspberrypi.org/documentation/usage/camera/raspicam/

Další funkce, která stojí za zmínku, se nazývá „time-lapse“. S její pomocí lze v pevných časových intervalech pořizovat snímky. Pokud si je pak zrychleně prohlížíme, mohou vznikat překrásné detaily – nejen u rostlin, můžeme tak pozorovat změny v čase i sami na sobě.



Terminál LX

Jak bylo zmíněno výše, budeme nyní z počítače přes SSH pomocí příkazů „raspistill“ a „raspivid“ vytvářet fotografie a videa.

Fotografie

Příkazem „raspistill“ lze vytvářet fotografie a příkazem „output filename“ lze určit název souboru. Následujícím příkazem tedy pořídíme snímek, který uložíme pod názvem „Bild.jpg“.

  raspistill -o Bild.jpg

Přitom se nejprve asi na 5 sekund otevře náhled a pak se vytvoří obrázek. Ten posléze najdeme v adresáři „home/pi“.

Pokud je kamera, stejně jako zde, připojená plochým páskovým kabelem a jednoduše leží na stole, pak je obraz vzhůru nohama. To není problém, obraz lze zadáním -vf otočit vertikálně a zadáním -hf horizontálně:

  raspistill -o Bild1.jpg -hf -vf

Protože bychom přes SSH tak jako tak neviděli náhled, připojíme možnost -n: Tím se náhled vypne.

  raspistill -o Bild2.jpg -n

Nyní vytvoříme novou složku „Test“ a obrázek uložíme do této složky:

  mkdir Test

  raspistill -o /home/pi/Test/Bild3.jpg

 

Nyní se vrátíme k funkci time-lapse: time-lapse (jako možnost -tl) vytvoří jednou za x ms jeden snímek (takže nastaví dobu mezi dvěma snímky) a timeout -t stanoví, jak dlouho má program běžet (ve výchozím nastavení to byla čekací doba 5 sekund).

Pomocí těchto dvou příkazů necháme po dobu jedné minuty pořídit každých 10 sekund jeden snímek. Název souboru „Bild_000.jpg“ je přitom průběžně číslován:

  raspistill -t 60000 -tl 10000 -o Bild_%03d.jpg

Pomocí větší SD karty nebo připojeného USB paměťového zařízení, resp. externího pevného disku tak lze relativně rychle provést monitorování.

Pokud nám postačí nízké rozlišení, můžeme zadáním -q snížit kvalitu, a tím i velikost souboru:

  raspistill -o Bild5.jpg -q 10


Díky tomu lze na paměťové médium uložit více obrázků.

Pomocí souboru bash je možné vložit do názvu souboru také datum a čas. Nebo si můžeme pokaždé vytvořit složku s datem, do které se budou obrázky ukládat.

Chceme-li vidět všechny možnosti, zadáme pouze následující příkaz:

  raspistill


Vytváření videí

Analogicky k příkazu raspistill existuje příkaz „raspivid“ pro vytváření videí. Jedná se o formát formát h264, který přehrávač VLC Player v zařízení Raspbian dokáže přehrávat.

Tento příkaz vytvoří video, které je ve výchozím nastavení opět dlouhé 5 sekund:

  raspivid -o video.h264

Také video lze samozřejmě otáčet zadáním -vf a -hf a prostřednictvím zadání timeout -t lze délku videa změnit například na 10 sekund:

  raspivid -vf -hf -o video2.h264 -t 10000

Zadáním možnosti timed „-td x,y“ lze nastavit dobu snímání x a dobu pauzy y. V našem příkladu nahráváme 10 sekund, a to vždy 1 sekundu s následující pauzou trvající půl sekundy:

  raspivid -o video3.h264 -t 10000 -td 1000,500

Příkazem „segment“ -sg lze videa rozdělit na jednotlivé úseky. Je tedy možné natočit video o celkové délce -t (zde 12 sekund), které se skládá jen z jednotlivých videí, z nichž každé má délku -sg (zde 3 sekundy):

  raspivid -t 12000 -sg 3000 -o video%04d.h264

Takto lze vytvořit velké množství jednotlivých videí. Jejich vyhledávání si usnadníme tím, že je vhodně pojmenujeme (např. se zadáním času).

Pro konverzi souborů h264 do formátu mp4 existuje celá řada bezplatných nástrojů.



Programování v jazyce Python

Níže uvádíme ještě po jednom jednoduchém příkladu programování v jazyce Python. Nejjednodušší je zkopírovat oba programy do „Thonny Python IDE“ a spustit je (program najdete u Raspbianu v nabídce Vývoj).

Snímky

Snímky se vytvářejí příkazem „capture“. Rozlišení je v tomto případě redukováno na 800*600 a náhled se aktivuje na 2 sekundy.

Zde je program:

import picamera

from time import sleep

cam = picamera.PiCamera()

try:

  cam.resolution = (800, 600)

  cam.start_preview()

  sleep(2)

  cam.stop_preview()

  cam.capture('/home/pi/test.jpg')

finally:

  cam.close()


Vytváření videí

Videa se vytvářejí příkazem „start_recording“ a „stop_recording“.

Zde se spustí nejprve náhled a pak video. Po čekací době dlouhé 10 sekund se záznam a také náhled ukončí.


Zde je program:

import picamera

from time import sleep

with picamera.PiCamera() as cam:

  cam.start_preview()

  cam.start_recording('/home/pi/film.h264')

  cam.wait_recording(10)

  cam.stop_recording()

  cam.stop_preview()

  cam.close()


Programy v jazyce Python ale nabízejí mnohem více možností:

Je možné zobrazit libovolný text ve videu. K tomu je potřeba přidat tyto řádky:

  cam.annotate_text_size = 160

  cam.annotate_text = 'Hello world!'


Tak lze do videa vložit například datum a čas.

Toto se sem skvěle hodí: globus a nápis „Hello World“.

A takto se soubor v jazyce Python spouští: Jakmile uložíme první příklad pod názvem camera.py (do umístění/home/pi), můžeme v terminálu LX spustit program příkazem:

  python3 camera.py

Pak vložíme do prvního řádku programu Python tento „shebang“:

  #!/usr/bin/env python3

a soubor nastavíme jako spustitelný příkazem:

  sudo chmod +x camera.py

Pak můžeme program Python uložit do souboru pro autostart, aby se po spuštění počítače automaticky spustil. Za tím účelem editujeme soubor rc.local příkazem:

  sudo nano /etc/rc.local

a přidáme vyvolání programu (ale před příkazem „exit 0“)

  sudo python3 /home/pi/camera.py &

A už můžeme sledovací kameru ovládat pomocí jednoduchých spínacích hodin!



Živý obraz v domácí síti

Nyní bychom si živý obraz rádi prohlédli v počítači, resp. v mobilu:

RTSP

Nejprve příklad s RTSP, což je „Real-Time Streaming Protocol“. Následující řádek (tedy celý text) zadáme do terminálu LX Raspberry (nebo ho jednoduše odešleme přes SSH):

  raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/}' :demux=h264

Na počítačích s operačním systémem Windows 10 spustíme přehrávač VLC Player, kombinací kláves Ctrl+N otevřeme síťový stream a zadáme tento řádek (samozřejmě znovu upravíme IP na Raspi):

  rtsp://192.168.178.59:8000/

Takto získáme živý obraz s rozlišením 320*240 přes port 8000. Přenos sice není úplně živý, ale je zpožděný jen maličko. Kombinací kláves Ctrl+C na Raspberry můžeme přenos zase ukončit.


HTTP

Ještě dodáme jeden příklad přes http, v tomto případě zadáme na Raspberry v terminálu – také v jednom kuse – následující:

  raspivid -o - -t 0 -vf -hf -w 800 -h 400 -fps 24 |cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8160}' :demux=h264

A na přehrávači VLC Player na počítači s Windows 10 otevřeme klávesovou zkratkou Ctrl+N síťový stream:

 http://192.168.178.59:8160/

Toto zde fungovalo i přes mobilní telefon s Androidem (obraz je znovu otočený, protože kamera leží jinak).

Zde kamera Raspberry zabírá globus a zobrazuje snímek přes (růžově zbarvené) HDMI na televizoru.

Současně je obraz streamován do mobilního telefonu, který leží dole před klávesnicí a na kterém je spuštěný přehrávač VLC Player.



Aplikace MotionEyeOS

Existuje kompletní aplikace pro Raspberry Pi s megafunkcemi, a sice MotionEyeOS.

To znamená, že nahrajeme aplikaci, provedeme pár nastavení – a je hotovo.

Tato aplikace umí automaticky spustit záznam, když se na obrázku něco pohne, umí odesílat e-maily, má spínací hodiny a mnohé další funkce. Software dokonce podporuje provoz několika kamer současně!

K tomu stačí zvolit jen odpovídající verzi.

Po stažení a rozbalení získáme soubor .img. Ten nahrajeme nejlépe za pomoci Win32DiskImager na SD kartu.

Nyní ale ještě chybí soubor s názvem „wpa_supplicant.conf“: Ten musíme vytvořit v editoru.


Zde ale zadáme vlastní SSID (router) a vlastní heslo:

country=DE

update_config=1

ctrl_interface=/var/run/wpa_supplicant

network={

scan_ssid=1

ssid="FRITZ!Box 7590 HY"

psk="passwort"

}

 

Soubor pak rovněž překopírujeme na SD kartu. Pak SD kartu běžným způsobem zapojíme do Raspberry a spustíme. Po krátkém čase se na televizoru objeví „login:“

Pak už můžeme na počítači otevřít prohlížeč a zadat IP adresu, zde tedy 192.168.178.59 (IP adresa se zobrazuje o několik řádků dále nahoře na televizoru).

Nejprve je potřeba se přihlásit. Nahoře vlevo vidíme dvě nastavení: „settings“ a „switch user“. Klikneme na to vpravo a přihlásíme se s následujícími údaji:

Uživatelské jméno: admin

Heslo: (necháme prázdné)

Pro uživatele „admin“ je totiž vlevo u nastavení „settings“ uvolněných mnohem více nastavení.

Pod bodem „General Settings“ nastavíme časové pásmo na Evropu/Berlín a pod bodem „Video Device“ můžeme rozlišení videa „Video Resolution“ trochu zvýšit, „Frame Rate“ nastavit na 10 a „Video Rotation“ na 180° – i toto všechno software dokáže.

Pod bodem „Video Streaming“ najdeme „Useful URLs“, jako například internetovou adresu pro živý náhled. Tu si můžeme třeba uložit jako odkaz v prohlížeči mobilního telefonu, abychom k ní měli kdykoliv rychlý přístup. Adresa vypadá takto:

        http://192.168.178.59/picture/1/frame

U nastavení „Motion Detection“ byla hodnota „Frame Change Threshold“ zvýšena na 5 %, aby se zařízení hned nespustilo, když se třeba jen pohne list ve větru.

Nastavení „Motion Gap“ bylo sníženo na 10 sekund, to znamená, že pokud po dobu 10 sekund není rozpoznán žádný pohyb, záznam se ukončí. Pokud je krátce poté rozpoznán další pohyb, jednoduše se vytvoří nový soubor.

Funkce Motion Detection je standardně již zapnutá, to znamená, že již pilně nahrává. Jakmile v živém obrazu nahoře vpravo klikneme na „open movie browser“, uvidíme několik videí, která software zaznamenal. Tato si můžeme přímo stáhnout jako soubor MP4.

A co je na tom nejlepší? Software funguje také s většinou USB kamer, a sice současně s kamerovým modulem (pro ten je ale zapotřebí silný síťový adaptér).

Vpravo nahoře se zobrazují obě kamery současně.



Noční nahrávání

Ve dne vypadá všechno pěkně, ale v noci bohužel už nic nevidíme.

Proto nyní následuje test IR kamery pro noční záznamy. 

Nejprve je potřeba namontovat obě IR kamery – ale jak? Když se podíváme blíže, vidíme, že jsou kontakty propojené křížem. To znamená, že když obě IR kamery hledí dopředu, jsou vždycky zapojené správně.

Takto vypadá globus v noci, za úplné tmy v místnosti. 

To postačí pro záznamy v domě, například pro miminko v dětském pokojíčku.

Ovšem pro nahrávání volné přírody v noci tato varianta už nestačí. Chceme-li nahrávat zvířata v zahradě, budeme potřebovat silnější IR reflektor.