Kamera monitorująca z Raspberry Pi: wymagane elementy
- Raspberry Pi: np. Pi 3 lub Zero (Raspberry Pi Zero ma inne złącze dla przewodu z modułu kamery; potrzebny jest kabel adaptera)
- Zasilacz USB dla kamery
- Karta SD
- Kamera: podłączona do I²C za pomocą taśmy lub kamery USB (idealnie: kamera z dodatkowym światłem podczerwonym do pracy w nocy)
Możliwe zastosowania kamery monitorującej
EKonfiguracja kamery internetowej w sieci domowej
(np. monitorowanie zwierząt domowych)
Monitorowanie drzwi wejściowych z powiadomieniem, aby zapobiec ich otwarciu przez niepożądanych gości
Kamera do monitorowania dzikiej przyrody w ogrodzie lub na posesji
Kamera samochodowa z ciągłym nagrywaniem obrazu jako element odstraszający
Zastosowanie jako alarm w pokoju niemowląt (alternatywa dla klasycznej elektronicznej niani)
Cechy, które powinna posiadać kamera monitorująca
- Automatyczne wykrywanie ruchu poprzez zmianę obrazu
- Automatyczne rejestrowanie i zapisywanie obrazu na karcie SD
- Wysyłanie obrazu przez e-mail w razie potrzeby
- Diody LED na podczerwień do zdjęć nocnych
- Ogniwo słoneczne do zasilania lub podtrzymywania baterii bądź akumulatora
Kamera USB
Kamera USB jest po prostu podłączana do wolnego portu USB, w tym celu nie trzeba nic zmieniać w ustawieniach. W przypadku kamery internetowej USB można użyć komendy w terminalu LX, aby sprawdzić, czy została rozpoznana:
W Raspbianie od pewnego czasu jest także instalowany VLC Player (do znalezienia w mediach rozrywkowych). Jeśli telewizor jest podłączony przez kabel HDMI, można w odtwarzaczu kliknąć “Otwórz medium” i wybrać “Kamerę wideo” jako urządzenie nagrywające. Po naciśnięciu “Odtwarzaj” pojawia się widok z kamery. W menu “Wideo” można zrobić “Zrzut wideo”, który zostanie automatycznie zapisany w folderze pi/Obrazy.
Moduł kamery
Teraz potrzebujemy "prostego" modułu kamery (bez podczerwieni).
Aby włożyć taśmę: najpierw podnieś nieco plastikowy uchwyt (tutaj biały), następnie włóż kabel i wciśnij uchwyt z powrotem.
Pasek stykowy (srebrne styki) musi być skierowany w stronę HDMI.
Oczywiście kabel należy podłączyć przy wyłączonym zasilaniu.
Kamera jest zasadniczo obsługiwana przez Raspberry Pi. Należy ją jednak najpierw aktywować. Możliwe są dwie opcje:
- poprzez "Start" > "Ustawienia" > "Konfiguracja Raspi"
- przez LX-Terminal za pomocą polecenia
sudo raspi-config
i ustawienia kamery na (Enabled)
Należy również skorzystać z okazji, aby bezpośrednio ustawić SSH na "Enabled", co umożliwi zdalny dostęp za pośrednictwem sieci domowej.
ACCESS SSH
Nie musimy wpisywać poleceń na samym Raspberry Pi, więc najpierw ustawiamy zdalny dostęp przez sieć. W ten sposób komendy można wygodnie wprowadzać na komputerze.
Najlepiej użyć do tego programu do obsługi terminali, np. PuTTY. Zazwyczaj można go pobrać bezpłatnie.
Tam należy wprowadzić adres IP Raspberry. Jest on wyświetlany w Terminal LX po wprowadzeniu następującego polecenia:
hostname -I
W związku z tym każdy adres IP będzie nieco inny..
Pozostaw port ustawiony na 22, a następnie kliknij "Open" u dołu.
Jeśli pojawi się komunikat "Nie ma gwarancji, że jest to komputer...", wystarczy zaakceptować go przyciskiem "Tak".
Otworzy się okno wprowadzania danych, a następnym krokiem będzie zalogowanie się.
Pierwsze logowanie odbywa się za pomocą nazwy użytkownika "pi", a następnie z domyślnym hasłem. W przypadku zdalnego dostępu zdecydowanie powinieneś zmienić domyślne hasło "raspberry". Możesz również to zmienić w miejscu:
“Start" > "Ustawienia " > "Konfiguracja Raspi”
Ponownie można użyć dwóch poleceń
ls /dev/video*
i
v4l2-ctl -V
oraz sprawdzić, czy kamera została rozpoznana:
Robienie zdjęć i nagrywanie filmów
W Raspbian, Raspberry Pi ma już wbudowane narzędzia wiersza poleceń takie jak “raspistill” oraz “raspivid”. Za pomocą tych dwóch poleceń można tworzyć zdjęcia i filmy z (LX-Terminal) terminala wejściowego.:
https://www.raspberrypi.org/documentation/usage/camera/raspicam/
Kolejną godną uwagi funkcją jest "time-lapse": Dzięki temu można robić zdjęcie w ustalonych odstępach czasu. Oglądając to w przyspieszeniu, uzyskujemy niesamowite efekty - nie tylko z roślinami, ale wystarczy skierować kamerę na kanapę, aby spojrzeć na siebie z perspektywy poklatkowej.
LX-Terminal
Teraz, jak wspomniano powyżej, chcemy tworzyć zdjęcia i filmy z komputera za pośrednictwem SSH za pomocą poleceń "raspistill" i "raspivid".
Tworzenie obrazów
Za pomocą "raspistill" można tworzyć obrazy, a dzięki opcji "output filename" określa się nazwę pliku. Poniższe polecenie powoduje wykonanie zdjęcia i zapisanie go pod nazwą "picture.jpg":
raspistill -o Bild.jpg
Najpierw otwiera podgląd na około 5 sekund, a następnie tworzy obraz. Jest on zapisywany w katalogu "home/pi".
Jeśli kamera, tak jak u nas, leży po prostu na stole za pomocą płaskiego kabla, obraz jest do góry nogami. Jednak to nie jest problem: obraz można obrócić w pionie za pomocą -vf i w poziomie za pomocą -hf:
raspistill -o Bild1.jpg -hf -vf
Ze względu na to, że i tak nie zobaczymy podglądu przez SSH, dodajemy opcję -n: To wyłącza podgląd
raspistill -o Bild2.jpg -n
Teraz tworzymy folder "Test" i zapiszmy w nim nasz obraz:
mkdir Test
raspistill -o /home/pi/Test/Bild3.jpg
Teraz przejdźmy do funkcji time-lapse: time-lapse (jako opcja -tl) wykonuje zdjęcie co x ms (tj. określa czas między dwoma zdjęciami), a timeout -t określa, jak długo program działa (w ustawieniu domyślnym było to 5 sekund czasu oczekiwania z poprzedniego).
Za pomocą tych dwóch poleceń wykonujemy zdjęcie co 10 sekund przez jedną minutę. Nazwa pliku "Bild_000.jpg" powinna być po prostu kolejno ponumerowana:
raspistill -t 60000 -tl 10000 -o Bild_%03d.jpg
Dzięki większej karcie pamięci SD lub podłączonemu pamięci USB czy zewnętrznemu dyskowi twardemu można stosunkowo szybko zrealizować prosty monitoring.
Jeśli niższa rozdzielczość jest wystarczająca, można zmniejszyć jakość, a tym samym rozmiar pliku za pomocą -q:
raspistill -o Bild5.jpg -q 10
Pozwala to na przechowywanie większej liczby obrazów na nośniku pamięci.
Data i godzina mogą być również zawarte w nazwie pliku za pośrednictwem pliku bash. Można też utworzyć folder z datą zapisania obrazów.
Aby zobaczyć wszystkie opcje, wystarczy wpisać następujące polecenie:
raspistill
Tworzenie filmów wideo
Analogicznie do raspistill, istnieje polecenie "raspivid" do tworzenia filmów. Format to h264, który może być obsługiwany przez odtwarzacz VLC w Raspbianie.
To polecenie tworzy wideo, które domyślnie ma długość 5 sekund:
raspivid -o video.h264
Oczywiście wideo można również obracać za pomocą -vf i -hf, a za sprawą timeout -t można także zmienić długość wideo na np. 10 sekund:
raspivid -vf -hf -o video2.h264 -t 10000
Opcja timed "-td x,y" pozwala ustawić czas trwania nagrywania x i czas trwania pauzy y. Poniższy przykład zakłada nagrywanie przez 10 sekund, przy czym zawsze będzie to nagranie 1-sekundowe z półsekundową pauzą:
raspivid -o video3.h264 -t 10000 -td 1000,500
Za pomocą "segment" -sg można podzielić wideo na poszczególne części. W ten sposób użytkownik nagra film o łącznym czasie trwania -t (tutaj 12 sekund), który składa się z kilku pojedynczych filmów o czasie trwania -sg (tutaj 3 sekundy):
raspivid -t 12000 -sg 3000 -o video%04d.h264
W ten sposób tworzy się wiele pojedynczych filmów. Dzięki odpowiedniej nazwie pliku (np. czas) wyszukiwanie jest znacznie ułatwione.
Istnieje wiele darmowych narzędzi do konwersji "h264" na pliki mp4.
Programowanie w Pythonie
Poniżej znajduje się prosty przykład programowania w Pythonie. Najprostszym sposobem na uruchomienie tych dwóch programów jest skopiowanie ich do "Thonny Python IDE" (program można znaleźć w Raspbian w zakładce Development).
Tworzenie obrazów
Obrazy są tworzone za pomocą polecenia "capture". W tym przykładzie rozdzielczość jest zmniejszona do 800*600, a podgląd jest aktywowany na 2 sekundy:
Poniżej znajduje się opis programu:
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()
Tworzenie filmów wideo
Filmy są tworzone za pomocą poleceń "start_recording" i "stop_recording".
W tym przypadku najpierw uruchamiany jest podgląd, a następnie wideo. Po odczekaniu 10 sekund nagrywanie i podgląd są zatrzymywane.
Poniżej znajduje się ten 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 w Pythonie oferują jednak znacznie więcej możliwości:
Do filmu można wstawić dowolny tekst. Aby to zrobić, wstaw następujące polecenia:
cam.annotate_text_size = 160
cam.annotate_text = 'Hello world!'
W ten sposób można na przykład umieścić na obrazie datę i godzinę.
To idealnie pasuje tutaj - globus i "Hello World".
W ten sposób plik Pythona staje się plikiem startowym: Jeśli zapiszesz pierwszy przykład pod nazwą camera.py (w /home/pi), możesz uruchomić program w terminalu LX za pomocą polecenia:
python3 camera.py
Następnie dodaj następujący "shebang" w pierwszym wierszu programu Python:
#!/usr/bin/env python3
i uczyń plik "wykonywalnym" za pomocą polecenia
sudo chmod +x camera.py
Potem można dodać program Python do pliku autostartu, aby uruchamiał się automatycznie po starcie systemu. Aby to zrobić, edytuj plik rc.local za pomocą polecenia:
sudo nano /etc/rc.local
i wstaw wywołanie programu (ale przed poleceniem "exit 0")
sudo python3 /home/pi/camera.py &
A teraz możesz kontrolować kamerę monitorującą za pomocą prostego timera!
Obraz na żywo w sieci domowej
Teraz chcemy obejrzeć obraz na żywo na komputerze lub telefonie komórkowym:
RTSP
Najpierw przykład z RTSP, "Real-Time Streaming Protocol": Poniższy wiersz (tj. w jednym fragmencie) jest wprowadzany do LX-Terminal na Raspberry (lub prościej wysyłany przez 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 komputerze z systemem Windows 10 uruchom odtwarzacz VLC, naciśnij Ctrl + N, aby otworzyć strumień sieciowy i wprowadź tę linię (oczywiście ponownie dostosuj adres IP do Raspi):
rtsp://192.168.178.59:8000/
To daje nam obraz na żywo w rozdzielczości 320 * 240 przez port 8000. Transmisja nie jest zupełnie na żywo, lecz z niewielkim opóźnieniem. Za pomocą Ctrl+C na Raspberry można ponownie zatrzymać transmisję.
HTTP
Teraz kolejny przykład przez http: aby to zrobić, wprowadź następujące polecenie w terminalu na Raspberry - również w jednym kawałku:
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
W odtwarzaczu VLC Ctrl+N otwiera strumień sieciowy na komputerze z systemem Windows 10:
http://192.168.178.59:8160/
Zadziałało to również tutaj za pośrednictwem telefonu komórkowego z systemem Android (obraz został odwrócony, ponieważ kamera jest odwrócona).
Tutaj kamera z Raspberry rejestruje globus i wyświetla obraz na telewizorze przez HDMI.
W tym samym czasie obraz jest przesyłany strumieniowo do telefonu komórkowego, który znajduje się na dole przed klawiaturą i w którym uruchomiony jest odtwarzacz VLC.
Image – MotionEyeOS
Dostępny jest kompletny obraz dla Raspberry Pi z wieloma funkcjami: MotionEyeOS.
Oznacza to: zainstaluj obraz, wprowadź kilka ustawień - i gotowe..
Ten system może automatycznie rozpocząć nagrywanie, gdy coś poruszy się na obrazie, wysyłać e-maile, ma timer i wiele więcej. Oprogramowanie obsługuje nawet działanie kilku kamer jednocześnie!
Wystarczy tylko wybrać odpowiednią wersję.
Po pobraniu i rozpakowaniu otrzymujemy plik img. Najlepiej zapisać go na karcie SD za pomocą Win32DiskImager.
Teraz jednak brakuje pliku o nazwie “wpa_supplicant.conf”: należy go utworzyć za pomocą edytora.
W tym miejscu należy jednak wprowadzić własny identyfikator SSID (routera) i własne hasło:
country=DE
update_config=1
ctrl_interface=/var/run/wpa_supplicant
network={
scan_ssid=1
ssid="FRITZ!Box 7590 HY"
psk="passwort"
}
Plik jest następnie kopiowany na kartę SD. Potem należy włożyć kartę SD do Raspberry jak poprzednio i uruchomić. Po krótkim czasie na telewizorze pojawi się "login:"
Następnie można uruchomić przeglądarkę na komputerze i wprowadzić adres IP, w tym przypadku 192.168.178.59 (dres IP jest wyświetlany kilka linii dalej na ekranie telewizora).
Najpierw należy się zalogować. W lewym górnym rogu zobaczysz dwie opcje: "settings“ i „switch user". Kliknij prawą z nich i zaloguj się za pomocą:
Username: admin
Hasło: (nie wpisuj tu niczego)
Jako administrator, znacznie więcej ustawień jest dostępnych po lewej stronie w “settings”.
W sekcji "General Settings" można wybrać strefę czasową Europa/Warsaw, a w sekcji "Video Device" można ustawić nieco wyższą rozdzielczość wideo, "Frame Rate" na 10 i "Video Rotation" na 180° - oprogramowanie również to potrafi.
W sekcji "Video Streaming" znajdują się "Useful URLs", takie jak adres URL podglądu na żywo. Można go zapisać jako link w przeglądarce na telefonie komórkowym, aby mieć do niego szybki dostęp w dowolnym momencie. Tutaj adres wygląda następująco:
http://192.168.178.59/picture/1/frame
W sekcji "Motion Detection" wartość "Frame Change Threshold" została ustawiona na 5%, aby nie nagrywać natychmiast, jeśli tylko jeden liść poruszy się na wietrze..
“Motion Gap” został ustawiony na 10 sekund, co oznacza, że jeśli przez 10 sekund nie zostanie wykryty żaden ruch, nagrywanie zostanie zatrzymane. Jeśli wkrótce potem zostanie wykryty nowy ruch, zostanie po prostu utworzony nowy plik.
Detekcja ruchu jest już domyślnie włączona, co oznacza, że nagrywa już pilnie: Jeśli klikniesz "open movie browser" w prawym górnym rogu obrazu na żywo, możesz już zobaczyć kilka filmów nagranych przez oprogramowanie. Można je pobrać bezpośrednio jako pliki MP4.
Dobra rzecz: oprogramowanie działa również z większością kamer USB, a jednocześnie z modułem kamery (ale wymaga to silnego zasilania).
W prawym górnym rogu wyświetlane są jednocześnie obie kamery.
Nocne ujęcia
W dzień wszystko wygląda dobrze, ale w nocy niestety nic nie widać.
Z tego powodu właśnie powstał test kamery IR do zdjęć nocnych.
Najpierw trzeba zamontować dwa czujniki podczerwieni. Jak to zrobić? Po krótkim pomiarze DMM widać, że styki są połączone krzyżowo. Oznacza to, że gdy oba czujniki IR są skierowane do przodu, zawsze są prawidłowo połączone.
Tak wygląda globus w nocy - w całkowitej zupełnej ciemności w pomieszczeniu.
Wystarcza to do ujęć w pomieszczeniach, np. dziecka w pokoju podczas snu.
Jednak w przypadku nocnych ujęć na zewnątrz, ten wariant nie jest już odpowiedni. Jeśli chcesz nagrywać zwierzęta w ogrodzie, potrzebujesz naprawdę mocnego reflektora podczerwieni.