Taula de continguts:

Integració de Google Photos amb Raspberry Pi Linux Motion: 5 passos
Integració de Google Photos amb Raspberry Pi Linux Motion: 5 passos

Vídeo: Integració de Google Photos amb Raspberry Pi Linux Motion: 5 passos

Vídeo: Integració de Google Photos amb Raspberry Pi Linux Motion: 5 passos
Vídeo: Leap Motion SDK 2024, Desembre
Anonim
Integració de Google Photos de Raspberry Pi Linux Motion
Integració de Google Photos de Raspberry Pi Linux Motion

La idea és pujar fotos i vídeos fets amb càmera activada per moviment connectada a Raspberry Pi per pujar fitxers a un núvol. El programari ‘Motion’ admet la càrrega a Google Drive mitjançant PyDrive. En aquest article s'utilitza "Motion" per penjar a Google Fotos.

Maquinari:

Raspberry Pi 3B +

Càmera web USB Logitech C920

La selecció de maquinari no estava determinada, només vaig prendre el que tenia a mà.

Requisits previs:

Per comoditat, Raspberry pi ha d’estar a la vostra xarxa local: per controlar-lo sense monitor / teclat i carregar / descarregar fitxers. Per a això, heu de tenir agent ssh al vostre PC (per exemple, massilla).

Moltes gràcies a ssandbac per un gran tutorial. Si necessiteu més informació sobre com configurar l'entorn, consulteu aquest article. Vaig agafar prestat una instal·lació de moviment i la configuració de passos i hi vaig afegir alguns canvis. En particular, en lloc d'enviar fitxers i alertes per correu electrònic, aquest exemple fa servir la càrrega a l'àlbum compartit de fotos de Google i s'obtenen notificacions tipus de "fotos afegides" a la barra de notificacions.

Aquests són els passos següents:

Pas 1: instal·leu Linux Motion a Raspberry

Particularment en aquest exemple es va utilitzar motion v4.0.

1.1 Actualització pi

pi @ raspberrypi: ~ $ sudo apt-get update

pi @ raspberrypi: ~ $ sudo apt-get upgrade

1.2 Descarregar moviment

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

1.3 Ara editeu aquest fitxer amb els canvis següents

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

# Inicieu el mode dimoni (fons) i deixeu anar el terminal (per defecte: desactivat)

dimoni encès

# Utilitzeu un fitxer per desar els missatges de registres, si no es defineix stderr i s'utilitza syslog. (per defecte: no definit)

fitxer de registre /var/log/motion/motion.log

# Amplada de la imatge (píxels). Rang vàlid: dependent de la càmera, predeterminat: 352

ample 1920

# Alçada de la imatge (píxels). Rang vàlid: depèn de la càmera, predeterminat: 288

alçada 1080

# Nombre màxim de fotogrames a capturar per segon.

framerate 30

# Especifica el nombre d'imatges pre-capturades (emmagatzemades en memòria intermèdia) abans del moviment

pre_captura 5

# Nombre de fotogrames a capturar després del moviment ja no es detecta

post_capture 5

# Sortiu imatges "normals" quan es detecta moviment (per defecte: activat)

output_pictures desactivades

# La qualitat (en percentatge) que utilitzarà la compressió jpeg

qualitat 100

# Utilitzeu ffmpeg per codificar pel·lícules en temps real

ffmpeg_output_movies desactivat

# o el rang 1-100, on 1 significa pitjor qualitat i 100 és millor.

ffmpeg_variable_bitrate 100

# Quan creeu vídeos, s'han de duplicar els fotogrames en ordre

ffmpeg_duplicate_frames false

# Bool per habilitar o desactivar extpipe (per defecte: off)

use_extpipe activat

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

# Ordre que cal executar quan es produeix un fitxer de pel·lícula

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

Deixeu l'últim amb punt i coma per ara (comentat) per deixar un comentari després d'assegurar-vos que la gravació i la càrrega de vídeo funcionin.

1.4 A continuació, canvieu

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

pi @ raspberrypi: ~ $ start_motion_daemon = yes

Pas 2: configureu l'API de Google Photos per a Python

Configureu l'API de Google Photos per a Python
Configureu l'API de Google Photos per a Python
Configureu l'API de Google Photos per a Python
Configureu l'API de Google Photos per a Python

2.1 Es recomana crear un compte nou amb aquest propòsit per compartir un àlbum amb el vostre principal per rebre notificacions quan s'afegeixin fitxers nous i més espai d'emmagatzematge. Activeu l'API de Google Fotos per al compte que utilitzeu per penjar.

Després d’això, haureu de tenir el fitxer credentials.json.

2.2 Configuració de l'entorn Python

Bàsicament, la configuració de l’entorn només es requereix a gerds. Però requereix una autorització personal que és més còmoda de dur a terme a l'ordinador. Per fer-ho a Raspberry, heu de connectar-hi el monitor o el teclat o configurar una interfície d’usuari remota de l’escriptori. Acabo d’instal·lar el mateix entorn al raspberry i al PC. Per tant, els passos 2.2.1..2.2.3 es van fer a PC, 2.2.1, 2.2.2, 2.2.5, 2.2.6 a Rpi

2.2.1 instal·leu Python 3

2.2.2 Instal·leu els paquets de google api segons el manual * (vegeu 5.1)

A l'ordinador

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

Sobre gerds

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

2.2.3 Mireu la pujada de seqüències d'ordres a fotos de Google. Es col·loca al meu github. Poseu-lo al mateix directori amb credentials.json.

2.2.4 Feu una foto i proveu la càrrega

python3 photos.py image.jpg

Instal·leu les dependències que falten si n'hi ha i torneu-ho a provar. Com a resultat, haureu d’obtenir token.pickle al directori de l’escriptura i també un àlbum compartit nou creat a la vostra interfície web de Google Fotos amb image.jpg. A mesura que obtingueu token.pickle ja no necessiteu credentials.json per photos.py al mateix directori.

2.2.5 Compartiu l'àlbum amb el compte sobre el que voleu que s'afegeixin notificacions sobre els suports nous. Afegiu aquest compte al vostre telèfon.

2.2.6 Introduïu photos.py i token.pickle a / var / lib / motion al gerd. L'usuari "pi" no pot escriure als direccions del "moviment", de manera que primer pengeu a / home / pi

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

A continuació, inicieu sessió a raspberry i moveu els fitxers a sudo

ssh pi @ IP

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

2.2.7 Comproveu com funciona la càrrega al gerd. Feu una foto amb fswebcam i proveu de penjar-la

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

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

Podria haver-hi image-j.webp

Pas 3: prova

3.1 Inicieu el servei Motion

pi @ raspberrypi: Inici del moviment del servei ~ $ sudo

Podeu canviar l'ordre per "aturar" o "reiniciar"

3.2 Activa els registres de moviment

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

3.2 Veure la sortida de la càmera en un altre dispositiu connectat a la mateixa xarxa local. Introduïu al navegador:

IP: 8081

3.3 Mirant els registres, espereu fins que es detecti el moviment i el fitxer NAME.mp4 estigui escrit a / var / lib / motion. A continuació, inicieu la càrrega de l'script manualment

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

Comproveu les traces de pitó. Espereu fins que event_end aparegui en moviment.log. A continuació, aneu a l'àlbum "helloworld" de les fotos de Google i comproveu si hi ha un vídeo penjat.

3.4 Si la càrrega és correcta, descomenteu a /etc/motion.conf la línia:

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

# Ordre que cal executar quan estigui llest un fitxer de pel·lícula

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

pi @ raspberrypi: ~ $ sync

pi @ raspberrypi: reinici del moviment del servei $ $ sudo

3.5 Mirant els registres de moviment i a l'àlbum comproveu si el vídeo s'ha penjat automàticament.

3.6 Compartiu l'àlbum opcionalment amb el vostre compte principal per rebre notificacions quan s'afegeixi el vídeo o la foto nova.

Pas 4: opcional: configureu l'accés web a la càmera de transmissió en temps real

Opcional: configureu l'accés web a la càmera de transmissió en temps real
Opcional: configureu l'accés web a la càmera de transmissió en temps real
Opcional: configureu l'accés web a la càmera de transmissió en temps real
Opcional: configureu l'accés web a la càmera de transmissió en temps real
Opcional: configureu l'accés web a la càmera de transmissió en temps real
Opcional: configureu l'accés web a la càmera de transmissió en temps real

Aquest pas es basa en el tutorial de Michel Parreno. Acabo de triar FreeDNS en lloc de NoIP com es recomana aquí.

4.1 Configureu l'accés autoritzat al servidor de moviment de transmissió de vídeo:

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

# Definiu el mètode d'autenticació (per defecte: 0)

# 0 = desactivat

# 1 = Autenticació bàsica

# 2 = resum MD5 (l'autenticació més segura)

stream_auth_method 2

# Autenticació del flux. Nom d’usuari de la sintaxi: contrasenya

# Valor per defecte: no definit (desactivat)

nom d'usuari webcontrol_authentication: contrasenya

# Freqüència de fotogrames màxima per als fluxos de transmissió (per defecte: 1)

stream_maxrate 30

# Restringir les connexions de transmissió només a localhost (per defecte: activat)

stream_localhost desactivat

Si no utilitzeu la interfície de control web des d'una xarxa externa, deixeu-la desactivada (com per defecte)

# Restringir les connexions de control només a localhost (per defecte: activat)

webcontrol_localhost activat

A més, atès que el gerd està en línia, recomano canviar la contrasenya predeterminada del gerd

pi @ raspberrypi: ~ $ passwd

Tot i que el port ssh 22 no es redirigeix cap al gerd, encara.

4.2 Aneu al lloc FreeDNS

4.3 Inscriviu-vos

4.4 Afegir subdomini (Per a membres -> Subdominis)

4.5 Trieu el client DNS que voleu instal·lar a Raspberry (Per a membres -> DNS dinàmic -> Recursos DNS sinàmics -> Clients DNS dinàmics)

He triat wget_script update.sh d'Adam Dean (a la part inferior de la pàgina)

Hi ha espais reservats _YOURAPIKEYHERE_ i _YOURDOMAINHERE_. Per obtenir-los, aneu a (Per a membres -> DNS dinàmic)

I a la pàgina següent trobareu exemples de scripts amb el vostre APIKEY i DOMAIN (el que s’afegeix a 4.4). He pres aquests valors de Wget Script i he substituït _YOURAPIKEYHERE_ i _YOURDOMAINHERE_ a update.sh

4.6 A continuació, executeu update.sh al gerd. Pot requerir dnsutils per a nslookup. Instal·leu-lo aleshores:

pi @ raspberrypi: ~ $ sudo apt-get dnsutils

4.7 A continuació, configureu l’encaminador per redirigir les sol·licituds externes del món al port 8081 a la IP del raspberry

4.8 Reserveu la IP per al MAC del vostre gerd a la configuració DHCP perquè Rpi tingui sempre la mateixa IP

4.9 A continuació, introduïu al navegador un dispositiu que no estigui connectat a la xarxa local:

vostredomini: 8081

Introduïu les vostres credencials que heu definit a motion.conf.

Proveu el funcionament del vídeo.

4.10 per actualitzar DDNS configurant automàticament la tasca cron. Vegeu quick_cron_example a (Per a membres -> DNS dinàmic)

Pas 5: consells

5.1 Estigueu atents instal·lant paquets python al gerd. Vaig passar un dia depurant-ho; el problema era que des de la consola l’escriptura funcionava bé, però no es va trucar des de la devolució de trucada de l’esdeveniment de moviment. El que va empitjorar va ser que les traces del guió no estaven disponibles en aquest darrer cas.

El motiu era que, seguint la guia, vaig instal·lar els paquets per a l'usuari 'pi' (que per defecte es troba al directori / home / pi i restringit per a altres usuaris), però per executar l'script com a fill del servei 'motion' els paquets han de ser disponible per a l'usuari 'motion' també. Així que finalment el vaig arreglar instal·lant els paquets com

sudo pip3 …

Aquesta no és una manera adequada que encara funciona. La instal·lació sense sudo com a pip3 --system em donava errors per algun motiu.

Correspondentment, l'script també es diu sota sudo (vegeu motion.conf).

Durant aquesta resolució de problemes, vaig fer molts canvis innecessaris i no vaig saber què són necessaris i ara és massa mandrós tornar-los enrere de manera incremental i veure quan deixa de funcionar. Particularment, els drets d'administrador de la moció concedits:

pi @ raspberrypi: ~ $ grups moviment

motion: motion adm sudo audio video users netdev pi

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

pi TOTS = (TOTS) NOPASSWD: TOTS

moviment TOT = (TOT) NOPASSWD: TOT

També es canviaven els propietaris i permisos de fitxers similars a la càrrega a Google Drive. Probablement us pot ajudar en cas que tingueu un problema similar.

5.2 L'API de Google Photos permet afegir fitxers als àlbums compartits només perquè tothom que tingui l'enllaç hi pugui accedir. No el compartiu mitjançant un enllaç ni suprimiu les pel·lícules antigues ni les mogueu a la paperera ni de l'àlbum. En aquest últim cas, romanen al compte.

5.3 L’assistent de fotos de Google detecta cares, cosa molt útil si la qualitat de la càmera és bona. Com a bo, fa que els mitjans de comunicació siguin una mena de recopilacions i gifs, etc.

5.4 He provat d’utilitzar el mòdem USB 4G LTE per accedir a Internet i aquí teniu els meus resultats. 5.4.1 Huawei E3372h-153 funciona amb raspberry sense problemes i programari addicional 5.4.2 També s’ha activat el punt de connexió, de manera que Rasperry ha compartit connexió a Internet a través del wifi. Hi ha https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ una guia molt fàcil de fer-ho amb RaspAP. 5.4.3 El DNS dinàmic no funcionava a la xarxa 4G del meu carrie. Hi ha una explicació per què

5.5 Després d’haver utilitzat aquest sistema durant un parell de setmanes, tot i que els vídeos són més còmodes de veure i penjar, Google Fotos funciona millor amb les imatges. Per exemple, permet que les coses / cares s'agrupen analitzant només imatges, i només llavors busqui cares / coses de les imatges dels vídeos, però no al contrari. Així que provaré imatges penjant més aviat vídeos.

Recomanat: