9. Kameravalvonta

Pyydä opettajalta Logitechin web-kamera Logitechilta. Kameran malli on V-U0023 eli HD Webcam C525. Jotta web-kamera lähtee toimimaan sille pitää asentaa ohjelmaa Terminalista komennolla:

sudo apt-get install fswebcam

Tökkää kameran usb-liitin raspberryn usb-porttiin. Kuvan webkameralla voi ottaa kirjoittelemalla Terminalista komento:

cd /var/www/html/kamera 
fswebcam webcamimage.jpg

Kuvan resoluutiota voi muuttaa tarkenteella –r vaikkapa seuraavasti:

fswebcam -r 1280x720 image2.jpg

Liiketunnistusta varten asennetaan Motion –ohjelmisto

sudo apt-get install motion

Automaattinen liikkeentunnistus

Toimiakseen liiketunnistuksessa ja tallentaakseen videota Motion-ohjelmiston asennuksen jälkeen pitää tehdä seuraavat toimet.
Muokataan ensin configuraatiotiedostoa:

sudo nano /etc/motion/motion.conf

Tiedostossa on ainakin 600 riviä, mutta seuraavat pitää muuttaa:

daemon on #oletus off (voidaan ajaa taustalla)
framerate 30 #default 2 (lisätään frameratea)
width 640 #oletus 320 (webkameran kykyä vastaava)
height 480 #oletus 240 (kts. width)threshold 2000 #oletus 1500 (*montako pixeliä pitää muuttua kuvassa, jotta tunnistetaan liike)
pre_capture 2 #oletus 0 (tallentaa 2 framea ennen kuin liike tunnistetaan)
post_capture 5 #oletus 0
output_normal off #oletus on (ei kuvia, vain videota)
ffmpeg_video_codec msmpeg4 #oletus swf (windows media player -yhteensopiva)
target_dir /home/pi/motionvideos #oletus /tmp/motion (mihin videot tallennetaan)
webcam_maxrate 5 #oletus 1 (nostetaan vähän frameratea on live streamissa)
webcam_localhost off #oletus on (paikallisverkosta voi katsoa livestreamia)
output_pictures on (tallentaa kuvia -> picture filename ”lastsnap”)
picture_filename lastsnap (tallennetuksi jää viimeisin kuva videosta)
ffmpeg_output_movies on (tallentaa videon)
ffmpeg_video_codec msmpeg4 (avi-videoita)

Tallenna ctrl+o ja poistu ctrl+x
(ctrl+W = etsi nano-editorissa)

Kannattaa myös tarkistaa, että USB-kamera on valittu kameraksi.

videodevice /dev/video0

Komennolla “lsusb” saa listan USB-laitteista.

pi@raspberrypi:~/motionvideos $ lsusb
Bus 001 Device 007: ID 046d:0826 Logitech, Inc.

Tallennettaville videoille tarvitaan kansio ja sille oikeudet:

sudo mkdir /home/pi/motionvideos
sudo chown motion /home/pi/motionvideos
sudo chmod a+rwxt /home/pi/motionvideos/

Sitten muokataan motion daemoniksi:

sudo nano /etc/default/motion

Muokkaa riviä start_motion_daemon=no -> yes
Varmuuden vuoksi vähän oikeuksien muokkauksia (ei lähtenyt toimimaan ilman tätä)

sudo chown root.root /var/run/motion/
sudo chmod 755 /var/run/motion/

Seuraavaksi voisi rohkeasti kokeilla raspberryn uudelleenkäynnistuksen (”sudo reboot”) jälkeen motionin käynnistystä.

sudo service motion start

Ja jotta lastsnap.jpg lähtisi sähköpostilla pitää vielä tiedostoon ”/etc/motion/motion.conf” muokata riviä

# Command to be executed when an event ends after a period of no motion
# (default: none). The period of no motion is defined by option event_gap.
; on_event_end value sposti.py

On-line kuva web-kamerasta selaimelle

Edellisen kohdan muokkaukset avaavat jo web-kameran porttiin 8081, mutta alla pikakertaus.

Muokataan konfiguraatiota ”sudo nano /etc/motion/motion.conf”

# Start in daemon (background) mode and release terminal (default: off)
daemon off -> on

# Restrict stream connections to localhost only (default: on)
stream_localhost on -> off
# 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

output_pictures off

Muokataan tiedostoa “sudo nano /etc/default/motion”

# set to 'yes' to enable the motion daemon
start_motion_daemon=yes

Käynnistä palvelu komennolla (servicenä ei välttämättä suostu käynnistymään):

sudo motion -n

Tämän jälkeen web-kameran kuva näkyy samassa lähiverkossa olevan PC:n selaimelle osoitteessa <raspberryn_ip>:8081, eli raspberryn ip-osoite ja portti 8081 (esim. 192.168.1.2:8081). Huomaa että raspberryn ja esimerkiksi puhelimen pitää olla samassa lähiverkossa.

Email –lähetys liikkeestä omaan sähköpostiin

Ensin asennetaan ssmtp- ja mailutils-paketit komennolla:

sudo apt-get install ssmtp mailutils

Sähköpostin lähettämiseen pitää tehdä Python ohjelma, joka kuitenkaan ei todennäköisesti toimi, sillä suurimmassa osassa (kaikissa) sähköpostipalvelimissa on ulkopuolinen lähetys ”epämääräisistä kohteista” estetty. Kokeilin lähettää gmailin ja oman palvelimeni kautta, mutta ei anna kirjautua edes salatulla yhteydellä. Vir-heilmoitus ”mail: cannot send message: Process exited with a non-zero status”

Sähköpostin lähetys ”sposti.py”:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import smtplib
import time

from datetime import datetime
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

smtpUser = ’sahkoposti@osoite.com’
smtpPass = ’salasana’
toAddr = ’vastaanottaja@osoite.com’
fromAddr = smtpUser
aikaleima = datetime.now().strftime('%a %d %b @ %H:%M')
subject = ’Kuva kamerasta ’ + aikaleima

msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = fromAddr
msg['To'] = toAddr
msg.preamble = "Kameran kuva @ " + f_time

kuva = open(' lastsnap.jpg', 'rb')
img = MIMEImage(kuva.read())
kuva.close()
msg.attach(img)

s = smtplib.SMTP(’smtp.lahteva.com’,587)
s.ehlo()
s.starttls()
s.ehlo()
s.login(smtpUser, smtpPass)
s.send_message(msg)
s.quit