Sommario:
- Passaggio 1: installa Linux Motion su Raspberry
- Passaggio 2: imposta l'API di Google Foto per Python
- Passaggio 3: prova
- Passaggio 4: Facoltativo: configurare l'accesso Web alla telecamera di streaming in tempo reale
- Passaggio 5: suggerimenti
Video: Raspberry Pi Linux Motion Integrazione con Google Foto: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
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
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
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:
Stato Kicker semplice e sistema di prenotazione con integrazione Slack: 12 passaggi (con immagini)
Stato Kicker semplice e sistema di prenotazione con integrazione Slack: in un'azienda in cui lavoro c'è un tavolo kicker. L'azienda occupa molti piani e per alcuni dipendenti ci vogliono fino a 3 minuti per arrivare al tavolo e…per rendersi conto che il tavolo è già occupato.Quindi è nata l'idea di costruire un ki
Controllo delle tende con ESP8266, integrazione di Google Home e Openhab e Webcontrol: 5 passaggi (con immagini)
Controllo delle tende con ESP8266, integrazione di Google Home e Openhab e controllo Web: in questo Instructable ti mostro come ho aggiunto l'automazione alle mie tende. Volevo essere in grado di aggiungere e rimuovere l'automazione, quindi tutta l'installazione è a clip. Le parti principali sono: Motore passo-passo Controllato dal driver passo-passo bij ESP-01 Ingranaggio e montaggio
Sensore porta alimentato a batteria con integrazione domotica, WiFi ed ESP-NOW: 5 passaggi (con immagini)
Sensore porta alimentato a batteria con integrazione domotica, WiFi ed ESP-NOW: in questo tutorial ti mostro come ho realizzato un sensore porta alimentato a batteria con integrazione domotica. Ho visto altri bei sensori e sistemi di allarme, ma volevo crearne uno da solo. I miei obiettivi: un sensore che rileva e segnala un doo
Striscia LED 12v controllata tramite WiFi utilizzando Raspberry Pi con Tasker, integrazione Ifttt.: 15 passaggi (con immagini)
Striscia led 12v controllata tramite wifi utilizzando Raspberry Pi con Tasker, integrazione Ifttt.: In questo progetto ti mostrerò come controllare una semplice striscia led analogica 12v tramite wifi utilizzando un Raspberry Pi. Per questo progetto avrai bisogno di: 1x Raspberry Pi (I sto usando un Raspberry Pi 1 Modello B+) 1x RGB 12v Le
Musica intelligente in camera da letto e in bagno con Raspberry Pi: integrazione di multiroom, allarme, controllo dei pulsanti e automazione domestica: 7 passaggi
Musica intelligente in camera da letto e in bagno con Raspberry Pi – Integrazione di multiroom, allarme, controllo dei pulsanti e automazione domestica: oggi vogliamo darvi due esempi su come utilizzare il Raspberry Pi con il nostro software Max2Play per l'automazione domestica: in bagno e in camera da letto . Entrambi i progetti sono simili in quanto la musica ad alta fedeltà da varie fonti può essere trasmessa in streaming attraverso