Käytetty laitteisto
- Raspberry Pi 3 Model B
- Camera Module 1080p 720p Mini Camera 5MP: https://www.aliexpress.com/item/Free-Shipping-5MP-New-Raspberry-pi-2-Camera-Module-Board-REV-1-3-5MP-Webcam-Video/32522482332.html?spm=a2g0s.9042311.0.0.10ad4c4da7uPwi
- Shot:1/4 5M
- Aperture:2.9
- Focal length:3.29
- FOV: 65 degree
- Sensor type: OmniVision OV5647 Color CMOS QSXGA (5-megapixel)
- Sensor size: 3.67 x 2.74 mm (1/4″ format)
- Pixel Count: 2592 x 1944
- Pixel Size: 1.4 x 1.4 um
- Lens: f=3.6 mm, f/2.9
- Angle of View: 54 x 41 degrees
- Field of View: 2.0 x 1.33 m at 2 m
- Full-frame SLR lens equivalent: 35 mm
- Fixed Focus: 1 m to infinity
- Video: 1080p at 30 fps with codec H.264 (AVC)
- Up to 90 fps Video at VGA
- Board size: 25 x 24 mm (not including flex cable)
- 16GB micro-SD -kortti
- Micro-USB virtalaturi
- Näyttö HDMI-inputilla, hiiri ja näppäimmistö
Käytetty ohjelmisto
Käyttöjärjestelmä:
Raspbian Stretch (June 2018, kernel 4.14): https://www.raspberrypi.org/downloads/raspbian/
Kameraohjelma:
Motion (version 4.0): https://github.com/Motion-Project/motion & https://motion-project.github.io/motion_guide.html
Kameramodulin asennus
Asensin kameran Raspberryn CSI-kameraporttiin. Sitten testasin, että kamera tunnistuu käyttöjärjestelmässä komennolla:
vcgencmd get_camera
Tulos:
supported=0 detected=0
Raspi ei tunnistanut yhtään kameraa, koska kamerainterfacea ei ole otettu käyttöön. Otin sen käyttöön raspi-configin kautta:
sudo raspi-config
Sieltä navigoin: Interfacing Options > P1 Camera > Yes > Finish
Tuli viesti “The camera interface is enabled”. Kokeilin uudelleen tunnistaa kameraa:
vcgencmd get_camera
Tulos:
supported=1 detected=1
Testasin kameraa picamera-sovelluksella. Se tulee asennettuna uusimman Raspbianin mukana, mutta löytyy paketinhallinnasta nimellä python3-picamera
Tein kotihakemistooni python-tiedoston nimeltä takepicture.py. Sen sisälle kirjoitin seuraavan koodin pätkän:
from picamera import PiCamera from time import sleep # Sleep for atleast 2 seconds so that the sensors adapt to current levels of light. camera = PiCamera() camera.start_preview() sleep(5) camera.capture('raspi-image.jpg') camera.stop_preview()
Sitten ajoin koodin komennolla:
python3 takepicture.py
Ruudulle ilmestyi viideksi sekunniksi esikatseluvideota, ennen kuin kuva otettiin.
EDIT: Toinen nopeampi tapa testata kameran toiminta on raspistill:
raspistill -o raspi-image.jpg
Tuo komento tekee aikalailla saman, mitä ylempänä käytetty Python-koodi. Näyttää esikatselua hetken ja ottaa sitten kuvan.
Videokuvaa voi testata komennolla:
raspivid -o testvideo.h264 -t 10000
Tuo siis ottaa videota 10 sekunnin ajan. Videon tiedostonimi on testvideo ja tiedostopääte .h264 (MPEG-4 ).
VLC pyöritti videota surkeasti, mutta se johtunee puutteellisista ajureista.
Motionin asennus ja konfigurointi
Asensin Motionin paketinhallinnasta komennolla:
sudo apt-get install motion
Sitten navigoin hakemistoon /etc/motion/, jossa tein varmuuskopion motion.conf -tiedostosta, ennen kuin teen muutoksia siihen.
sudo cp motion.conf motion-backup.conf
Muokkasin motion.conf -tiedostoa sudoeditillä. Konfiguraatiossa on monta asetusta, jotka jätin oletuksiksi. Muokkasin kuitenkin seuraavat:
########################################## # Daemon ########################################## # Start in daemon (background) mode and release terminal (default: off) daemon on ########################################## # Capture Device Options ########################################## # Videodevice used for capturing (default /dev/video0) videodevice /dev/video0 # Image width (pixels). Valid range: Camera dependent, default 352 width 640 # Image height (pixels). Valid range: Camera dependent, default 288 height 480 # Maximum number of frames to be captured per second. # Valid range: 2-100. Default:100 (almost no limit). framerate 100 ########################################## # Image File Output ########################################## # The quality (in percent) to be used by the jpeg compression (default: 75) quality 100 ########################################## # Live Stream Server ########################################## # The mini-http server listens to this port for requests (default: 0 = disabled) stream_port 9999 # Quality of the jpeg (in percent) images produced (default: 50) stream_quality 100 # Maximum framerate for stream streams (default: 1) stream_maxrate 30 # Restrict stream connections to localhost only (default: on) stream_localhost off # Set the authentication method (default: 0) # 0 = disabled # 1 = Basic authentication # 2 = MD5 digest (the safer authentication) stream_auth_method 2 # Authentication for the stream. Syntax username:password # Default: not defined (disabled) stream_authentication markus:NotMyRealPassword ########################################## # HTTP Based Control ########################################## # TCP/IP port for the http server to listen on (default: 0 = disabled) webcontrol_port 9090 # Restrict control connections to localhost only (default: on) webcontrol_localhost off # Authentication for the http based control. Syntax username:password # Default: not defined (disabled) webcontrol_authentication markus:NotMyRealPassword
Käynnistin Motionin uudelleen:
sudo service motion restart
Luulin, että tuo riittäisi, mutta ilmeisesti piti vielä muokata tiedostoa /etc/default/motion ja asettaa seuraava rivi:
start_motion_daemon=yes
Sitten käynnistin taas motionin uudelleen:
sudo service motion restart
Ja lopuksi vielä komento:
sudo motion
Tulos:
[0:motion] [NTC] [ALL] conf_load: Processing thread 0 - config file /etc/motion/motion.conf [0:motion] [NTC] [ALL] motion_startup: Motion 4.0 Started [0:motion] [NTC] [ALL] motion_startup: Logging to file (/var/log/motion/motion.log)
Nyt, kun menin selaimella osoitteeseen localhost:9999, aukesi kirjautumisikkuna, jossa syötin conffi-tiedostoon määrittelemäni käyttäjätunnuksen ja salasanan.
Kirjauduttuani sisään, näin harmaata kuvaa.
Katselin motion.log lokitiedostoa, josta havaitsin, että ilmeisesti /dev/video0 laitetta ei löydy.
sudo tail -F /var/log/motion/motion.log
Ajoin terminaaliin komennon:
ls -l /dev/video*
johon sain vastaukseksi:
ls: cannot access '/dev/video*': No such file or directory
Ilmeisesti Raspberrylle tarkoitetut kameramodulit eivät suoraan toimi motionin kanssa, vaan se on pikemminkin tarkoitettu USB-pohjaisia kameroita varten. Löysin korjauksen kuitenkin StackExchangesta: https://raspberrypi.stackexchange.com/questions/10480/raspi-camera-board-and-motion käyttäjän 11chubby11 kommentista:
You can access the camera board on /dev/video0 by running the command:
sudo modprobe bcm2835-v4l2
Otin tuon kamera-ajurin käyttöön komennolla:
sudo modprobe bcm2835-v4l2
Mitään virheilmoitusta ei tullut, ja nyt kun katsoin ls -l /dev/video*, se listasi:
crw-rw----+ 1 root video 81, 0 Oct 1 08:28 /dev/video0
Kameran pitäisi nyt toimia motionin kanssa. Menin selaimella takaisin localhost:9999 osoitteeseen. Kirjautumisen jälkeen, näin livestreamin kameramodulista ongelmitta!
Lisäsin bcm2835-v4l2 -ajurin vielä /etc/modules -tiedostoon, jotta se otetaan käyttöön myös uudelleenkäynnistyksen jälkeen.
sudo nano /etc/modules
Lisäsin tiedoston loppuun rivin:
# For Raspberry Pi camera module bcm2835-v4l2
Hetken päästä tuli ongelma, sillä huomasin, että Raspin muistikortti tuli täyteen.
pi@raspberrypi:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 13G 13G 97M 100% /
Aloin heti epäilemään, että Motion varmaan on tallentanut kuvia tai videoita jatkuvasti. Löysin Raspberry Pi:n foorumilta kätevän komennon, jolla sain listattua 100 eniten tilaa vievää hakemistoa:
sudo du / 2>/dev/null | sort -g -r | head -n 100
Kävi ilmi, että yksi suurimmista hakemistoista oli /var/lib/motion
7719040 /var/lib/motion
Sieltä löytyikin järkyttävä määrä .jpg-tiedostoja:
Pysäytin Motion-demonin kokonaan:
sudo service motion stop
Sitten poistin kaikki kuvat, ennen kuin lähdin selvittämään ongelmaa Motionin konfiguraatiosta:
sudo rm -r /var/lib/motion/*
Muokkasin motion.conf -tiedostoa uudelleen ja muutin seuraavat rivit:
########################################## # Image File Output ########################################## # Output "normal" pictures when motion is detected (default: on) output_pictures off ########################################## # FFMPEG related options ########################################## # Use ffmpeg to encode movies in realtime (default: off) ffmpeg_output_movies off
Sitten käynnistin Motionin uudelleen:
sudo service motion restart
Nyt Motion ei enää tallentanut hakemistoon /var/lib/motion mitään. Muokattavat rivit löysin käyttäjän steve kommentista täältä: https://tutorials-raspberrypi.com/raspberry-pi-security-camera-livestream-setup/
Huomasin, että kameran livekuva oli nyt myös sulavampaa, kun taustalla kuvia ei koko ajan tallennettu!
TO DO
- Asetusten optimointi, jotta saan nostettua resoluutiota ilman, että viive kasvaa liikaa.
- Skaalautuvuus useammalle kameralle, jotta saan hallittua niitä saman hallintapaneelin kautta (jokaiselle oma konfiguraatiotiedosto).
- Joku fiksu koteloratkaisu, jonka kiinnittäminen kattoon/seinään on helppoa.
- Kameran sijoitus osoittamaan kotini etuovelle.
Lähteitä:
https://picamera.readthedocs.io/en/release-1.13/
https://raspberrypi.stackexchange.com/questions/10480/raspi-camera-board-and-motion
https://motion-project.github.io/motion_config.html
https://tutorials-raspberrypi.com/raspberry-pi-security-camera-livestream-setup/