Monitoring mieszkania - konfiguracja programu motion

frytek
Wytworny Kaczor
Wytworny Kaczor
Posty: 330
Rejestracja: 06 sty 2006, 00:03
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Monitoring mieszkania - konfiguracja programu motion

Post autor: frytek » 04 sty 2008, 15:49

Jeśli chcesz, aby komputer analizował obraz z kamery i po wykryciu ruchu nagrywał na dysku film albo serię obrazków, to tu się dowiesz, jak to zrobić.

Posiadając nawet tanią kamerkę USB możemy uruchomić monitoring mieszkania. Potrzebny nam będzie program motion.

Program ten będzie wykonywał zrzuty obrazków lub filmów na dysk po wykryciu ruchu na obrazie. Jednocześnie można w nim skonfigurować polecenie zewnętrzne (dowolny skrypt). Przy pomocy takiego polecenia możemy nakazać wysłanie maila lub sms-a z informacją o alarmie albo np. uploadować plik z filmem na inny komputer. Ja stosuję tę trzecią opcję, tzn. wysyłanie filmików na inny serwer przy pomocy protokołu ssh (scp).

Programem motion można zarządzać z interfejsu webowego (jasność obrazu, czułość detekcji itp.). Jest też wsparcie dla kilku modeli kamer ruchomych - można wtedy poruszać nimi poprzez web, ale niestety nie mam takiej kamery, więc nie sprawdzałem tych opcji.

Zakładam, że mamy działającą w systemie kamerę USB. Ja używam Labtec'a (na sterowniku spca5xx) za 35-45 zł, któremu zresztą, w ramach ćwiczeń praktycznych, dokleiłem wklęsłą soczewkę z wizjera od drzwi, rozszerzając kąt widzenia. Oczywiście jakość obrazu uległa pewnemu pogorszeniu (krótko mówiąc, jest nieco nieostry), ale i tak jest fajnie. Obrazek z kamery załączam do wglądu. Oczywiście lepsza kamera z szerokim kątem widzenia jest jak najbardziej wskazana.

Instalacja programu motion wymaga wydania polecenia

Kod: Zaznacz cały

 sudo apt-get install motion 
Jeśli będziemy chcieli zapisywać filmiki z ruchem, a nie tylko obrazki jpg
musimy tez mieć bibliotekę kodeków video:

Kod: Zaznacz cały

 sudo apt-get install ffmpeg 
Program korzysta z pliku konfiguracyjnego
/etc/motion/motion.conf
Plik ten zawiera domyślne ustawienia. Poniżej podaję ustawienia własne, które trochę się różnią od domyślnych, bo dostosowywałem je do własnych potrzeb.

Najpierw dwie uwagi praktyczne. Program, po standardowym uruchomieniu, przechodzi od razu w tryb demona. Uniemożliwia to prawidłową diagnostykę. Dlatego w momencie testowania konfiguracji, najlepiej odpalać go z opcja -n

Kod: Zaznacz cały

 motion -n 
W ten sposób program pozostanie na pierwszym planie wyświetlając ewentualne komunikaty błędów i łatwo go wyłączyć klawiszami Ctrl+c aby spróbować od nowa.

Po zakończeniu konfiguracji, uruchamianie programu możemy wpisać do pliku rc.local, aby startował automatycznie po uruchomieniu komputera.

Myślę, że najprostszym sposobem poprowadzenia za rączkę w konfiguracji jest wklejenie tu mojego pliku konfiguracyjnego z komentarzem.

Oczywiście, opcja "off" oznacza wyłączenie danej funkcji, a "on" - włączenie.
============
Tryb pracy programu
daemon on
#włączenie tej opcji sprawia, że program
#sam przechodzi do pracy w tle
#jeśli nie jest uruchamiany z opcją -n

low_cpu 0
#oszczędzaj procesor

quiet on
#cisza po wykryciu ruchu - wyłącza alarm dźwiękowy

Parametry definiujące co jest zapisywane po wykryciu ruchu
output_normal off
#zrzuca jpg. mam ustawione na off, bo zrzucam filmy, a nie obrazki.

ffmpeg_cap_new on
#zrzuca film po wykryciu ruchu

output_motion off
#włączenie tej opcji zrzuca w obrazkach tylko ślady ruchu
#a nie cały obrazek

ffmpeg_cap_motion off
#włączenie tej opcji zrzuca do filmu tylko ślady ruchu
#a nie całą klatkę filmu


Parametry obrazu
auto_brightness off
#automatyczna jasność. z moją kamerą akurat słabo działa.

brightness 200 # 0 = disabled (valid range 0-255)
#ręczna jasność. można ją wypróbowywać na żywo
#zmieniając z panelu webowego a potem zapisać tutaj

contrast 50
#kontrast, równiez dobrany doświadczalnie

saturation 200
#nasycenie kolorów, jak wyżej

despeckle EedDl
#usuwanie szumów z obrazu. poprawia jakość.

noise_tune on
#automatyczna detekcja poziomu szumu w obrazie
#chodzi o to, żeby szum nie był odczytywany jako ruch.

quality 70
#jakość jpg

height 240
#wysokość klatki w pikselach

width 320
#szerokość klatki w pikselach

text_double off
#powiększ litery na klatce filmu.
#chodzi o napis z datą i godziną

Dostęp do obrazu i sterowania z sieci
control_port 9193
#port, na którym zarządzamy kamerą.
#dobrze jest odciąć ten port na firewallu
#jeśli nie chcemy dostępu z internetu
#do panelu zarządzania

webcam_port 9192 # 0 = disabled
#na jakim porcie oglądać obraz w firefoksie

webcam_localhost off
#czy kamera (strumień obrazu) ma być dostępna
#tylko z lokalnego komputera

webcam_maxrate 2
#ilość klatek w webowym strumieniu video.
#wpływa na obciążenie łącza oraz procesora

webcam_quality 90
#jakość obrazu w strumieniu video

Parametry filmików
ffmpeg_video_codec msmpeg4
#opcja kodeka dla filmów.
#dokumentacja ffmpeg podaje, jakimi kodekami
#dysponujemy.

framerate 2
#ilość klatek, która wpływa na jakość,
#ale i na objętość filmu

gap 60
#przerwa pomiędzy kolejnymi zrzutami

minimum_gap 0
#minimalny odstęp między zrzutami

minimum_motion_frames 1
#minimalna ilość klatek w zrzucie

max_mpeg_time 600
#maksymalna długość filmu

Nazwy zrzucanych plików
jpeg_filename %Y-%m-%d-%H-%M-%S-%v-%q
#nazwa pliku obrazka wygenerowanego z detekcji ruchu

snapshot_filename %Y-%m-%d-%H-%M-%S-%v-%q-snapshot
#nazwa pliku obrazka zapisanego ręcznie (np. z interfejsu web)

ffmpeg_filename %Y-%m-%d-%H-%M-%S-%v-%q
#nazwa filmiku
#wszystkie powyższe nazwy składają się z daty, godziny itd.



Parametry detekcji ruchu
night_compensate off
#czy czułość na ruch po ciemku ma być
#inna dla obrazu nocnego

threshold_tune off
#automatyczna regulacja poziomu alarmu

lightswitch 0
#nie reaguj na nagłe zapalenie światła w pomieszczeniu

post_capture 25
#ile klatek nagrywać po zaniku ruchu

pre_capture 3
#ile klatek dokleić do momentu sprzed wykrycia ruchu
#ten parametr powoduje większą płynność filmu

Katalogi i urządzenie video
target_dir /home/uzytkownik/katalog
#gdzie zapisywać obrazki. ustaw użytkownika i katalog.

videodevice /dev/video0
#urządzenie video, pod którym jest kamera

Polecenia wykonywane po dokonaniu zrzutu
on_movie_end scp -p %f 192.168.0.2:%f
#polecenie wykonywane po wykryciu ruchu
#tutaj scp kopiuje plik (%f) protokołem ssh
#na komputer 192.168.0.2
#ta opcja wymaga skonfigurowania ssh
#dla logowania z kluczem i bez podawania hasła

on_picture_save scp -p %f 192.168.0.2:%f
#jak wyżej, ale kopiuje obrazek, a nie film


============

Przy parametrach portów podanych jak wyżej, dostęp do panelu sterowania kamery otrzymamy, wpisując w firefoksie adres:

Kod: Zaznacz cały

 http://localhost:9193 
Natomiast obraz z kamery, wpisując:

Kod: Zaznacz cały

 http://localhost:9192 
Oczywiście obraz możemy też oglądać w Firefoksie spod Windows, ale już nie spod Internet Explorera. Co ma może i swoje plusy.

Jeśli chcesz skorzystać z podanych powyżej parametrów, wklej je do swojego pliku konfiguracyjnego, ale nie zapomnij usunąć wytłuszczonych tytułów, oraz zmienić katalogu do zapisu obrazków/filmików (katalog musi istnieć i mieć prawa do zapisu dla użytkownika, z którego startuje motion). Wybierz też właściwe urządzenie /dev/video*.

Kasowanie zdjęć lub plików z archiwum po zadanym czasie
Katalog, w którym zapisywane są pliki zrzucane z kamery będzie się niepostrzeżenie rozrastał. Aby zachować w nim porządek, możemy raz na dobę wywoływać z crona skrypt, który będzie, przykładowo, czyścił pliki starsze niż 90 dni:

Kod: Zaznacz cały

#!/bin/bash
# kasujemy pliki z kamery po N dniach od ich utworzenia
/usr/bin/find /home/ruut/kamera -type f -name '*avi' -mtime +90 -exec rm {} \;
Załączniki
monitoring1.jpg
ODPOWIEDZ

Wróć do „Software-Multimedia”