Taula de continguts:
- Pas 1: instal·leu Linux Motion a Raspberry
- Pas 2: configureu l'API de Google Photos per a Python
- Pas 3: prova
- Pas 4: opcional: configureu l'accés web a la càmera de transmissió en temps real
- Pas 5: consells
Vídeo: Integració de Google Photos amb Raspberry Pi Linux Motion: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
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
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
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:
Sistema senzill d'estat i reserva de Kicker amb integració Slack: 12 passos (amb imatges)
Sistema simple de reserva i estat de Kicker amb integració Slack: en una empresa on treballo hi ha una taula de kickers. L’empresa ocupa moltes plantes i per a alguns dels empleats triga fins a 3 minuts a arribar a la taula i … adonar-se que la taula ja està ocupada. Per tant, va sorgir la idea de construir un ki
Control de persianes amb ESP8266, integració de Google Home i Openhab i control web: 5 passos (amb imatges)
Control de persianes amb ESP8266, integració de Google Home i Openhab i control web: en aquest instructiu us mostro com he afegit automatització a les meves persianes. Volia poder afegir i eliminar l’automatització, de manera que tota la instal·lació és fixa. Les parts principals són: Motor pas a pas Controlador pas a pas controlat per ESP-01 Engranatge i muntatge
Plataforma d'integració Ubidots amb LOGO! Siemens amb Node-RED: 13 passos
Plataforma d'integració Ubidots amb LOGO! Siemens utilitzant Node-RED: apDes de fa algunes setmanes he fet algunes proves amb un LOGO! (mòdul lògic) de Siemens, fa uns mesos que veig que l’utilitzen en aplicacions industrials bàsiques, tot i que personalment no el considero 100% un PLC, s’integra fàcilment a mon
Sensor de porta alimentat per bateria amb integració domòtica, WiFi i ESP-NOW: 5 passos (amb imatges)
Sensor de porta alimentat per bateria amb integració domòtica, WiFi i ESP-NOW: en aquest instructiu us mostro com he fabricat un sensor de porta alimentat per bateria amb integració domòtica. He vist alguns altres sensors i sistemes d'alarma agradables, però volia fer-ne jo mateix. Els meus objectius: un sensor que detecta i informa d'un doo
Tira LED de 12v controlada per Wifi mitjançant Raspberry Pi amb Tasker, integració Ifttt .: 15 passos (amb imatges)
Cinta de 12v controlada per Wifi mitjançant Raspberry Pi amb Tasker, integració Ifttt. estic fent servir un Raspberry Pi 1 Model B +) 1x RGB 12v Le