Innholdsfortegnelse:
- Trinn 1: Installer Linux Motion på Raspberry
- Trinn 2: Konfigurer Google Foto -API for Python
- Trinn 3: Test
- Trinn 4: Valgfritt: Konfigurer nettilgang til sanntidskamera
- Trinn 5: Tips
Video: Raspberry Pi Linux Motion Google Photos Integrasjon: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
Tanken er å laste opp bilder og videoer laget med bevegelsesaktivert kamera koblet til Raspberry Pi for å laste opp filer til en sky. "Motion" -programvare støtter opplasting til Google Drive via PyDrive. I denne artikkelen brukes 'Motion' for å laste opp til Google Foto.
Maskinvare:
Bringebær Pi 3B+
USB -webkamera Logitech C920
Maskinvarevalg var ikke bestemt, jeg tok bare det som var tilgjengelig.
Forutsetninger:
For enkelhets skyld bør Raspberry pi være i ditt lokale nettverk - for å kontrollere den uten skjerm/tastatur og laste opp/laste ned filer. For dette bør du ha ssh -agent på PCen (f.eks. Kitt).
Tusen takk til ssandbac for en flott opplæring. Hvis du trenger mer informasjon om hvordan du konfigurerer miljøet, kan du lese denne artikkelen. Jeg lånte bevegelsesinstallasjon og konfigurerte trinn fra den og la til noen endringer. Spesielt, i stedet for å sende filer og varsler via e -post, bruker dette eksemplet opplasting til et delt fotoalbum for Google Photos og få varsler som "lagt til bilder" i varslingslinjen.
Her er trinnene:
Trinn 1: Installer Linux Motion på Raspberry
Spesielt i dette eksemplet ble det brukt motion v4.0.
1.1 Oppdater pi
pi@raspberrypi: ~ $ sudo apt-get oppdatering
pi@raspberrypi: ~ $ sudo apt-get upgrade
1.2 Last ned bevegelse
pi@raspberrypi: ~ $ sudo apt-get install bevegelse
1.3 Rediger denne filen med følgende endringer
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# Start i demon (bakgrunns) modus og slipp terminal (standard: av)
demon på
# Bruk en fil for å lagre loggmeldinger, hvis ikke definert stderr og syslog brukes. (standard: ikke definert)
logfile /var/log/motion/motion.log
# Bildebredde (piksler). Gyldig rekkevidde: Kameravhengig, standard: 352
bredde 1920
# Bildehøyde (piksler). Gyldig rekkevidde: Kameravhengig, standard: 288
høyde 1080
# Maksimalt antall bilder som skal tas i sekundet.
framerate 30
# Spesifiserer antall forhåndsfangede (bufrede) bilder fra før bevegelse
pre_capture 5
# Antall bilder som skal tas etter bevegelse oppdages ikke lenger
post_capture 5
# Send ut "normale" bilder når bevegelse oppdages (standard: på)
output_pictures off
# Kvaliteten (i prosent) som skal brukes av jpeg -komprimeringen
kvalitet 100
# Bruk ffmpeg til å kode filmer i sanntid
ffmpeg_output_movies av
# eller området 1 - 100 hvor 1 betyr dårligste kvalitet og 100 er best.
ffmpeg_variable_bitrate 100
# Når du lager videoer, bør rammer kopieres i rekkefølge
ffmpeg_duplicate_frames false
# Bool for å aktivere eller deaktivere extpipe (standard: av)
use_extpipe på
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
# Kommando som skal utføres når en filmfil
; on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
La den siste med semikolon foreløpig (kommentert) stå uten å kommentere etter at du har sørget for at videoopptak og opplasting fungerer.
1.4 Endre deretter
pi@raspberrypi: ~ $ sudo nano/etc/default/motion
pi@raspberrypi: ~ $ start_motion_daemon = ja
Trinn 2: Konfigurer Google Foto -API for Python
2.1 Anbefales for å opprette en ny konto for dette formålet for å dele et album med det viktigste for å få varsler når nye filer legges til, pluss mer lagringsplass. Aktiver Google Foto API for kontoen du skal bruke til opplasting.
Du bør ha credentials.json -filen etter dette.
2.2 Oppsett av Python -miljø
I utgangspunktet kreves miljøoppsettet bare på bringebær. Men det krever autorisasjon som er mer praktisk å utføre på PC. For å gjøre dette på bringebær må du koble skjerm/tastatur til det eller sette opp et eksternt skrivebord -brukergrensesnitt. Jeg har nettopp installert det samme miljøet på bringebær og PC begge. Så trinnene 2.2.1..2.2.3 ble utført på PC, 2.2.1, 2.2.2, 2.2.5, 2.2.6 på Rpi
2.2.1 installere Python 3
2.2.2 Installer google api -pakker i henhold til manual*(se 5.1)
På PC
pip3 install-oppgrader google-api-python-klient google-auth-httplib2 google-auth-oauthlib
På bringebær
pi@raspberrypi: ~ $ sudo pip3 install-oppgrader google-api-python-klient google-auth-httplib2 google-auth-oauthlib
2.2.3 Sjekk opplasting av skript til google -bilder.. Det er plassert på min github. Sett den inn i den samme katalogen med credentials.json.
2.2.4 Ta et bilde og testopplasting
python3 photos.py image.jpg
Installer manglende avhengigheter hvis det er det, og prøv igjen. Som et resultat bør du få token.pickle i skriptkatalogen og også et nytt delt album opprettet i Google Foto -nettgrensesnittet med image.jpg. Når du får token.pickle trenger du ikke credentials.json for photos.py i samme katalog lenger.
2.2.5 Del albumet med kontoen om hva du vil at varsler om nye medier skal legges til. Legg denne kontoen til telefonen din.
2.2.6 Legg photos.py og token.pickle i/var/lib/motion på bringebær. 'Pi' bruker kan ikke skrive til 'motion's dir's, så last opp til /home /pi først
scp photos.py token.pickle pi@IP:/home/pi
Logg deretter på bringebær og flytt filene under sudo
ssh pi@IP
pi@raspberrypi: ~ $ sudo mv photos.py token.pickle/var/lib/motion
2.2.7 Sjekk hvordan opplasting fungerer på bringebær. Ta et bilde med fswebcam og prøv å laste det opp
pi@raspberrypi: ~ $ sudo fswebcam /var/lib/motion/image.jpg
pi@raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg
Det skulle være image-j.webp
Trinn 3: Test
3.1 Start bevegelsestjenesten
pi@raspberrypi: ~ $ sudo service motion start
Du kan endre kommandoen til "stopp" eller "start på nytt"
3.2 Aktiver bevegelseslogger
pi@raspberrypi: ~ $ tail -f /var/log/motion/motion.log
3.2 Se kamerautgangen på en annen enhet som er koblet til det samme lokale nettverket. Skriv inn i nettleseren:
IP: 8081
3.3 Når du ser på loggene, vent til bevegelsen oppdages og filen NAME.mp4 skrives i/var/lib/motion. Start deretter opplastingsskriptet manuelt
pi@raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4
Sjekk pytonsporene. Vent til event_end vises i motion.log. Gå deretter til “helloworld” -albumet i google -bildene dine og sjekk om det er lastet opp en video.
3.4 Hvis opplastingen lykkes, uncomment i /etc/motion.conf linjen:
pi@raspberrypi: ~ $ sudo nano /etc/motion.conf
# Kommando som skal utføres når en filmfil er klar
on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
pi@raspberrypi: ~ $ sync
pi@raspberrypi: ~ $ sudo service motion restart
3.5 Se på bevegelsesloggene og i albumet, sjekk om videoen lastes opp automatisk.
3.6 Du kan eventuelt dele albumet med hovedkontoen din for å få varsel når den nye videoen eller bildet legges til.
Trinn 4: Valgfritt: Konfigurer nettilgang til sanntidskamera
Dette trinnet er basert på Michels Parreno -opplæring. Jeg valgte nettopp FreeDNS i stedet for NoIP som anbefalt her.
4.1 Konfigurer autorisert tilgang til videostreaming bevegelsesserver:
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# Angi godkjenningsmetoden (standard: 0)
# 0 = deaktivert
# 1 = Grunnleggende autentisering
# 2 = MD5 -fordeling (den sikrere autentiseringen)
stream_auth_method 2
# Autentisering for strømmen. Syntaks brukernavn: passord
# Standard: ikke definert (deaktivert)
webcontrol_authentication brukernavn: passord
# Maksimal framerate for strømmer (standard: 1)
stream_maxrate 30
# Begrens strømtilkoblinger til bare localhost (standard: på)
stream_localhost av
Hvis du ikke skal bruke webkontrollgrensesnitt fra eksternt nettverk, la det være deaktivert (som standard)
# Begrens kontrolltilkoblinger til bare localhost (standard: på)
webcontrol_localhost på
Siden bringebær går på nettet, anbefaler jeg også å endre standard bringebærpassord
pi@raspberrypi: ~ $ passwd
Selv om ssh -port 22 ikke blir omdirigert til bringebæret, er det fortsatt.
4.2 Gå til FreeDNS -området
4.3 Registrer deg
4.4 Legg til underdomen (for medlemmer -> underdomener)
4.5 Velg DNS -klienten du vil installere på Raspberry (For medlemmer -> Dynamisk DNS -> Synamiske DNS -ressurser -> Dynamiske DNS -klienter)
Jeg valgte wget_script update.sh fra Adam Dean (nederst på siden)
Det er plassholdere _YOURAPIKEYHERE_ og _YOURDOMAINHERE_. For å få dem gå til (For medlemmer -> Dynamisk DNS)
Og på siden nedenfor finner du eksempler på skript med APIKEY og DOMAIN (det som er lagt til i 4.4). Jeg tok disse verdiene fra Wget Script og erstattet _YOURAPIKEYHERE_ og _YOURDOMAINHERE_ i update.sh
4.6 Kjør deretter update.sh på bringebær. Det kan kreve dnsutils for nslookup. Installer det da:
pi@raspberrypi: ~ $ sudo apt-get dnsutils
4.7 Konfigurer deretter ruteren til å omdirigere eksterne forespørsler til 8081 -porten til bringebærets ip
4.8 Reserver ip for bringebærets MAC i DHCP -innstilling, slik at Rpi alltid vil ha samme ip
4.9 Gå deretter inn i nettleseren på en enhet som ikke er koblet til det lokale nettverket:
domenet ditt: 8081
Skriv inn legitimasjonen din som du definerte i motion.conf.
Test hvordan videoen fungerer.
4.10 for å oppdatere DDNS automatisk oppsett av cron -oppgave. Se quick_cron_example på (for medlemmer -> dynamisk DNS)
Trinn 5: Tips
5.1 Vær oppmerksom på å installere pythonpakker på bringebær. Jeg brukte en dag på å feilsøke dette - problemet var at skriptet fra konsollen kjørte bra, men det ble ikke ringt fra tilbakeringing av bevegelseshendelse. Det som gjorde det verre var at spor fra manuset ikke var tilgjengelige i sistnevnte tilfelle.
Årsaken var at jeg fulgte veiledningen og installerte pakkene for 'pi' -bruker (som som standard er i /home /pi -katalogen og begrenset for andre brukere), men for å kjøre skriptet som et barn av 'motion' -tjenesten må pakkene være tilgjengelig også for 'bevegelse' -bruker. Så endelig fikset jeg det ved å installere pakkene som
sudo pip3 …
Dette er ikke en skikkelig måte som fortsatt fungerer. Installasjon uten sudo som pip3 -system ga meg feil av en eller annen grunn.
Tilsvarende kalles skriptet også under sudo (se motion.conf).
Under denne feilsøkingen gjorde jeg mange unødvendige endringer og ikke sikker på hva som er nødvendig og nå for lat til å rulle dem trinnvis tilbake og se når det slutter å fungere. Spesielt innvilget bevegelsesadministratorrettigheter:
pi@raspberrypi: ~ $ grupper bevegelse
motion: motion adm sudo lydvideobrukere netdev pi
pi@raspberrypi: ~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL = (ALL) NOPASSWD: ALL
bevegelse ALL = (ALL) NOPASSWD: ALL
Endret også fileiere og tillatelser som ligner på opplasting til Google Disk. Sannsynligvis kan det hjelpe deg i et tilfelle du har et lignende problem.
5.2 Med Google Photos API kan du bare legge til filer i delte album, slik at alle med koblingen kan få tilgang til det. Ikke del den ved å lenke og slett gamle filmer eller flytt dem til papirkurven eller fra albumet. I sistnevnte tilfelle forblir de på kontoen.
5.3 Google fotoassistent oppdager ansikter, noe som er ganske nyttig hvis kamerakvaliteten er god. Som en bonus lager den flotte mediasorteringer, samlinger og-g.webp
5.4 Jeg prøvde å bruke 4G LTE USB-modem for internettilgang, og her er resultatene mine Huawei E3372h-153 fungerer med bringebær uten problemer og ekstra programvare 5.4.2 Også aktivert hotspot slik at Rasperry delte internettforbindelse via wifi. Det er https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ en veldig enkel guide til hvordan du gjør det ved hjelp av RaspAP. 5.4.3 Dynamisk DNS fungerte ikke i 4G -nettverket til min carrie. Det er forklaring på hvorfor
5.5 Etter å ha brukt dette systemet i et par uker viste det seg, selv om videoer er mer praktiske å se og laste opp, fungerer Google Foto bedre med bilder. F.eks. Gjør det mulig for ting/ansikter å gruppere bare analysere bilder, og først da lete etter ansikter/ting fra bildene i videoer, men ikke det motsatte. Så jeg skal teste bilder som laster opp videoer.
Anbefalt:
DIY Smart dørklokke: kode, oppsett og HA -integrasjon: 7 trinn (med bilder)
DIY Smart Doorbell: Code, Setup and HA Integration: I dette prosjektet vil jeg vise deg hvordan du kan forvandle din normale dørklokke til en smart uten å endre noen av de nåværende funksjonene eller kutte ledninger. Jeg bruker et ESP8266 -kort som heter Wemos D1 mini. Ny til ESP8266? Se introduksjonen min
Enkel kickerstatus og reservasjonssystem med slakk integrasjon: 12 trinn (med bilder)
Enkel kickerstatus og reservasjonssystem med slakk integrasjon: I et selskap der jeg jobber er det et kickerbord. Selskapet har mange etasjer, og for noen av de ansatte tar det opptil 3 minutter å komme til bordet og … å innse at bordet allerede er okkupert. Derfor oppstod det en idé om å bygge et ki
3D -trykt skulderpanser EL Wire -integrasjon: 5 trinn
3D Printed Shoulder Armor EL Wire Integration: Jeg 3D trykte en skulderpanser og integrert EL wire i den. Du kan bruke denne teknikken for tegn i tegneserier
Wifi -kontrollert 12v LED -stripe ved hjelp av Raspberry Pi med Tasker, Ifttt -integrasjon .: 15 trinn (med bilder)
Wifi -kontrollert 12v LED -stripe ved hjelp av Raspberry Pi With Tasker, Ifttt Integration .: I dette prosjektet vil jeg vise deg hvordan du kan kontrollere en enkel 12v analog led -stripe over wifi ved hjelp av en bringebærpi. For dette prosjektet trenger du: 1x Raspberry Pi (I bruker en Raspberry Pi 1 Model B+) 1x RGB 12v Le
Arduino og Apple HomeKit -integrasjon - Kontroller hjemmet ditt fra Siri! IoT er her: 6 trinn
Arduino og Apple HomeKit -integrasjon - Kontroller hjemmet ditt fra Siri! IoT er her: Denne instruksen gir deg en rask og enkel måte å legge et arduino -kort til Apples HomeKit på en iOS -enhet. Det åpner opp alle slags muligheter, inkludert skript som kjører på serveren, kombinert med Apples HomeKit " Scenes ", det gjør