Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
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
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
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.