Inhoudsopgave:
- Stap 1: Installeer Linux Motion op Raspberry
- Stap 2: Stel Google Foto's API in voor Python
- Stap 3: Testen
- Stap 4: Optioneel: webtoegang configureren voor realtime streamingcamera
- Stap 5: Tips
Video: Raspberry Pi Linux Motion Google Photos-integratie: 5 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Het idee is om foto's en video's te uploaden die zijn gemaakt met een door beweging geactiveerde camera die is aangesloten op Raspberry Pi om bestanden naar een cloud te uploaden. 'Motion'-software ondersteunt uploaden naar Google Drive via PyDrive. In dit artikel wordt 'Motion' gebruikt om te uploaden naar Google Foto's.
Hardware:
Raspberry Pi 3B+
USB-webcam Logitech C920
Hardware selectie was niet bepaald, ik nam gewoon wat bij de hand was.
Vereisten:
Voor het gemak moet de Raspberry pi in uw lokale netwerk zitten - om hem te bedienen zonder monitor/toetsenbord en upload/download bestanden. Hiervoor moet je ssh agent op je pc hebben staan (bijv. putty).
Veel dank aan sanddbac voor een geweldige tutorial. Als je meer informatie nodig hebt over het instellen van de omgeving, bekijk dan dit artikel. Ik leende bewegingsinstallatie en configuratiestappen ervan en voegde enkele wijzigingen toe. In plaats van bestanden en waarschuwingen te e-mailen, gebruikt dit voorbeeld in het bijzonder uploaden naar het gedeelde album van Google Photos en ontvang je meldingen in de vorm van "toegevoegde foto's" in de meldingsbalk.
Dit zijn de stappen:
Stap 1: Installeer Linux Motion op Raspberry
Vooral in dit voorbeeld werd motion v4.0 gebruikt.
1.1 Update foto
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get upgrade
1.2 Beweging downloaden
pi@raspberrypi:~ $ sudo apt-get install motion
1.3 Bewerk nu dit bestand met de volgende wijzigingen:
pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf
# Start in daemon (achtergrond) modus en laat terminal los (standaard: uit)
daemon aan
# Gebruik een bestand om logberichten op te slaan, indien niet gedefinieerd, wordt stderr en syslog gebruikt. (standaard: niet gedefinieerd)
logbestand /var/log/motion/motion.log
# Afbeeldingsbreedte (pixels). Geldig bereik: Camera-afhankelijk, standaard: 352
breedte 1920
# Beeldhoogte (pixels). Geldig bereik: Camera-afhankelijk, standaard: 288
hoogte 1080
# Maximaal aantal frames dat per seconde kan worden vastgelegd.
framerate 30
# Specificeert het aantal vooraf vastgelegde (gebufferde) foto's van vóór beweging
pre_capture 5
# Aantal frames dat moet worden vastgelegd nadat er geen beweging meer is gedetecteerd
post_capture 5
# Voer 'normale' beelden uit wanneer beweging wordt gedetecteerd (standaard: aan)
output_pictures uit
# De kwaliteit (in procenten) die moet worden gebruikt door de jpeg-compressie
kwaliteit 100
# Gebruik ffmpeg om films in realtime te coderen
ffmpeg_output_movies uit
# of het bereik 1 - 100 waarbij 1 de slechtste kwaliteit betekent en 100 de beste.
ffmpeg_variable_bitrate 100
# Moeten bij het maken van video's frames op volgorde worden gedupliceerd
ffmpeg_duplicate_frames false
# Bool om extpipe in of uit te schakelen (standaard: uit)
use_extpipe aan
extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx%h -framerate %fps -i pipe:0 -vcodec libx264 -preset ultrasnel -f mp4 %f.mp4
target_dir /var/lib/motion
# Opdracht die moet worden uitgevoerd bij een filmbestand
; on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
Laat de laatste voorlopig met een puntkomma (gecommentarieerd) om commentaar te verwijderen nadat je ervoor hebt gezorgd dat video-opname en uploaden werkt.
1.4 Verander dan
pi@raspberrypi:~ $ sudo nano /etc/default/motion
pi@raspberrypi:~ $ start_motion_daemon=ja
Stap 2: Stel Google Foto's API in voor Python
2.1 Aanbevolen om voor dit doel een nieuw account aan te maken om een album te delen met uw hoofdaccount om meldingen te krijgen wanneer nieuwe bestanden worden toegevoegd, plus meer opslagruimte. Schakel Google Photos API in voor het account dat u gaat gebruiken om te uploaden.
Hierna zou u het bestand credentials.json moeten hebben.
2.2 Configuratie van Python-omgeving
In principe is de omgevingsconfiguratie alleen vereist op Raspberry. Maar het vereist OAuth-autorisatie, wat handiger is om op pc te bereiken. Om dit op Raspberry te doen, moet je er een monitor/toetsenbord op aansluiten of een externe desktop-UI instellen. Ik heb zojuist dezelfde omgeving op zowel Raspberry als PC geïnstalleerd. Dus de stappen 2.2.1..2.2.3 zijn gemaakt op pc, 2.2.1, 2.2.2, 2.2.5, 2.2.6 op Rpi
2.2.1 installeer Python 3
2.2.2 Google api-pakketten installeren volgens handleiding*(zie 5.1)
Op pc
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Op framboos
pi@raspberrypi:~ $ sudo pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
2.2.3 Bekijk het uploaden van scripts naar google photos.. Het wordt op mijn github geplaatst. Zet het in dezelfde map met credentials.json.
2.2.4 Maak een foto en test het uploaden
python3 photos.py afbeelding.jpg
Installeer ontbrekende afhankelijkheden als die er zijn en probeer het opnieuw. Als gevolg hiervan zou u token.pickle in de scriptmap moeten krijgen en ook een nieuw gedeeld album dat is gemaakt in uw Google Foto's-webinterface met image.jpg. Als je token.pickle krijgt, heb je geen credentials.json meer nodig voor photos.py in dezelfde map.
2.2.5 Deel het album met het account over wat je graag wilt dat meldingen over nieuwe media worden toegevoegd. Voeg dit account toe aan je telefoon.
2.2.6 Zet photos.py en token.pickle in /var/lib/motion op raspberry. 'pi' gebruiker kan niet schrijven naar de 'motion's dir's dus upload eerst naar /home/pi
scp photos.py token.pickle pi@IP:/home/pi
Log dan in op raspberry en verplaats de bestanden onder sudo
ssh pi@IP
pi@raspberrypi:~ $ sudo mv photos.py token.pickle /var/lib/motion
2.2.7 Controleer hoe uploaden werkt op Raspberry. Maak een foto met fswebcam en probeer deze te uploaden
pi@raspberrypi:~ $ sudo fswebcam /var/lib/motion/image.jpg
pi@raspberrypi:~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg
Er zou image-j.webp
Stap 3: Testen
3.1 Bewegingsservice starten
pi@raspberrypi:~ $ sudo service motion start
U kunt het commando wijzigen in "stop" of "restart"
3.2 Bewegingslogboeken inschakelen
pi@raspberrypi:~ $ staart -f /var/log/motion/motion.log
3.2 Bekijk de camera-uitgang op een ander apparaat dat is aangesloten op hetzelfde lokale netwerk. Voer in browser:
IP:8081
3.3 Kijk naar de logs, wacht tot de beweging is gedetecteerd en het bestand NAME.mp4 is geschreven in /var/lib/motion. Start vervolgens het uploadscript handmatig
pi@raspberrypi:~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4
Controleer de pythonsporen. Wacht tot event_end verschijnt in motion.log. Ga dan naar het album "helloworld" in je google foto's en controleer of er een video is geüpload.
3.4 Als het uploaden is gelukt, verwijder dan in /etc/motion.conf de regel:
pi@raspberrypi:~ $ sudo nano /etc/motion.conf
# Opdracht die moet worden uitgevoerd wanneer een filmbestand gereed is
on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
pi@raspberrypi:~ $ sync
pi@raspberrypi:~ $ sudo service motion herstart
3.5 Kijk naar de bewegingslogboeken en controleer in het album of de video automatisch is geüpload.
3.6 Deel optioneel het album met je hoofdaccount om een melding te krijgen wanneer de nieuwe video of foto is toegevoegd.
Stap 4: Optioneel: webtoegang configureren voor realtime streamingcamera
Deze stap is gebaseerd op de Parreno-tutorial van Michel. Ik heb zojuist FreeDNS gekozen in plaats van NoIP, zoals hier wordt aanbevolen.
4.1 Geautoriseerde toegang tot de bewegingsserver voor videostreaming configureren:
pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf
# Stel de authenticatiemethode in (standaard: 0)
# 0 = uitgeschakeld
# 1 = Basisverificatie
#2 = MD5 digest (de veiligere authenticatie)
stream_auth_methode 2.
# Authenticatie voor de stream. Syntaxis gebruikersnaam:wachtwoord
# Standaard: niet gedefinieerd (Uitgeschakeld)
webcontrol_authentication gebruikersnaam:wachtwoord
# Maximale framerate voor streamstreams (standaard: 1)
stream_maxrate 30
# Beperk streamverbindingen tot alleen localhost (standaard: aan)
stream_localhost uit
Als u de webbesturingsinterface van het externe netwerk niet gaat gebruiken, laat u deze uitgeschakeld (zoals standaard)
# Beperk controleverbindingen tot alleen localhost (standaard: aan)
webcontrol_localhost aan
Omdat Raspberry online gaat, raad ik aan om het standaard Raspberry-wachtwoord te wijzigen
pi@raspberrypi:~ $ passwd
Hoewel ssh-poort 22 niet wordt omgeleid naar de Raspberry, toch.
4.2 Ga naar FreeDNS-site
4.3 Aanmelden
4.4 Subdomein toevoegen (Voor Leden -> Subdomeinen)
4.5 Kies DNS-client om op Raspberry te installeren (voor leden -> Dynamische DNS -> Synamische DNS-bronnen -> Dynamische DNS-clients)
Ik koos wget_script update.sh van Adam Dean (onder aan de pagina)
Er zijn tijdelijke aanduidingen _YOURAPIKEYHERE_ en _YOURDOMAINHERE_. Om ze te krijgen, ga naar (Voor leden -> Dynamische DNS)
En op de onderstaande pagina vind je voorbeelden van scripts met je APIKEY en DOMAIN (die toegevoegd in 4.4). Ik nam deze waarden van Wget Script en verving _YOURAPIKEYHERE_ en _YOURDOMAINHERE_ in update.sh
4.6 Voer vervolgens update.sh uit op raspberry. Het kan dnsutils nodig hebben voor nslookup. Installeer het dan:
pi@raspberrypi:~ $ sudo apt-get dnsutils
4.7 Configureer vervolgens uw router om externe wereldverzoeken om te leiden naar 8081-poort naar de ip. van de raspberry
4.8 Reserveer het IP-adres voor de MAC van uw Raspberry in de DHCP-instelling, zodat Rpi altijd hetzelfde IP-adres heeft
4.9 Voer vervolgens in de browser in op een apparaat dat niet is aangesloten op het lokale netwerk:
uwdomein:8081
Voer uw inloggegevens in die u hebt gedefinieerd in motion.conf.
Test hoe de video werkt.
4.10 om DDNS automatisch bij te werken, stelt cron-taak in. Zie quick_cron_example op (Voor leden -> Dynamische DNS)
Stap 5: Tips
5.1 Wees oplettend bij het installeren van Python-pakketten op Raspberry. Ik heb een dag besteed aan het debuggen hiervan - het probleem was dat het script vanaf de console goed liep, maar dat het niet werd gebeld door het terugbellen van bewegingsgebeurtenissen. Wat het nog erger maakte, was dat in het laatste geval de sporen van het script niet beschikbaar waren.
De reden was dat ik volgens de handleiding de pakketten voor 'pi'-gebruiker heb geïnstalleerd (die standaard in de map /home/pi staat en beperkt is voor andere gebruikers), maar om het script uit te voeren als een kind van de 'motion'-service, moeten de pakketten zijn ook beschikbaar voor 'motion'-gebruiker. Dus uiteindelijk heb ik het opgelost door de pakketten te installeren als:
sudo pip3 …
Dit is niet een goede manier werkt nog steeds. Installatie zonder sudo als pip3 --system gaf me om de een of andere reden fouten.
Dienovereenkomstig wordt het script ook onder sudo aangeroepen (zie motion.conf).
Tijdens deze probleemoplossing heb ik veel onnodige wijzigingen aangebracht en ik weet niet zeker wat nodig is en nu te lui om ze stapsgewijs terug te draaien en te zien wanneer het niet meer werkt. In het bijzonder verleende bewegingsbeheerdersrechten:
pi@raspberrypi:~ $ groepen beweging
motion: motion adm sudo audio video gebruikers netdev pi
pi@raspberrypi:~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL=(ALL) NOPASSWD: ALL
beweging ALL=(ALL) NOPASSWD: ALL
Ook veranderde de bestandseigenaar en -machtiging vergelijkbaar met uploaden naar Google Drive. Waarschijnlijk kan het u helpen in het geval u een soortgelijk probleem heeft.
5.2 Met de Google Foto's API kunnen alleen bestanden aan gedeelde albums worden toegevoegd, zodat iedereen met de link er toegang toe heeft. Deel het niet via een link en verwijder oude films of verplaats ze naar de prullenbak of uit het album. In dat laatste geval blijven ze op de rekening staan.
5.3 Google Photos Assistant detecteert gezichten, wat best handig is als de camerakwaliteit in orde is. Als een bonus maakt het mooie media-achtige compilaties en gifs enz.
5.4 Ik heb geprobeerd een 4G LTE USB-modem te gebruiken voor internettoegang en hier zijn mijn resultaten. 5.4.1 Huawei E3372h-153 werkt zonder problemen met Raspberry en extra software 5.4.2 Ook ingeschakelde hotspot zodat Rasperry de internetverbinding via wifi deelt. Er is https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ een heel eenvoudige handleiding hoe je dit kunt doen met RaspAP. 5.4.3 Dynamische DNS werkte niet in het 4G-netwerk van mijn auto. Er is een verklaring waarom
5.5 Na een paar weken gebruik van dit systeem bleek, hoewel video's handiger zijn om te bekijken en te uploaden, Google Foto's beter werkt met afbeeldingen. Het maakt bijvoorbeeld het groeperen van dingen/gezichten mogelijk om alleen afbeeldingen te analyseren, en alleen dan te zoeken naar gezichten/dingen van de afbeeldingen in video's, maar niet het tegenovergestelde. Dus ik ga afbeeldingen testen die eerder video's uploaden.
Aanbevolen:
Google-agenda's aan Google Sites koppelen: 5 stappen
Google-agenda's aan Google-sites koppelen: dit is een Instructable om u te leren hoe u Google-agenda's kunt maken, gebruiken en bewerken en deze vervolgens aan een Google-site kunt koppelen met behulp van de deelmogelijkheden. Dit kan voor veel mensen voordelig zijn, aangezien Google Sites kan worden gebruikt om i
Leap Motion-controller. (Progetto Arduino): 4 stappen
Leap Motion-controller. (Progetto Arduino): De bedoeling van het programma en de gebruiksfuncties van de Leap Motion per controllare die de kleur van de led-RGB in het relazione al movimento delle mani nello spazio.Referentie: Leap Motion SDK: https:// developer-archive.leapmotion.com/doc
Eenvoudig en gratis Google Maps toevoegen aan uw Google Spreadsheets: 6 stappen
Voeg eenvoudig automatisch en gratis Google Maps toe aan uw Google Spreadsheets: net als veel andere makers heb ik maar weinig GPS-trackerprojecten gebouwd. Vandaag kunnen we snel GPS-punten direct in Google Spreadsheets visualiseren zonder een externe website of API te gebruiken. Het beste van alles is dat het GRATIS is
Weergegevens met Google Spreadsheets en Google Script: 7 stappen
Weergegevens met behulp van Google Spreadsheets en Google Script: in deze Blogtut gaan we de metingen van de SHT25-sensor naar Google Spreadsheets sturen met behulp van Adafruit Huzzah ESP8266, wat helpt om de gegevens naar internet te sturen. Het verzenden van gegevens naar Google Sheet Cell is erg handig en basismanier die de gegevens opslaat in
Google Assistent voor pc/Mac/Linux: 5 stappen
Google Assistant voor pc/Mac/Linux: Google Assistant is Google's antwoord op Amazon's Alexa smart home-assistent. Aanvankelijk alleen beschikbaar met beperkte functionaliteit in de Google Allo-applicatie, Google Assistant later uitgerold met de Google Home- en Pixel-smartphones