Raspberry IPcamera con integrato DVR e rilevatore umano

Questa guida permette di utilizzare un Raspberry-Pi zero(W) come un rilevatore di presenza umana e anche di fluido DVR, ma data la bassa velocità di clock, la massima risoluzione del video potrà essere di max 640×480.
Ad ogni modo descriverò come utilizzare anche il raspberry Pi3, con il quale la risoluzione potrà essere di 1280×720 o più.
Entrambi i modelli hanno di serie la connessione Wi-fi, mentre il Pi3 è dotato anche di porta Ethernet.


Avrete bisogno di:
– Raspberry Pi ZeroW or PI3.
– Come ingresso video, potete utilizzare una  Webcam oppure una ELP camera o in alternativa la raspberry camera board.
– Un Alimentatore di 5 Volt con almeno 2 Ampere in uscita.
– Una scheda SD da almeno 8 Gb.
Raspian Lite
– Un Pc con installato Ubuntu per lavorare.

Iniziate col terminale del PC linux, utile per scrivere l’immagine di Raspian.img nella scheda SD con:
sudo dd if=raspian.img of=/dev/sdb
Cambiate il nome del percorso in base alla reale posizione dell’ immagine raspian.img e del suo nome.

Ora l’ultima operazione sulla scheda SD tramite PC linux per configurare la Wireless LAN.
Modificate il file /etc/network/interfaces come sotto:
sudo nano /etc/network/interfaces

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid your-SSID
wpa-psk your-password

Salvate e mettete la scheda SD nel Raspberry e salvo errori potrete connettervi con un client SSH.
Nelle ultime versioni di Raspian il servizio SSH non è abilitato, attivatelo creando un file vuoto di nome ssh in /boot/:
Da terminale:
ssh pi@(raspi_IP) password raspberry

Installazione di Motion
Motion funge da rilevatore di movimento, lanciatore di script, e preparatore del flusso grezzo del video, installatelo con:
sudo apt-get update
sudo apt-get install motion

Installazione di Opencv
Opencv è il processore video che rileva la forma umana, installatel con:
sudo apt-get install libopencv-dev python-opencv
sudo apt-get install python-pip
sudo pip install imutils
sudo pip install -- upgrade imutils

Installazione ffmpeg OMX:

FFmpeg omx permette di sfruttare l’ accelerazione HW della GPU per codificare il video.
Questi comandi scaricano FFmpeg e impostano la configurazione di build:
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
sudo ./configure --arch=armel --target-os=linux --enable-gpl --enable-omx --enable-omx-rpi --enable-nonfree

Ora la compilazione di FFmpeg, scegliete in base al modello di raspberry:
sudo make -j4          per Raspberry (RPI 2/3)
sudo make                    per Raspberry (RPi 1, Zero, ZeroW)

Installiamo FFmpeg appena compilato nel sistema con:
sudo make install

Motion file di configurazione
sudo nano /etc/motion/motion.conf e inserite oppure modificate:

daemon on
width 640 ###1280 x pi3###
height 480 ###720 x pi3###
framerate 30
threshold 1500 ###2500 x pi3###
output_pictures center
ffmpeg_output_movies off
use_extpipe on
extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size 640x480 -framerate %fps -i pipe:0 -c:v h264_omx -b:v 1000k -f mp4 %f.mp4 ###640 x 480###
extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size 1280x720 -framerate %fps -i pipe:0 -c:v h264_omx -b:v 1000k -f mp4 %f.mp4 ###1280 x 720###
target_dir /home/pi/motion ###Create it with sudo mkdir /home/pi/motion##
picture_filename image
movie_filename %Y%m%d%H%M%S
stream_port 8081
stream_localhost off
stream_auth_method 1
stream_authentication user:password
on_movie_start su pi -c 'python /home/pi/open2.py --video %f.mp4'
on_movie_end su pi -c 'python /home/pi/end.py'

Salvate e chiudete.

Controllo Sd all’ avvio
Per attivare il controllo disco:
sudo nano /etc/default/rcS
modfificate così:
FSCKFIX=yes

Autopartenza al boot del demone Motion

sudo nano /etc/rc.local
inserite:
/usr/bin/motion start prima della linea exit 0
salvate e chiudete.

Programmazione del riavvio giornaliero e cancellazione dei file video più vecchi di 2 giorni

sudo nano crontab -e
inserite:
0 9 * * * /sbin/shutdown -r now
*/59 * * * * /etc/init.d/delete.sh 2>&1 > /dev/null

salvate e chiudete.
sudo nano /etc/init.d/delete.sh
inserite:
sudo find /home/pi/motion/*.* -mtime +2 -exec rm -R {} \;
salvate e chiudete.

Python OpenCV script

Lo script python open2.py viene lanciato da motion per scrivere nel file di testo        /home/pi/IOPEN.txt        il nome dell’ultimo file video.
creiamolo con    nano /home/pi/open2.py
inseriamo:
import argparse
import os
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video")
args = vars(ap.parse_args())
videoPath = (args["video"])
out_file = open("/home/pi/IOPEN.txt","w")
out_file.write(videoPath)
out_file.close()
print(videoPath)

salviamo e chiudiamo.

Invece lo script python end.py funge da rilevatore umano vero e proprio, grazie a opencv, inoltre questo script è usato per attivare altre funzioni quali, notifiche email e allarme.

Cliccate end per visualizzarlo.
Salvate il testo in      /home/pi/end.py

Volendo lo script è personalizzabile, all’interno ci sono delle linee commentate che vi permettono di ritagliare l’immagine per poter far analizzare solo la parte voluta se necessario, come in casi di disturbi ecc. Qui trovate alcune spiegazioni che vi aiutano ad interpretare il ritaglio.
Inoltre potete variare alcuni parametri come “Winstride, Padding and Scale” per calibrare il riconoscimento dell’umano. Qui alcune istruzioni in merito.

Notifica via email
Per ricevere notifica dell’ avvenuto individuazione dell’ umano usate questo Script , esso funziona con un account gmail, però dovrete diminuire la sicurezza di quell account seguendo questa  Pagina .
salvate il testo in /home/pi/mail.py

Gpio uscita per allarme 
Per attivare una sirena esterna create /home/pi/siren.py e inserite:

import os
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
sirena = 12
GPIO.setup(sirena, GPIO.OUT, initial=0)
GPIO.output(sirena, True)
print("Siren On")
time.sleep(60)
GPIO.output(sirena, False)

Il pin 12 del Gpio và collegato come sotto:

Caratteristiche extra in arrivo, tipo:
Funzione wi-fi access point AP
Attivazione remota del sistema (dynamic dns, app android)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *