Sommario:

Raspberry Pi Linux Motion Integrazione con Google Foto: 5 passaggi
Raspberry Pi Linux Motion Integrazione con Google Foto: 5 passaggi

Video: Raspberry Pi Linux Motion Integrazione con Google Foto: 5 passaggi

Video: Raspberry Pi Linux Motion Integrazione con Google Foto: 5 passaggi
Video: Videosorveglianza - Realizziamo un Server NAS con OMV su Raspberry PI, utile per le Telecamere FTP 2024, Dicembre
Anonim
Raspberry Pi Linux Motion Integrazione con Google Foto
Raspberry Pi Linux Motion Integrazione con Google Foto

L'idea è di caricare foto e video realizzati con una cam attivata dal movimento collegata a Raspberry Pi per caricare file su un cloud. Il software "Motion" supporta il caricamento su Google Drive tramite PyDrive. In questo articolo "Movimento" viene utilizzato per caricare su Google Foto.

Hardware:

Raspberry Pi 3B+

Webcam USB Logitech C920

La selezione dell'hardware non è stata determinata, ho solo preso ciò che era a portata di mano.

Prerequisiti:

Per comodità Raspberry pi dovrebbe essere nella tua rete locale, per controllarlo senza monitor/tastiera e caricare/scaricare file. Per questo dovresti avere un agente ssh sul tuo PC (ad esempio mastice).

Molte grazie a ssandbac per l'ottimo tutorial. Se hai bisogno di maggiori informazioni su come configurare l'ambiente, dai un'occhiata a questo articolo. Ho preso in prestito l'installazione del movimento e i passaggi di configurazione da esso e ho aggiunto alcune modifiche. In particolare, invece di inviare file e avvisi tramite e-mail, questo esempio utilizza il caricamento nell'album condiviso di Google Photos e riceve notifiche di tipo "foto aggiunte" nella barra di notifica.

Ecco i passaggi:

Passaggio 1: installa Linux Motion su Raspberry

In particolare in questo esempio è stato utilizzato il movimento v4.0.

1.1 Aggiorna più

pi@raspberrypi:~ $ sudo apt-get update

pi@raspberrypi:~ $ sudo apt-get upgrade

1.2 Scarica il movimento

pi@raspberrypi:~ $ sudo apt-get install motion

1.3 Ora modifica questo file con le seguenti modifiche

pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf

# Avvia in modalità demone (background) e rilascia il terminale (default: off)

demone acceso

# Usa un file per salvare i messaggi di log, se non è definito viene utilizzato stderr e syslog. (predefinito: non definito)

file di log /var/log/motion/motion.log

# Larghezza immagine (pixel). Intervallo valido: dipendente dalla fotocamera, impostazione predefinita: 352

larghezza 1920

# Altezza immagine (pixel). Intervallo valido: dipendente dalla fotocamera, impostazione predefinita: 288

altezza 1080

# Numero massimo di fotogrammi da acquisire al secondo.

framerate 30

# Specifica il numero di immagini pre-acquisite (bufferizzate) prima del movimento

pre_cattura 5

# Numero di fotogrammi da catturare dopo che il movimento non viene più rilevato

post_capture 5

# Emette immagini "normali" quando viene rilevato un movimento (impostazione predefinita: attiva)

output_pictures spento

# La qualità (in percentuale) da utilizzare per la compressione jpeg

qualità 100

# Usa ffmpeg per codificare i filmati in tempo reale

ffmpeg_output_movies disattivato

# o l'intervallo 1 - 100 dove 1 indica la qualità peggiore e 100 è la migliore.

ffmpeg_variable_bitrate 100

# Quando si creano video, i fotogrammi devono essere duplicati in ordine

ffmpeg_duplicate_frames false

# Bool per abilitare o disabilitare extpipe (default: off)

use_extpipe su

extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx%h -framerate %fps -i pipe:0 -vcodec libx264 -preset ultrafast -f mp4 %f.mp4

target_dir /var/lib/motion

# Comando da eseguire quando un file filmato

; on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &

Lascia l'ultimo con punto e virgola per ora (commentato) per decommentare dopo esserti assicurato che la registrazione e il caricamento del video funzionino.

1.4 Quindi cambia

pi@raspberrypi:~ $ sudo nano /etc/default/motion

pi@raspberrypi:~ $ start_motion_daemon=yes

Passaggio 2: imposta l'API di Google Foto per Python

Configura l'API di Google Foto per Python
Configura l'API di Google Foto per Python
Configura l'API di Google Foto per Python
Configura l'API di Google Foto per Python

2.1 Consigliato per creare un nuovo account a questo scopo per condividere un album con quello principale per ricevere notifiche quando vengono aggiunti nuovi file, oltre a più spazio di archiviazione. Abilita l'API di Google Foto per l'account che utilizzerai per il caricamento.

Dovresti avere il file credenziali.json dopo questo.

2.2 Configurazione dell'ambiente Python

Fondamentalmente la configurazione dell'ambiente è richiesta solo su lampone. Ma richiede l'autorizzazione oauth che è più conveniente da realizzare su PC. Per fare ciò su raspberry è necessario collegare monitor/tastiera ad esso o configurare un'interfaccia utente desktop remota. Ho appena installato lo stesso ambiente sia su raspberry che su PC. Quindi i passaggi 2.2.1..2.2.3 sono stati effettuati su PC, 2.2.1, 2.2.2, 2.2.5, 2.2.6 su Rpi

2.2.1 installa Python 3

2.2.2 Installa i pacchetti google api secondo il manuale* (vedi 5.1)

Su PC

pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

al lampone

pi@raspberrypi:~ $ sudo pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

2.2.3 Controlla lo script che carica su google foto.. Si trova sul mio github. Inseriscilo nella stessa directory con credenziali.json.

2.2.4 Scatta una foto e prova il caricamento

python3 foto.py image.jpg

Se presenti, installa le dipendenze mancanti e riprova. Di conseguenza dovresti ottenere token.pickle nella directory dello script e anche un nuovo album condiviso creato nella tua interfaccia web di Google Foto con image.jpg. Quando ottieni token.pickle non hai più bisogno di credenziali.json per photos.py nella stessa directory.

2.2.5 Condividi l'album con l'account su ciò che desideri ricevere notifiche sui nuovi media aggiunti. Aggiungi questo account al tuo telefono.

2.2.6 Metti photos.py e token.pickle in /var/lib/motion su raspberry. L'utente "pi" non può scrivere nella directory "movimento", quindi carica prima su /home/pi

scp photos.py token.pickle pi@IP:/home/pi

Quindi accedi a raspberry e sposta i file sotto sudo

ssh pi@IP

pi@raspberrypi:~ $ sudo mv photos.py token.pickle /var/lib/motion

2.2.7 Controlla come funziona il caricamento su raspberry. Scatta qualche foto con fswebcam e prova a caricarla

pi@raspberrypi:~ $ sudo fswebcam /var/lib/motion/image.jpg

pi@raspberrypi:~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg

Ci dovrebbe essere image-j.webp

Passaggio 3: prova

3.1 Avvia il servizio Motion

pi@raspberrypi:~ $ sudo service motion start

Puoi cambiare il comando in "stop" o "restart"

3.2 Abilitare i registri di movimento

pi@raspberrypi:~ $ tail -f /var/log/motion/motion.log

3.2 Visualizzare l'output della telecamera su un altro dispositivo connesso alla stessa rete locale. Inserisci nel browser:

IP:8081

3.3 Guardando i log attendere che il movimento sia rilevato e il file NAME.mp4 sia scritto in /var/lib/motion. Quindi avvia il caricamento dello script manualmente

pi@raspberrypi:~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4

Controlla le tracce di Python. Attendi finché event_end non viene visualizzato in motion.log. Quindi vai all'album "helloworld" nelle tue foto di google e controlla se è stato caricato un video.

3.4 Se il caricamento ha esito positivo, rimuovere il commento in /etc/motion.conf dalla riga:

pi@raspberrypi:~ $ sudo nano /etc/motion.conf

# Comando da eseguire quando un file di filmato è pronto

on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &

pi@raspberrypi:~ $ sync

pi@raspberrypi:~ $ sudo service motion restart

3.5 Guardando i log di movimento e nell'album controlla se il video è stato caricato automaticamente.

3.6 Facoltativamente, condividi l'album con il tuo account principale per ricevere una notifica quando viene aggiunto un nuovo video o una foto.

Passaggio 4: Facoltativo: configurare l'accesso Web alla telecamera di streaming in tempo reale

Opzionale: configurare l'accesso Web alla telecamera di streaming in tempo reale
Opzionale: configurare l'accesso Web alla telecamera di streaming in tempo reale
Opzionale: configurare l'accesso Web alla telecamera di streaming in tempo reale
Opzionale: configurare l'accesso Web alla telecamera di streaming in tempo reale
Opzionale: configurare l'accesso Web alla telecamera di streaming in tempo reale
Opzionale: configurare l'accesso Web alla telecamera di streaming in tempo reale

Questo passaggio si basa sul tutorial Parreno di Michel. Ho appena scelto FreeDNS invece di NoIP come consigliato qui.

4.1 Configurare l'accesso autorizzato al server di movimento in streaming video:

pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf

# Imposta il metodo di autenticazione (predefinito: 0)

# 0 = disabilitato

# 1 = Autenticazione di base

# 2 = digest MD5 (l'autenticazione più sicura)

stream_auth_method 2

# Autenticazione per il flusso. Sintassi nome utente: password

# Predefinito: non definito (Disabilitato)

webcontrol_authentication nome utente:password

# Framerate massimo per i flussi di streaming (predefinito: 1)

stream_maxrate 30

# Limita le connessioni di streaming solo a localhost (impostazione predefinita: attiva)

stream_localhost disattivato

Se non hai intenzione di utilizzare l'interfaccia di controllo web dalla rete esterna lasciala disabilitata (come per impostazione predefinita)

# Limita le connessioni di controllo solo a localhost (predefinito: attivo)

webcontrol_localhost attivo

Inoltre, poiché lampone è online, consiglio di cambiare la password predefinita di lampone

pi@raspberrypi:~ $ passwd

Sebbene la porta ssh 22 non venga reindirizzata al lampone, ancora.

4.2 Vai al sito FreeDNS

4.3 Iscriviti

4.4 Aggiungi sottodominio (per i membri -> sottodomini)

4.5 Scegliere il client DNS da installare su Raspberry (Per i membri -> DNS dinamico -> Risorse DNS Synamic -> Client DNS dinamici)

Ho scelto wget_script update.sh di Adam Dean (in fondo alla pagina)

Sono presenti i segnaposto _YOURAPIKEYHERE_ e _YOURDOMAINHERE_. Per ottenerli vai su (Per i membri -> DNS dinamico)

E nella pagina sottostante troverai esempi di script con la tua APIKEY e DOMAIN (quello aggiunto in 4.4). Ho preso questi valori da Wget Script e ho sostituito _YOURAPIKEYHERE_ e _YOURDOMAINHERE_ in update.sh

4.6 Quindi eseguire update.sh su raspberry. Potrebbe richiedere dnsutils per nslookup. Installalo quindi:

pi@raspberrypi:~ $ sudo apt-get dnsutils

4.7 Quindi configura il tuo router per reindirizzare le richieste del mondo esterno alla porta 8081 all'ip del raspberry

4.8 Riserva l'ip per il MAC del tuo Raspberry nelle impostazioni DHCP in modo che Rpi abbia sempre lo stesso IP

4.9 Quindi inserire nel browser su un dispositivo non connesso alla rete locale:

tuodominio:8081

Inserisci le tue credenziali che hai definito in motion.conf.

Prova come funziona il video.

4.10 per aggiornare DDNS imposta automaticamente l'attività cron. Vedi quick_cron_example su (Per i membri -> DNS dinamico)

Passaggio 5: suggerimenti

5.1 Prestare attenzione durante l'installazione dei pacchetti Python su raspberry. Ho passato una giornata a eseguire il debug di questo: il problema era che dalla console lo script funzionava bene, ma non veniva chiamato dal callback dell'evento di movimento. Ciò che ha peggiorato la situazione è che in quest'ultimo caso le tracce della sceneggiatura non erano disponibili.

Il motivo era che seguendo la guida ho installato i pacchetti per l'utente 'pi' (che per impostazione predefinita si trova nella directory /home/pi e limitato ad altri utenti) ma per eseguire lo script come figlio del servizio 'motion' i pacchetti devono essere disponibile anche per l'utente 'movimento'. Quindi alla fine ho risolto installando i pacchetti come

sudo pip3 …

Questo non è un modo corretto funziona ancora. L'installazione senza sudo as pip3 --system mi dava errori per qualche motivo.

Di conseguenza lo script viene chiamato anche sotto sudo (vedi motion.conf).

Durante questa risoluzione dei problemi ho apportato molte modifiche non necessarie e non sono sicuro di quali siano necessarie e ora sono troppo pigro per ripristinarle in modo incrementale e vedere quando smette di funzionare. In particolare, concessi diritti di amministratore del movimento:

pi@raspberrypi:~ $ moto gruppi

motion: motion adm sudo audio video users netdev pi

pi@raspberrypi:~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd

pi ALL=(ALL) NOPASSWD: ALL

motion ALL=(ALL) NOPASSWD: ALL

Stava anche cambiando i proprietari dei file e le autorizzazioni simili al caricamento su Google Drive. Probabilmente potrebbe aiutarti in un caso in cui hai un problema simile.

5.2 L'API di Google Foto consente di aggiungere file solo agli album condivisi in modo che chiunque abbia il collegamento possa accedervi. Non condividerlo tramite link ed eliminare vecchi film o spostarli nel cestino o dall'album. In quest'ultimo caso rimangono nel conto.

5.3 L'assistente di Google foto rileva i volti, il che è molto utile se la qualità della fotocamera è buona. Come bonus rende fantasiosi tipi di compilation e-g.webp

5.4 Ho provato a utilizzare il modem USB 4G LTE per l'accesso a Internet ed ecco i miei risultati. 5.4.1 Huawei E3372h-153 funziona con raspberry senza problemi e software aggiuntivo 5.4.2 Abilita anche l'hotspot in modo che Rasperry abbia condiviso la connessione Internet tramite wifi. C'è https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ una guida davvero semplice su come farlo usando RaspAP. 5.4.3 Il DNS dinamico non ha funzionato nella rete 4G del mio operatore. C'è una spiegazione perché

5.5 Dopo aver utilizzato questo sistema per un paio di settimane si è scoperto, sebbene i video siano più convenienti da visualizzare e caricare, Google Foto funziona meglio con le immagini. Ad esempio, abilita il raggruppamento di cose/volti analizzando solo le immagini e solo successivamente cercando volti/cose dalle immagini nei video, ma non il contrario. Quindi ho intenzione di testare le immagini caricando piuttosto i video.

Consigliato: