Raspberry Pi Linux Motion Google Photos Integration: 5 steg
Raspberry Pi Linux Motion Google Photos Integration: 5 steg
Anonim
Raspberry Pi Linux Motion Google Photos Integration
Raspberry Pi Linux Motion Google Photos Integration

Tanken är att ladda upp foton och videor gjorda med rörelseaktiverad kamera ansluten till Raspberry Pi för att ladda upp filer till ett moln. "Motion" -programvara stöder uppladdning till Google Drive via PyDrive. I denna artikel används 'Motion' för att ladda upp till Google Foto.

Hårdvara:

Raspberry Pi 3B+

USB -webbkamera Logitech C920

Maskinvaruvalet bestämdes inte, jag tog bara det som fanns till hands.

Förkunskaper:

För enkelhets skull bör Raspberry pi finnas i ditt lokala nätverk - för att styra det utan bildskärm/tangentbord och ladda upp/ladda ner filer. För detta bör du ha ssh -agent på din dator (t.ex. kitt).

Stort tack till ssandbac för en bra handledning. Om du behöver mer information om hur du ställer in miljö, kolla in den här artikeln. Jag lånade rörelseinstallation och konfigurerade steg från den och lade till några ändringar. I synnerhet, i stället för att skicka filer och varningar via e -post, använder det här exemplet uppladdning till delat album på Google Photos och få aviseringar som "lagt till foton" i aviseringsfältet.

Här är stegen:

Steg 1: Installera Linux Motion på Raspberry

Särskilt i detta exempel användes motion v4.0.

1.1 Uppdatera pi

pi@raspberrypi: ~ $ sudo apt-get update

pi@raspberrypi: ~ $ sudo apt-get upgrade

1.2 Ladda ner rörelse

pi@raspberrypi: ~ $ sudo apt-get installera rörelse

1.3 Redigera nu den här filen med följande ändringar

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

# Starta i demon (bakgrund) och släpp terminal (standard: av)

demon på

# Använd en fil för att spara loggmeddelanden, om inte definierad stderr och syslog används. (standard: inte definierat)

logfile /var/log/motion/motion.log

# Bildbredd (pixlar). Giltigt intervall: Kameraberoende, standard: 352

bredd 1920

# Bildhöjd (pixlar). Giltigt intervall: Kameraberoende, standard: 288

höjd 1080

# Maximalt antal bilder som ska fångas per sekund.

framerate 30

# Anger antalet förfångade (buffrade) bilder från före rörelse

pre_capture 5

# Antal bilder som ska tas efter rörelse detekteras inte längre

post_capture 5

# Mata ut "normala" bilder när rörelse detekteras (standard: på)

output_pictures av

# Kvaliteten (i procent) som ska användas vid jpeg -komprimering

kvalitet 100

# Använd ffmpeg för att koda filmer i realtid

ffmpeg_output_movies av

# eller intervallet 1 - 100 där 1 betyder sämsta kvalitet och 100 är bäst.

ffmpeg_variable_bitrate 100

# När du skapar videor ska ramar kopieras i ordning

ffmpeg_duplicate_frames false

# Bool för att aktivera eller inaktivera 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 ska utföras när en filmfil

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

Lämna det sista med semikolon för tillfället (kommenterat) i kommentarsfält efter att du har säkerställt att videoinspelning och uppladdning fungerar.

1.4 Ändra sedan

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

pi@raspberrypi: ~ $ start_motion_daemon = ja

Steg 2: Konfigurera Google Foto API för Python

Konfigurera Google Foto API för Python
Konfigurera Google Foto API för Python
Konfigurera Google Foto API för Python
Konfigurera Google Foto API för Python

2.1 Rekommenderas att skapa ett nytt konto för detta ändamål för att dela ett album med ditt huvudsakliga för att få aviseringar när nya filer läggs till, plus mer lagringsutrymme. Aktivera Google Foto API för det konto du ska använda för uppladdning.

Du bör ha credentials.json -fil efter detta.

2.2 Inställning av Python -miljö

I princip krävs miljöinställningar endast på hallon. Men det kräver oauth -auktorisering som är bekvämare att utföra på PC. För att göra detta på hallon måste du ansluta bildskärmen/tangentbordet till den eller ställa in ett gränssnitt för fjärrskrivbord. Jag har precis installerat samma miljö på både hallon och PC. Så stegen 2.2.1..2.2.3 gjordes på PC, 2.2.1, 2.2.2, 2.2.5, 2.2.6 på Rpi

2.2.1 installera Python 3

2.2.2 Installera google api -paket enligt manual*(se 5.1)

På PC

pip3 installera-uppgradera google-api-python-klient google-auth-httplib2 google-auth-oauthlib

På hallon

pi@raspberrypi: ~ $ sudo pip3 installera-uppgradera google-api-python-klient google-auth-httplib2 google-auth-oauthlib

2.2.3 Kolla in skriptuppladdning till google -foton.. Det placeras på min github. Lägg den i samma katalog med credentials.json.

2.2.4 Ta en bild och testa att ladda upp

python3 photos.py image.jpg

Installera saknade beroenden om det finns och försök igen. Som ett resultat bör du få token.pickle i skriptkatalogen och även ett nytt delat album skapat i ditt Google Foto -webbgränssnitt med image.jpg. När du får token.pickle behöver du inte credentials.json för photos.py i samma katalog längre.

2.2.5 Dela albumet med kontot om vad du vill att meddelanden om nya medier ska läggas till. Lägg till det här kontot i din telefon.

2.2.6 Lägg photos.py och token.pickle i/var/lib/motion på hallon. "Pi" -användaren kan inte skriva till "motionens dir's", så ladda upp till /home /pi först

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

Logga sedan in på hallon och flytta filerna under sudo

ssh pi@IP

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

2.2.7 Kontrollera hur uppladdning fungerar på hallon. Ta en bild med fswebcam och försök ladda upp den

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

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

Det borde finnas image-j.webp

Steg 3: Testa

3.1 Starta rörelsestjänst

pi@raspberrypi: ~ $ sudo service motion start

Du kan ändra kommandot till "stopp" eller "starta om"

3.2 Aktivera rörelseloggar

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

3.2 Visa kamerautmatningen på en annan enhet som är ansluten till samma lokala nätverk. Ange i webbläsaren:

IP: 8081

3.3 Att titta på loggarna väntar tills rörelsen upptäcks och filen NAME.mp4 skrivs i/var/lib/motion. Starta sedan uppladdningsskriptet manuellt

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

Kontrollera pythonspåren. Vänta tills event_end visas i motion.log. Gå sedan till albumet "helloworld" i dina google -foton och kontrollera om det finns någon video som laddas upp.

3.4 Om överföringen lyckas, kommenterar du inte i /etc/motion.conf:

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

# Kommando som ska utföras när en filmfil är klar

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

pi@raspberrypi: ~ $ sync

pi@raspberrypi: ~ $ sudo service motion restart

3.5 Titta på rörelseloggarna och i albumet kontrollera om videon laddades upp automatiskt.

3.6 Dela eventuellt albumet med ditt huvudkonto för att få avisering när den nya videon eller fotot läggs till.

Steg 4: Valfritt: Konfigurera webbåtkomst till realtidskamera

Valfritt: Konfigurera webbåtkomst till realtidskamera
Valfritt: Konfigurera webbåtkomst till realtidskamera
Valfritt: Konfigurera webbåtkomst till realtidskamera
Valfritt: Konfigurera webbåtkomst till realtidskamera
Valfritt: Konfigurera webbåtkomst till realtidskamera
Valfritt: Konfigurera webbåtkomst till realtidskamera

Detta steg är baserat på Michels Parreno -handledning. Jag valde precis FreeDNS istället för NoIP som rekommenderas här.

4.1 Konfigurera auktoriserad åtkomst till videoströmningsserver:

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

# Ange autentiseringsmetod (standard: 0)

# 0 = inaktiverad

# 1 = Grundläggande autentisering

# 2 = MD5 -sammanfattning (säkrare autentisering)

stream_auth_method 2

# Autentisering för strömmen. Syntax användarnamn: lösenord

# Standard: ej definierad (inaktiverad)

webcontrol_authentication användarnamn: lösenord

# Högsta framerate för strömflöden (standard: 1)

stream_maxrate 30

# Begränsa strömanslutningar till endast localhost (standard: på)

stream_localhost avstängd

Om du inte kommer att använda webbkontrollgränssnitt från externt nätverk, lämna det inaktiverat (som standard)

# Begränsa kontrollanslutningarna till endast localhost (standard: på)

webcontrol_localhost på

Eftersom hallon går online, rekommenderar jag också att ändra standard hallon lösenord

pi@raspberrypi: ~ $ passwd

Även om ssh -port 22 inte omdirigeras till hallon, ändå.

4.2 Gå till FreeDNS -webbplatsen

4.3 Registrera dig

4.4 Lägg till underdomän (För medlemmar -> Underdomäner)

4.5 Välj DNS -klient att installera på Raspberry (För medlemmar -> Dynamisk DNS -> Synamiska DNS -resurser -> Dynamiska DNS -klienter)

Jag valde wget_script update.sh från Adam Dean (längst ner på sidan)

Det finns platshållare _YOURAPIKEYHERE_ och _YOURDOMAINHERE_. För att få dem gå till (För medlemmar -> Dynamisk DNS)

Och på sidan nedan hittar du exempel på skript med din APIKEY och DOMAIN (den som läggs till i 4.4). Jag tog dessa värden från Wget Script och ersatte _YOURAPIKEYHERE_ och _YOURDOMAINHERE_ i update.sh

4.6 Kör sedan update.sh på hallon. Det kan kräva dnsutils för nslookup. Installera det då:

pi@raspberrypi: ~ $ sudo apt-get dnsutils

4.7 Konfigurera sedan din router för att omdirigera externa världsförfrågningar till 8081 -porten till hallonets ip

4.8 Reservera IP: n för din hallons MAC i DHCP -inställning så att Rpi alltid kommer att ha samma IP

4.9 Gå sedan in i webbläsaren på en enhet som inte är ansluten till det lokala nätverket:

din domän: 8081

Ange dina referenser som du definierade i motion.conf.

Testa hur videon fungerar.

4.10 för att uppdatera DDNS automatiskt konfigurera cron -uppgift. Se quick_cron_example på (för medlemmar -> dynamisk DNS)

Steg 5: Tips

5.1 Var uppmärksam på att installera pythonpaket på hallon. Jag tillbringade en dag med att felsöka detta - problemet var att skriptet från konsolen gick bra, men det blev inte uppringt från återkoppling från rörelsehändelser. Vad som gjorde det värre var att spår från manuset inte var tillgängliga i det senare fallet.

Anledningen var att efter guiden installerade jag paketen för "pi" -användare (som standard är i /home /pi -katalogen och begränsad för andra användare) men för att köra skriptet som ett under "rörelse" -tjänsten måste paketen vara tillgänglig för "rörelse" användare också. Så äntligen fixade jag det med att installera paketen som

sudo pip3 …

Detta är inte ett riktigt sätt som fortfarande fungerar. Installation utan sudo som pip3 --system gav mig fel av någon anledning.

På motsvarande sätt kallas manuset också under sudo (se motion.conf).

Under denna felsökning gjorde jag många onödiga ändringar och inte säker på vad som är nödvändigt och nu för lat för att rulla tillbaka dem stegvis och se när det slutar fungera. Särskilt beviljade rörelseadministratörsrättigheter:

pi@raspberrypi: ~ $ grupper rörelse

motion: motion adm sudo ljudvideoanvändare netdev pi

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

pi ALL = (ALL) NOPASSWD: ALL

rörelse ALL = (ALL) NOPASSWD: ALL

Ändrade också filägare och behörigheter som liknar uppladdning till Google Drive. Förmodligen kan det hjälpa dig om du har ett liknande problem.

5.2 Med Google Photos API kan du bara lägga till filer i delade album så att alla med länken kan komma åt det. Dela den inte genom att länka och ta bort gamla filmer eller flytta dem till papperskorgen eller från album. I senare fall finns de kvar på kontot.

5.3 Google fotoassistent upptäcker ansikten, vilket är ganska användbart om kamerakvaliteten är bra. Som en bonus gör det snygga media, sammanställningar och gifs etc.

5.4 Jag försökte använda 4G LTE USB-modem för internetåtkomst och här är mina resultat 5.4.4.1 Huawei E3372h-153 fungerar med hallon utan problem och extra programvara 5.4.2 Även aktiverad hotspot så Rasperry delade internetanslutning via wifi. Det finns https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ en riktigt enkel guide hur man gör det med RaspAP. 5.4.3 Dynamisk DNS fungerade inte i 4G -nätverket för min carrie. Det finns en förklaring till varför

5.5 Efter att ha använt detta system i ett par veckor visade det sig, även om videor är bekvämare att se och ladda upp, fungerar Google Foto bättre med bilder. Exempelvis gör det möjligt för saker/ansikten att gruppera analyserande bilder, och först då leta efter ansikten/saker från bilderna i videor, men inte tvärtom. Så jag ska testa bilder som laddar upp snarare videor.