Cuprins:

Integrare Raspberry Pi Linux Motion Google Photos: 5 pași
Integrare Raspberry Pi Linux Motion Google Photos: 5 pași

Video: Integrare Raspberry Pi Linux Motion Google Photos: 5 pași

Video: Integrare Raspberry Pi Linux Motion Google Photos: 5 pași
Video: How To Build Your Own Security Camera: Part 3: Raspberry Pi Cameras with a DVR/NVR 2024, Noiembrie
Anonim
Integrare Raspberry Pi Linux Motion Google Photos
Integrare Raspberry Pi Linux Motion Google Photos

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

Configurați API-ul Google Photos pentru Python
Configurați API-ul Google Photos pentru Python
Configurați Google Photos API pentru Python
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

Opțional: configurați accesul web la camera de streaming în timp real
Opțional: configurați accesul web la camera de streaming în timp real
Opțional: configurați accesul web la camera de streaming în timp real
Opțional: configurați accesul web la camera de streaming în timp real
Opțional: configurați accesul web la camera de streaming în timp real
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: