Inhoudsopgave:

Raspberry Pi Linux Motion Google Photos-integratie: 5 stappen
Raspberry Pi Linux Motion Google Photos-integratie: 5 stappen

Video: Raspberry Pi Linux Motion Google Photos-integratie: 5 stappen

Video: Raspberry Pi Linux Motion Google Photos-integratie: 5 stappen
Video: Leap Motion SDK 2024, November
Anonim
Raspberry Pi Linux Motion Google Foto's Integratie
Raspberry Pi Linux Motion Google Foto's Integratie

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

Google Foto's API instellen voor Python
Google Foto's API instellen voor Python
Google Foto's API instellen voor Python
Google Foto's API instellen 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

Optioneel: webtoegang configureren voor realtime streamingcamera
Optioneel: webtoegang configureren voor realtime streamingcamera
Optioneel: webtoegang configureren voor realtime streamingcamera
Optioneel: webtoegang configureren voor realtime streamingcamera
Optioneel: webtoegang configureren voor realtime streamingcamera
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: