Raspberry-Pi per monitoraggio visivo

Oltre alla tecnologia e alla programmazione ho l’hobby delle passeggiate in mezzo alla natura e l’osservazione della fauna selvatica, passione che sta crescendo sempre di più con la complicità di mia moglie che è una sfegatata in quest’ambito!

Per unire queste due anime abbiamo deciso di realizzare un piccolo progetto tecnico-naturalistico: installazione di una mangiatoia per piccoli uccelli sul balcone con monitoraggio tramite una videocamera e analisi automatica degli scatti effettuati, con invio periodico delle foto su un server remoto (e annessa pubblicazione su web).

Dal punto di vista strettamente tecnico/materiale il tutto si compone di:
– mangiatoia in legno
– cibo per uccelli
– raspberry-pi model b + sd card con il sistema operativo
– scheda di rete wifi usb
– videocamera collegata al raspberry
– scatola ermetica trasparente
– alimentatore 5V 2a micro-usb
– prolunga elettrica

HARDWARE

Tralasciando il cibo, la scatola trasparente, la scheda sd, la prolunga elettrica e l’alimentatore (come quello degli  smartphone) vediamo nel dettaglio le componenti “materiali” chiave usate nel progetto:

Mangiatoia

mangiatoia

Raspberry Pi Model Braspberry_model_bDettagli tecnici possono essere trovati a questo indirizzo.

Videocamera
raspberry_pi_camera
Dettagli tecnici possono essere trovati a questo indirizzo.

Scheda di rete WiFi USB

raspberry-wifi-usb

Una volta ottenuti tutti i pezzi assemblate il tutto e, se dovrete lasciare all’aperto l’apparecchiatura, fate in modo di sigillare per bene ogni parte … non deve formarsi condensa!

SOFTWARE

Fase preparatoria – Raspberry

  1. Installazione su scheda sd del sistema operativo, io ho usato Raspbian
  2. Avvio del sistema e login via ssh (utente pi e password raspberry)
  3. Modifica password dell’utente pi tremite comando passwd pi
  4. Attivazione sessione di root tramite sudo -s
  5. Aggiornamento di tutti i pacchetti,  nel mio caso tramite apt-get. L’elenco di quanto è ora presente sul mio sistema è scaricabile qui.
  6. Configurazione rete, nel mio caso -rete wifi- tramite creazione/modifica del file /etc/wpa_supplicant/wpa_supplicant.conf  in modo da fargli contenere:
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    network={
        ssid=”VOSTRO_SSID_RETE_WIFI”
        psk=”PASSWORD_RETE_WIFI”
    }
  7. Attivazione telecamera tramite raspi-config
  8. Aggiunta di codice in fondo al file /etc/rc.local in modo da fargli creare, in fase di avvio la directory /mnt/tmp e su di essa montare un ramdisk, in cui verranno memorizzate temporaneamente le immagini, così da non andare a pesare sulla scheda sd. Ecco cosa aggiungere, prima di exit 0:
    /bin/mkdir /mnt/tmp 2>/dev/null >/dev/null
    /bin/mount -t tmpfs none /mnt/tmp -ouid=pi
  9. Riavvio del sistema e verifica che tutto funzioni correttamente

Fase preparatoria – server di raccolta foto

La descrizione dei passi è piuttosto sintentica, si trovano guide in rete molto dettagliate che parlano di come gestire connessioni ssh configurate per login senza password ma tramite chiavi crittografiche.

  1. Creazione di un utente da usare per le connessioni sftp dal raspberry
  2. Configurazione home directory e permessi per l’utente di cui sopra
  3. Configurate sshd in modo che faccia il chroot delle connessioni entranti via sftp
  4. Nella home directory dell’utente create la directory foto e datele permessi/proprietario tali che il vostro utente possa scriverci
  5. Creazione, tramite ssh-keygen della coppia di chiavi (pubblica e privata) che verranno utilizzate. La chiave privata copiatevela in locale e poi trasferitela sul raspberry (salvando il file con permessi 0600).
  6. Test di connessione vari

Creazione e attivazione software monitoraggio – Raspberry

  1. Accesso come utente pi
  2. Creazione direcoty /home/pi/ssh
  3. Copiate, dalla vostra macchina locale,  il file della chiave privata nella directory /home/pi/ssh/ e  rinominatelo chiave_privata
  4. Scaricate (tramite wget o curl) i file di “foto” e “analisi” da qui e poi copiateli sul raspberry nella directory /home/pi (in alternativa li scaricate sulla vostra macchina locale e poi, tramite sftp/scp li copiate sul raspberry).
  5. Nel file loop_foto.sh configurate i vari parametri in modo che rispecchino le vostre necessità (con raspistill potete scattare, prima, delle foto da scaricare sulla vostra macchina e tramite un editor di immagini andare a capire quali zone sono di vostro interesse):
    IMG_W=… indica la larghezza in pixell della foto da scattare
    IMG_H=… indica l’altezza in pixel della foto da scattare
    OFF_START_X=… indica a partire da quale pixel sull’asse X è da tagliare la foto scattata (così potete scattare in grande e poi ritagliare)
    OFF_START_Y=… indica a partire da quale pixel sull’asse Y è da tagliare la foto scattata (così potete scattare in grande e poi ritagliare)
    OFF_SIZE_X=… indica quanti pixel deve essere largo il ritaglio
    OFF_SIZE_Y=… indica quanti pixel deve essere alto il ritaglio
    TIME_START=… indica ore e minuti (tutto attaccato, in doppia cifra) dai quali il sistema deve iniziare a scattare foto
    TIME_END=… indica ore e minuti (tutto attaccato, in doppia cifra) dai quali il sistema deve entrare in pausa e smettere di scattare
  6. Nel file loop_analisi.sh configurate il valore intero rappresentante la soglia di tolleranza (SOGLIA=…) che permetterà al sistema di decidere quali foto tenere e quali scartare (dovrete andare un po’ per tentativi successivi). Fatto questo cercate la riga sftp -b upload.cmd -i /home/pi/ssh/chiave_privata -P PORTASSH UTENTESSH@SERVERSSH && rm foto-*.jpg e andate a impostare i corretti valori per PORTASSH (porta di ascolto del server remoto ssh), UTENTESSH (utente per l’invio dei file, creato sul server remoto) e SERVERSSH (nome/indirizzo del server remoto che raccoglierà le foto).
  7. Accedete alla console di root tramite sudo -s
  8. Aggiungente in coda al file /etc/rc.local , ma prima di exit 0, le seguenti righe
    bash /home/pi/loop_foto.sh 2>/dev/null >/dev/null &
    bash /home/pi/loop_analisi.sh 2>/dev/null >/dev/null &
  9. Riavviate il tutto e …. AVETE FINITO.

CONCLUSIONE

A questo punto il sistema sarà attivo negli orari da voi voluti, scatterà le foto e farà i ritagli, confronterà le varie foto scartando quelle troppo simili e farà l’upload sul vostro server remoto tramite connessione crittofrata.

Nel mio caso ho anche creato un piccolo script php sul server di raccolta foto che espone il tutto come pagine web, il risultato è visibile qui.

AGGIORNAMENTO 07/11/2016

E’ stato aggiornato lo script di upload immagini in modo che possa inviare quanto catturato direttamente a Google Drive. Per dettagli vedere l’articolo “Monitoraggio visivo con RaspberryPi : inviare i file a Google Drive” .

Lascia un commento