Cuprins:
- Pasul 1: Instalați Linux Motion pe Raspberry
- Pasul 2: configurați Google Photos API pentru Python
- Pasul 3: Testează
- Pasul 4: Opțional: configurați accesul web la camera de streaming în timp real
- Pasul 5: Sfaturi
Video: Integrare Raspberry Pi Linux Motion Google Photos: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:43
Ideea este să încărcați fotografii și videoclipuri realizate cu camera activată prin mișcare conectată la Raspberry Pi pentru a încărca fișiere pe un nor. Software-ul „Motion” acceptă încărcarea pe Google Drive prin PyDrive. În acest articol, „Motion” este folosit pentru a încărca în Google Foto.
Hardware:
Raspberry Pi 3B +
Cameră web USB Logitech C920
Selecția hardware nu a fost determinată, am luat doar ceea ce era la îndemână.
Condiții preliminare:
Pentru comoditate, Raspberry pi ar trebui să se afle în rețeaua dvs. locală - pentru a o controla fără monitor / tastatură și pentru a încărca / descărca fișiere. Pentru aceasta ar trebui să aveți agent ssh pe computer (de ex. Chit).
Multe mulțumiri ssandbac pentru un tutorial excelent. Dacă aveți nevoie de mai multe informații despre cum să configurați mediul, consultați acest articol. Am împrumutat instalarea mișcării și configurarea pașilor din aceasta și am adăugat câteva modificări. În special, în loc să trimită prin e-mail fișiere și alerte, acest exemplu folosește încărcarea pe albumul partajat de fotografii Google și primește un fel de notificări de „fotografii adăugate” în bara de notificări.
Iată pașii:
Pasul 1: Instalați Linux Motion pe Raspberry
În special în acest exemplu a fost utilizată mișcarea v4.0.
1.1 Actualizare pi
pi @ raspberrypi: ~ $ sudo apt-get update
pi @ raspberrypi: ~ $ sudo apt-get upgrade
1.2 Descărcați mișcarea
pi @ raspberrypi: ~ $ sudo apt-get install motion
1.3 Acum editați acest fișier cu următoarele modificări
pi @ raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# Porniți în modul daemon (fundal) și eliberați terminalul (implicit: off)
daemon on
# Utilizați un fișier pentru a salva mesajele jurnalelor, dacă nu este definit stderr și se utilizează syslog. (implicit: nedefinit)
logfile /var/log/motion/motion.log
# Lățimea imaginii (pixeli). Interval valabil: dependent de cameră, implicit: 352
lățime 1920
# Înălțimea imaginii (pixeli). Interval valabil: dependent de cameră, implicit: 288
înălțime 1080
# Numărul maxim de cadre de captat pe secundă.
framerate 30
# Specifică numărul de imagini pre-capturate (tamponate) dinaintea mișcării
pre_capture 5
# Numărul de cadre de captat după mișcare nu mai este detectat
post_capture 5
# Afișați imagini „normale” atunci când este detectată mișcarea (implicit: activat)
output_pictures off
# Calitatea (în procente) care trebuie utilizată de compresia jpeg
calitate 100
# Folosiți ffmpeg pentru a codifica filme în timp real
ffmpeg_output_movies off
# sau intervalul 1 - 100 unde 1 înseamnă cea mai proastă calitate și 100 este cea mai bună.
ffmpeg_variable_bitrate 100
# Când creați videoclipuri, cadrele ar trebui duplicate în ordine
ffmpeg_duplicate_frames false
# Bool pentru a activa sau dezactiva extpipe (implicit: off)
use_extpipe on
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
# Comandă care trebuie executată la un fișier de film
; on_movie_end sudo python3 /var/lib/motion/photos.py% f.mp4 &
Lăsați-l pe ultimul cu punct și virgulă deocamdată (comentat) pentru a descomenta după ce vă asigurați că înregistrarea și încărcarea video funcționează.
1.4 Apoi schimbați
pi @ raspberrypi: ~ $ sudo nano / etc / default / motion
pi @ raspberrypi: ~ $ start_motion_daemon = da
Pasul 2: configurați Google Photos API pentru Python
2.1 Vă recomandăm să creați un cont nou în acest scop, pentru a partaja un album cu cel principal, pentru a primi notificări când sunt adăugate fișiere noi, plus mai mult spațiu de stocare. Activați Google Photos API pentru contul pe care îl veți folosi pentru încărcare.
Ar trebui să aveți fișier credentials.json după aceasta.
2.2 Configurarea mediului Python
Practic, configurarea mediului este necesară numai pentru zmeură. Dar necesită o autorizație specială, care este mai convenabilă de realizat pe PC. Pentru a face acest lucru pe raspberry, trebuie să conectați monitorul / tastatura la acesta sau să configurați o interfață de utilizare la distanță pentru desktop. Tocmai am instalat același mediu pe zmeură și pe ambele. Deci, etapele 2.2.1..2.2.3 au fost făcute pe PC, 2.2.1, 2.2.2, 2.2.5, 2.2.6 pe Rpi
2.2.1 instalați Python 3
2.2.2 Instalați pachetele google api conform manualului * (vezi 5.1)
Pe computer
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Pe zmeură
pi @ raspberrypi: ~ $ sudo pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
2.2.3 Verificați încărcarea scriptului pe fotografiile Google.. Este plasat pe github-ul meu. Puneți-l în același director cu credentials.json.
2.2.4 Faceți o fotografie și testați încărcarea
python3 photos.py image.jpg
Instalați dependențele lipsă dacă există și încercați din nou. Prin urmare, ar trebui să obțineți token.pickle în directorul scriptului și, de asemenea, un nou album partajat creat în interfața dvs. web Google Photos cu image.jpg. Pe măsură ce primiți token.pickle, nu mai aveți nevoie de credentials.json pentru photos.py în același director.
2.2.5 Distribuiți albumul contului cu privire la ceea ce doriți să primiți notificări pe noul suport media. Adăugați acest cont pe telefon.
2.2.6 Puneți photos.py și token.pickle în / var / lib / motion pe zmeură. Utilizatorul „pi” nu poate scrie în „direcțiile de mișcare”, așa că încărcați mai întâi în / home / pi
scp photos.py token.pickle pi @ IP: / home / pi
Apoi conectați-vă la raspberry și mutați fișierele sub sudo
ssh pi @ IP
pi @ raspberrypi: ~ $ sudo mv photos.py token.pickle / var / lib / motion
2.2.7 Verificați cum funcționează încărcarea pe zmeură. Faceți o fotografie cu fswebcam și încercați să o încărcați
pi @ raspberrypi: ~ $ sudo fswebcam /var/lib/motion/image.jpg
pi @ raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg
Ar putea fi image-j.webp
Pasul 3: Testează
3.1 Porniți serviciul Motion
pi @ raspberrypi: pornirea mișcării de serviciu ~ $ sudo
Puteți schimba comanda pentru a „opri” sau „reporniți”
3.2 Activați jurnalele de mișcare
pi @ raspberrypi: ~ $ tail -f /var/log/motion/motion.log
3.2 Vizualizați ieșirea camerei pe un alt dispozitiv conectat la aceeași rețea locală. Introduceți în browser:
IP: 8081
3.3 Privind jurnalele, așteptați până când mișcarea a fost detectată și fișierul NAME.mp4 este scris în / var / lib / motion. Apoi lansați manual încărcarea scriptului
pi @ raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4
Verificați urmele de piton. Așteptați până când event_end apare în mișcare.log. Apoi, accesați albumul „helloworld” din fotografiile dvs. Google și verificați dacă există un videoclip încărcat.
3.4 Dacă încărcarea reușește, descommentați în /etc/motion.conf linia:
pi @ raspberrypi: ~ $ sudo nano /etc/motion.conf
# Comandă care trebuie executată când un fișier de film este gata
on_movie_end sudo python3 /var/lib/motion/photos.py% f.mp4 &
pi @ raspberrypi: ~ $ sync
pi @ raspberrypi: repornirea mișcării de serviciu ~ $ sudo
3.5 Privind jurnalele de mișcare și în album verificați dacă videoclipul a fost încărcat automat.
3.6 Partajați opțional albumul cu contul dvs. principal pentru a primi notificări la adăugarea noului videoclip sau a fotografiei.
Pasul 4: Opțional: configurați accesul web la camera de streaming în timp real
Acest pas se bazează pe tutorialul lui Michel Parreno. Tocmai am ales FreeDNS în loc de NoIP așa cum se recomandă aici.
4.1 Configurați accesul autorizat la serverul de mișcare de streaming video:
pi @ raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# Setați metoda de autentificare (implicit: 0)
# 0 = dezactivat
# 1 = autentificare de bază
# 2 = MD5 digest (autentificarea mai sigură)
stream_auth_method 2
# Autentificare pentru flux. Sintaxă nume de utilizator: parolă
# Implicit: nedefinit (Dezactivat)
nume de utilizator webcontrol_authentication: parolă
# Framerate maximă pentru fluxuri de flux (implicit: 1)
stream_maxrate 30
# Restricționați conexiunile de flux numai la localhost (implicit: activat)
stream_localhost oprit
Dacă nu intenționați să utilizați interfața de control web din rețeaua externă, lăsați-o dezactivată (ca implicit)
# Limitați conexiunile de control numai la localhost (implicit: activat)
webcontrol_localhost activat
De asemenea, din moment ce zmeura este online, vă recomand să modificați parola implicită pentru zmeură
pi @ raspberrypi: ~ $ passwd
Deși portul ssh 22 nu este redirecționat către zmeură, totuși.
4.2 Accesați site-ul FreeDNS
4.3 Înscrieți-vă
4.4 Adăugați subdomeniu (Pentru membri -> Subdomenii)
4.5 Alegeți clientul DNS pe care să îl instalați pe Raspberry (Pentru membri -> DNS dinamic -> Resurse DNS sinnamice -> Clienți DNS dinamici)
Am ales wget_script update.sh de la Adam Dean (în partea de jos a paginii)
Există substituenți _YOURAPIKEYHERE_ și _YOURDOMAINHERE_. Pentru a le accesa, accesați (Pentru membri -> DNS dinamic)
Și în pagina de mai jos veți găsi exemple de scripturi cu APIKEY și DOMENIU (cel adăugat la 4.4). Am luat aceste valori din Wget Script și am înlocuit _YOURAPIKEYHERE_ și _YOURDOMAINHERE_ în update.sh
4.6 Apoi rulați update.sh pe zmeură. Poate necesita dnsutils pentru nslookup. Instalați-l atunci:
pi @ raspberrypi: ~ $ sudo apt-get dnsutils
4.7 Apoi configurați routerul pentru a redirecționa cererile externe ale lumii către portul 8081 către adresa IP a zmeurii
4.8 Rezervați IP-ul pentru MAC-ul dvs. de zmeură în setarea DHCP, astfel încât Rpi să aibă întotdeauna același IP
4.9 Apoi introduceți în browser pe un dispozitiv care nu este conectat la rețeaua locală:
domeniul tău: 8081
Introduceți acreditările pe care le-ați definit în motion.conf.
Testați cum funcționează videoclipul.
4.10 pentru a actualiza DDNS configurează automat sarcina cron. Vedeți quick_cron_example pe (Pentru membri -> DNS dinamic)
Pasul 5: Sfaturi
5.1 Fiți atent la instalarea pachetelor python pe zmeură. Am petrecut o zi depanând acest lucru - problema a fost că de pe consolă scriptul a funcționat bine, dar fiind apelat de la evenimentul de mișcare, apelul nu a funcționat. Ceea ce a agravat a fost că urmele din scenariu nu erau disponibile în acest din urmă caz.
Motivul a fost că, urmând ghidul, am instalat pachetele pentru utilizatorul „pi” (care implicit se află în directorul / home / pi și este restricționat pentru alți utilizatori), dar pentru a rula scriptul ca un copil al serviciului „mișcare” pachetele trebuie să fie disponibil și pentru utilizatorul „mișcare”. Așa că în cele din urmă l-am remediat instalând pachetele ca
sudo pip3 …
Acesta nu este un mod adecvat care funcționează în continuare. Instalarea fără sudo ca pip3 --system mi-a dat erori din anumite motive.
În mod corespunzător, scriptul este numit și sub sudo (vezi motion.conf).
În timpul acestei depanări, am făcut o mulțime de schimbări inutile și nu știu ce sunt necesare și acum prea leneș pentru a le întoarce în mod incremental și a vedea când nu mai funcționează. În special, drepturile de administrator de mișcare acordate:
pi @ raspberrypi: ~ $ grupează mișcarea
motion: motion adm sudo audio video users netdev pi
pi @ raspberrypi: ~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL = (ALL) NOPASSWD: ALL
mișcare ALL = (ALL) NOPASSWD: ALL
De asemenea, s-au schimbat proprietarii de fișiere și permisiunile similare cu încărcarea pe Google Drive. Probabil vă poate ajuta într-un caz în care aveți o problemă similară.
5.2 API-ul Google Photos vă permite să adăugați fișiere numai în albumele partajate, astfel încât oricine are linkul să îl poată accesa. Nu îl partajați prin link și ștergeți filme vechi sau mutați-le în coșul de gunoi sau din album. În ultimul caz, ele rămân în cont.
5.3 Asistentul Google Photos detectează fețele, ceea ce este destul de util dacă calitatea camerei este bună. Ca bonus, face ca mediile fanteziste să fie un fel de compilații și gif-uri etc.
5.4 Am încercat să folosesc modem USB 4G LTE pentru acces la internet și iată rezultatele mele. 5.4.1 Huawei E3372h-153 funcționează cu zmeură fără probleme și software suplimentar 5.4.2 De asemenea, a activat hotspot, astfel încât Rasperry a partajat conexiunea la internet prin wifi. Există https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ un ghid foarte ușor cum să o faci folosind RaspAP. 5.4.3 DNS-ul dinamic nu a funcționat în rețeaua 4G a carrie-ului meu. Există explicații de ce
5.5 După ce sa folosit acest sistem timp de câteva săptămâni, deși videoclipurile sunt mai convenabile pentru vizualizare și încărcare, Google Photos funcționează mai bine cu imaginile. De exemplu, permite gruparea lucrurilor / fețelor să analizeze numai imaginile și numai atunci să caute fețe / lucruri din imaginile din videoclipuri, dar nu opusul. Așa că voi testa imagini care încarcă mai degrabă videoclipuri.
Recomandat:
Deschidere ușă de garaj inteligentă DIY + Integrare asistent la domiciliu: 5 pași
Deschidere ușă ușoară pentru garaj DIY + Integrare asistent la domiciliu: Faceți ușoară ușa normală a garajului folosind acest proiect DIY. Îți voi arăta cum să-l construiești și să-l controlez folosind Home Assistant (prin MQTT) și să am capacitatea de a deschide și închide de la distanță ușa garajului. Voi folosi o placă ESP8266 numită Wemos
DIY Smart Doorbell: Cod, configurare și integrare HA: 7 pași (cu imagini)
DIY Smart Doorbell: Code, Setup and HA Integration: În acest proiect, vă voi arăta cum vă puteți transforma soneria normală într-una inteligentă fără a schimba funcționalitățile actuale sau a tăia orice fire. Voi folosi o placă ESP8266 numită Wemos D1 mini. Nou la ESP8266? Urmăriți-mi introdu
Sistem simplu de rezervare și stare Kicker cu integrare slabă: 12 pași (cu imagini)
Sistem simplu de rezervare a statutului și rezervării cu integrare slabă: într-o companie în care lucrez există o masă kicker. Compania ocupă multe etaje și pentru unii dintre angajați este nevoie de până la 3 minute pentru a ajunge la masă și … pentru a realiza că masa este deja ocupată
Controlul jaluzelelor cu ESP8266, integrare Google Home și Openhab și control web: 5 pași (cu imagini)
Controlul jaluzelelor Cu ESP8266, integrarea Google Home și Openhab și control web: În acest instructabil vă arăt cum am adăugat automatizarea jaluzelelor mele. Am vrut să pot adăuga și elimina automatizarea, așa că toată instalarea este fixată. Părțile principale sunt: Motor pas cu pas Driver controlat pas cu pas ESP-01 Gear și montare
Banda LED 12v controlată prin Wifi folosind Raspberry Pi cu Tasker, integrare Ifttt .: 15 pași (cu imagini)
Banda LED 12v controlată Wifi folosind Raspberry Pi cu Tasker, integrare Ifttt. folosesc un Raspberry Pi 1 Model B +) 1x RGB 12v Le