Rasbpberry Pi 3B+, Pi Camera, USB GPS/Glonass - Lepší vyzkoušet než studovat

Your Name
Přejít na obsah

Rasbpberry Pi 3B+, Pi Camera, USB GPS/Glonass

Archiv > Raspberry 3 B+
PiCamera a video
ModelV2
Senzor8 Mpx Sony IMX219 CCD / bez IR filtru
Dokumentace
V balení kamery najdeme samotnou kameru, plochý kabel (který je ke kameře již připojen) s délkou přibližně 15 cm. Delší kabel (až 100 cm) lze dokoupit. Než kameru zapojíme, musíme ji v nastavení Raspi povolit. Návod zde.

Pak můžeme kameru připojit k boardu. Při uvolňování lišty konektoru je třeba dbát na správnou pozici (kamera "hledí" k LAN konektoru) a je nutno postupovat opatrně, aby se lišta neulomila.
Lištu uvolníme tak, že nehty "podebereme"horní část lišty a jemně povytáhneme o cca 3 mm. Plochý kabel kamerky zasuneme nadoraz do konektoru a pomocí horní lišty tím, že ji zasuneme zpět dolů, kabel zaaretujeme.
Na netu lze zakoupit i delší kabely, až do jednoho metru délky.
Po připojení napájecího napětí a nabootování systému můžeme zkusit funkci kamery. Kamera se spouští buď příkazovou řádkou v terminálu anebo pomocí skriptu.
Pokud máme k Raspi připojený monitor, můžeme zkusit zadat v příkazové řádce následují příkaz

raspistill -o cam.jpg

Na monitoru se nám na pár sekund objeví obraz, který snímá PiCamera a do adresáře se uloží obrázek s názvem "cam.jpg".

Nejsem s terminálem kamarád a proto pro odladění kamerky používám pythonovské skripty, které sbírám na netu a pak si je upravuji. Ty pak "natáhnu" do programu "Geany", který je součástí programového vybavení raspbianu (systému Raspi). Z tohoto programu pak skripty spouštím.
Jednoduchý skript, který spustí pětisekundový náhled obrázku na monitoru a současně pořídí fotku do adresáře"moje_fotky" (který musíme předtím vytvořit) a název obrázku opatří aktualním datem pořízení a vypne se.
from picamera import PiCamera
from time import sleep
date = datetime.datetime.now().strftime("%m_%d_%Y_%H_%M_%S")
camera = PiCamera()

camera.start_preview()
sleep(5)
camera.capture("/home/pi/moje_fotky/"+ date + ".jpg")
camera.stop_preview()

Jiný skript zase pořídí po sobě jdoucí (5ks) 30 sek. videoklipy, očísluje je v řadě a uloží na externí disk (který se jmenuje "muj_USB_disk"). Klipy jsou s rozlišením 1208 x 720 bodů, framerate je 30 snímků/sec. Obraz vidíme na monitoru. Videoklipy jsou uloženy se jmény 1.h264, 2.h264, 3.h264 ...
from picamera import PiCamera
from time import sleep

camera = PiCamera()

camera.resolution = (1280, 720)
camera.framerate = 30

camera.start_preview()
camera.start_recording('/media/pi/muj_USB_disk/1.h264')
camera.wait_recording(30)
for i in range(2, 5):
   camera.split_recording('%d.h264' % i)
   camera.wait_recording(30)
camera.stop_recording()
camera.stop_preview()
K přehrání videí použijeme nejlépe VideoLAN nebo Media Player Classic, který je součástí K-Lite Codec Pack.

Formát *.h264 je poněkud "exotický" a pokud videoklipy budeme chtít dále zpracovávat v jiných (video)programech, budeme je muset překonvertovat do formátu (nejlépe) *.mp4. Ne každý videokonverter to dokáže. Zkoušel jsem jich několik, mnoho si jich na těchto klipech vylámalo bity a bajty. Jedním ze spolehlivých konvertorů je MediaConverter od fy iSkysoft.

Po několika testech jsem nakonec začal používat MP4Box. Koneckonců je i na stránkách Raspberry přímo doporučován. Existuje verze jak pro příkazovou řádku, tak i v grafickém rozhraní.


Po několika pokusech s kamerkou jsem začal váhat, jaké rozlišení s ohledem na kvalitu a objem dat zvolit. Zarazilo mne totiž, že video s rozlišením 1920 x 1080 má menší obrazový úhel (zobrazuje menší plochu z motivu), než například rozlišení 1280 x 720 viz obrázek níže a článek k tomu je zde.

Nakonec se mi jako nejvýhodnější jeví rozlišení 1640 x 922 bodů.
Zdroj: https://picamera.readthedocs.io/en/release-1.7/fov.html


Nahrávání videa jsem si nakonec rozmyslel. A to hned ze tří důvodů. Průběžný záznam videa totiž (překvapivě ;o)) potřebuje mnoho místa. Tak například pětiminutový záznam v rozlišení "camera.resolution = (1640, 922) a camera.framerate = 30" zabírá až 600 MB prostoru na flešce. To je cca 7GB/hod. Ten druhý důvod byl zdlouhavý přesun souborů z flešky na disk a ten třetí byla konverze h264 do mp4. Ještě zdlouhavější.

Nakonec jsem zvolil jakýsi způsob timelapse. PiCamera podporuje timelapse příkazem "raspistill -tl". S jedním nedostatkem. Nelze pořizovat snímky v kratším intervalu než 60 sec. To díky crontabu (návod zde).

Na webu jsem však našel řešení pomocí bash scriptu. Princip je jednoduchý. Pro vlastní snímání obrázku jsem si bytvořil obyčejny python skript a ten spouštím bash skriptem každých 15 sec.
Pokud cronem nebo plánovačem úloh necháme bash skript spustit při každém restartu, bude kamerka během provozu Raspi snímat obrázky v daném rozlišení.

Python skript "fotos.py"

from picamera import PiCamera
from time import sleep
import datetime
date = datetime.datetime.now().strftime("%d_%m_%Y_%H_%M_%S")
camera = PiCamera()
camera.resolution = (1640, 922)
# camera.start_preview() //vypnul jsem
# sleep(5) // vypnul jsem
camera.capture("/media/pi/moje_USB/" + date + ".jpg")
# camera.stop_preview() //vypnul jsem

Bash skript "fastcron.sh"

#!/bin/bash
#This script run every 15 seconds
while (sleep 15 && python /home/pi/fotos.py) &
do
 wait $!
done

Oba skripty ("fotos.py" a "fastcron.sh") uložíme v adresáři"home/pi" a v plánovači úloh nebo cronu necháme spustit bash skript "fastcron.sh" při každém restartu RasPi.
Návrat na obsah