Inhaltsverzeichnis:

Raspberry Pi Linux Motion Google Fotos Integration - Gunook
Raspberry Pi Linux Motion Google Fotos Integration - Gunook

Video: Raspberry Pi Linux Motion Google Fotos Integration - Gunook

Video: Raspberry Pi Linux Motion Google Fotos Integration - Gunook
Video: Make Raspberry Pi Security Camera with Motion Detection + Email Notification 2024, November
Anonim
Raspberry Pi Linux Motion Google Fotos-Integration
Raspberry Pi Linux Motion Google Fotos-Integration

Die Idee ist, Fotos und Videos hochzuladen, die mit einer bewegungsaktivierten Kamera erstellt wurden, die mit dem Raspberry Pi verbunden ist, um Dateien in eine Cloud hochzuladen. Die Software „Motion“unterstützt das Hochladen auf Google Drive über PyDrive. In diesem Artikel wird „Bewegung“verwendet, um auf Google Fotos hochzuladen.

Hardware:

Raspberry Pi 3B+

USB-Webcam Logitech C920

Hardwareauswahl war nicht bestimmt, ich habe einfach das zur Hand genommen.

Voraussetzungen:

Der Einfachheit halber sollte sich Raspberry Pi in Ihrem lokalen Netzwerk befinden – um es ohne Monitor/Tastatur und Upload/Download von Dateien zu steuern. Dazu sollten Sie einen ssh-Agenten auf Ihrem PC haben (zB putty).

Vielen Dank an ssandbac für ein tolles Tutorial. Wenn Sie weitere Informationen zum Einrichten der Umgebung benötigen, lesen Sie diesen Artikel. Ich habe mir Motion-Installations- und Konfigurationsschritte davon ausgeliehen und einige Änderungen hinzugefügt. Anstatt Dateien und Benachrichtigungen per E-Mail zu versenden, wird in diesem Beispiel insbesondere das Hochladen in das geteilte Album von Google Fotos verwendet und Benachrichtigungen in der Art von "Hinzugefügte Fotos" in der Benachrichtigungsleiste erhalten.

Hier sind die Schritte:

Schritt 1: Installieren Sie Linux Motion auf Raspberry

Besonders in diesem Beispiel wurde Motion v4.0 verwendet.

1.1 Update-Bilder

pi@raspberrypi:~ $ sudo apt-get update

pi@raspberrypi:~ $ sudo apt-get upgrade

1.2 Bewegung herunterladen

pi@raspberrypi:~ $ sudo apt-get install motion

1.3 Bearbeiten Sie nun diese Datei mit den folgenden Änderungen

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

# Starten Sie im Daemon-Modus (Hintergrund) und geben Sie das Terminal frei (Standard: aus)

Dämon an

# Verwenden Sie eine Datei, um Protokollnachrichten zu speichern, wenn nicht definiert stderr und syslog verwendet wird. (Standard: nicht definiert)

Protokolldatei /var/log/motion/motion.log

# Bildbreite (Pixel). Gültiger Bereich: Kameraabhängig, Standard: 352

Breite 1920

# Bildhöhe (Pixel). Gültiger Bereich: Kameraabhängig, Standard: 288

Höhe 1080

# Maximale Anzahl von Frames, die pro Sekunde erfasst werden sollen.

Bildrate 30

# Gibt die Anzahl der vorab aufgenommenen (gepufferten) Bilder vor der Bewegung an

pre_capture 5

# Anzahl der zu erfassenden Bilder, nachdem keine Bewegung mehr erkannt wurde

post_capture 5

# 'normale' Bilder ausgeben, wenn eine Bewegung erkannt wird (Standard: ein)

Ausgabe_Bilder aus

# Die Qualität (in Prozent), die von der JPEG-Komprimierung verwendet werden soll

Qualität 100

# Verwenden Sie ffmpeg, um Filme in Echtzeit zu codieren

ffmpeg_output_movies aus

# oder der Bereich 1 - 100, wobei 1 die schlechteste Qualität und 100 die beste Qualität bedeutet.

ffmpeg_variable_bitrate 100

# Beim Erstellen von Videos sollten Frames der Reihe nach dupliziert werden

ffmpeg_duplicate_frames false

# Bool, um extpipe zu aktivieren oder zu deaktivieren (Standard: off)

use_extpipe an

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

# Befehl, der ausgeführt werden soll, wenn eine Filmdatei

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

Lassen Sie das letzte vorerst mit Semikolon (kommentiert) und entkommentieren Sie, nachdem sichergestellt wurde, dass die Videoaufnahme und das Hochladen funktioniert.

1.4 Dann ändern

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

pi@raspberrypi:~ $ start_motion_daemon=yes

Schritt 2: Google Fotos API für Python einrichten

Richten Sie die Google Fotos-API für Python ein
Richten Sie die Google Fotos-API für Python ein
Richten Sie die Google Fotos-API für Python ein
Richten Sie die Google Fotos-API für Python ein

2.1 Es wird empfohlen, zu diesem Zweck ein neues Konto zu erstellen, um ein Album mit Ihrem Hauptkonto zu teilen, um Benachrichtigungen zu erhalten, wenn neue Dateien hinzugefügt werden, sowie mehr Speicherplatz. Aktivieren Sie die Google Fotos API für das Konto, das Sie zum Hochladen verwenden möchten.

Danach sollten Sie die Datei "credentials.json" haben.

2.2 Einrichtung der Python-Umgebung

Grundsätzlich ist die Umgebungskonfiguration nur auf Raspberry erforderlich. Es erfordert jedoch eine Oauth-Autorisierung, die auf dem PC bequemer zu bewerkstelligen ist. Um dies auf Raspberry zu tun, müssen Sie Monitor / Tastatur daran anschließen oder eine Remote-Desktop-Benutzeroberfläche einrichten. Ich habe gerade die gleiche Umgebung auf Raspberry und PC installiert. Also wurden die Schritte 2.2.1.2.2.3 auf PC gemacht, 2.2.1, 2.2.2, 2.2.5, 2.2.6 auf Rpi

2.2.1 Python 3 installieren

2.2.2 Google-API-Pakete gemäß Handbuch installieren* (siehe 5.1)

Auf dem PC

pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

Auf Himbeere

pi@raspberrypi:~ $ sudo pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

2.2.3 Überprüfen Sie das Hochladen von Skripten auf Google-Fotos. Es befindet sich auf meinem Github. Legen Sie es in das gleiche Verzeichnis mit Credentials.json.

2.2.4 Machen Sie ein Foto und testen Sie das Hochladen

python3 photos.py image.jpg

Installieren Sie fehlende Abhängigkeiten, falls vorhanden, und versuchen Sie es erneut. Als Ergebnis sollten Sie token.pickle im Verzeichnis des Skripts und auch ein neues freigegebenes Album erhalten, das in Ihrer Google Fotos-Weboberfläche mit image-j.webp

2.2.5 Teilen Sie das Album mit dem Konto darüber, was Sie Benachrichtigungen zu neuen Medien erhalten möchten. Fügen Sie dieses Konto zu Ihrem Telefon hinzu.

2.2.6 Legen Sie photos.py und token.pickle in /var/lib/motion auf raspberry ab. 'pi'-Benutzer kann nicht in die 'Bewegungsverzeichnisse' schreiben, also zuerst nach /home/pi hochladen

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

Dann loggen Sie sich bei Raspberry ein und verschieben Sie die Dateien unter sudo

ssh pi@IP

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

2.2.7 Überprüfen Sie, wie das Hochladen auf Himbeere funktioniert. Mach ein Foto mit fswebcam und versuche es hochzuladen

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

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

Es sollte image-j.webp

Schritt 3: Testen

3.1 Motion-Dienst starten

pi@raspberrypi:~ $ sudo service motion start

Sie können den Befehl in "Stopp" oder "Neustart" ändern.

3.2 Bewegungsprotokolle aktivieren

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

3.2 Zeigen Sie die Kameraausgabe auf einem anderen Gerät an, das mit demselben lokalen Netzwerk verbunden ist. Geben Sie im Browser ein:

IP:8081

3.3 Beim Betrachten der Logs warten Sie, bis die Bewegung erkannt und die Datei NAME.mp4 in /var/lib/motion geschrieben wird. Starten Sie dann das Upload-Skript manuell

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

Überprüfen Sie die Python-Spuren. Warten Sie, bis event_end in motion.log angezeigt wird. Gehen Sie dann in Ihren Google-Fotos zum Album „helloworld“und prüfen Sie, ob ein Video hochgeladen wurde.

3.4 Wenn das Hochladen erfolgreich war, entkommentieren Sie in /etc/motion.conf die Zeile:

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

# Befehl, der ausgeführt werden soll, wenn eine Filmdatei fertig ist

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

pi@raspberrypi:~ $ sync

pi@raspberrypi:~ $ sudo service motion restart

3.5 Sehen Sie sich die Bewegungsprotokolle an und überprüfen Sie im Album, ob das Video automatisch hochgeladen wurde.

3.6 Teilen Sie das Album optional mit Ihrem Hauptkonto, um eine Benachrichtigung zu erhalten, wenn das neue Video oder Foto hinzugefügt wird.

Schritt 4: Optional: Konfigurieren Sie den Webzugriff für die Echtzeit-Streaming-Kamera

Optional: Konfigurieren Sie den Webzugriff für die Echtzeit-Streaming-Kamera
Optional: Konfigurieren Sie den Webzugriff für die Echtzeit-Streaming-Kamera
Optional: Konfigurieren Sie den Webzugriff für die Echtzeit-Streaming-Kamera
Optional: Konfigurieren Sie den Webzugriff für die Echtzeit-Streaming-Kamera
Optional: Konfigurieren Sie den Webzugriff für die Echtzeit-Streaming-Kamera
Optional: Konfigurieren Sie den Webzugriff für die Echtzeit-Streaming-Kamera

Dieser Schritt basiert auf Michels Parreno-Tutorial. Ich habe einfach FreeDNS anstelle von NoIP gewählt, wie hier empfohlen.

4.1 Konfigurieren Sie den autorisierten Zugriff auf den Videostreaming-Bewegungsserver:

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

# Legen Sie die Authentifizierungsmethode fest (Standard: 0)

# 0 = deaktiviert

# 1 = Basisauthentifizierung

# 2 = MD5-Digest (die sicherere Authentifizierung)

stream_auth_method 2

# Authentifizierung für den Stream. Syntax Benutzername:Passwort

# Standard: nicht definiert (Deaktiviert)

webcontrol_authentication Benutzername:Passwort

# Maximale Framerate für Stream-Streams (Standard: 1)

stream_maxrate 30

# Stream-Verbindungen nur auf localhost beschränken (Standard: on)

stream_localhost aus

Wenn Sie die Websteuerungsschnittstelle von einem externen Netzwerk nicht verwenden möchten, lassen Sie sie deaktiviert (als Standard)

# Kontrollverbindungen nur auf localhost beschränken (Standard: on)

webcontrol_localhost an

Da Raspberry online geht, empfehle ich außerdem, das Standard-Raspberry-Passwort zu ändern

pi@raspberrypi:~ $ passwd

Obwohl der ssh-Port 22 nicht auf die Himbeere umgeleitet wird, ist dies immer noch nicht der Fall.

4.2 Gehen Sie zur FreeDNS-Site

4.3 Anmelden

4.4 Subdomain hinzufügen (Für Mitglieder -> Subdomains)

4.5 DNS-Client zur Installation auf Raspberry auswählen (Für Mitglieder -> Dynamisches DNS -> Synamic DNS-Ressourcen -> Dynamische DNS-Clients)

Ich habe wget_script update.sh von Adam Dean gewählt (unten auf der Seite)

Es gibt Platzhalter _YOURAPIKEYHERE_ und _YOURDOMAINHERE_. Um sie zu erhalten, gehen Sie zu (Für Mitglieder -> Dynamisches DNS)

Und auf der Seite unten finden Sie Beispiele für Skripte mit Ihrem APIKEY und Ihrer DOMAIN (die in 4.4 hinzugefügt wurde). Ich habe diese Werte aus dem Wget-Skript genommen und _YOURAPIKEYHERE_ und _YOURDOMAINHERE_ in update.sh ersetzt

4.6 Führen Sie dann update.sh auf Raspberry aus. Es kann dnsutils für nslookup erfordern. Installieren Sie es dann:

pi@raspberrypi:~ $ sudo apt-get dnsutils

4.7 Konfigurieren Sie dann Ihren Router, um externe Weltanfragen an den 8081-Port an die IP-Adresse der Himbeere umzuleiten

4.8 Reservieren Sie die IP für den MAC Ihrer Himbeere in der DHCP-Einstellung, damit Rpi immer die gleiche IP hat

4.9 Geben Sie dann auf einem Gerät, das nicht mit dem lokalen Netzwerk verbunden ist, im Browser ein:

IhreDomain:8081

Geben Sie Ihre Zugangsdaten ein, die Sie in motion.conf definiert haben.

Testen Sie, wie das Video funktioniert.

4.10, um DDNS automatisch zu aktualisieren, Setup-Cron-Task. Siehe quick_cron_example auf (Für Mitglieder -> Dynamisches DNS)

Schritt 5: Tipps

5.1 Seien Sie bei der Installation von Python-Paketen auf Raspberry aufmerksam. Ich habe einen Tag damit verbracht, dies zu debuggen – das Problem war, dass das Skript von der Konsole aus gut lief, aber das Aufrufen von einem Bewegungsereignis-Callback nicht. Was es noch schlimmer machte, war, dass im letzteren Fall keine Spuren aus dem Skript verfügbar waren.

Der Grund war, dass ich nach der Anleitung die Pakete für den Benutzer „pi“installiert habe (der sich standardmäßig im Verzeichnis /home/pi befindet und für andere Benutzer eingeschränkt ist), aber um das Skript als Kind des Dienstes „motion“auszuführen, müssen die Pakete sein auch für 'motion'-Benutzer verfügbar. Also habe ich es endlich behoben, indem ich die Pakete installiert habe als

sudo pip3 …

Dies ist kein richtiger Weg, der immer noch funktioniert. Die Installation ohne sudo als pip3 --system gab mir aus irgendeinem Grund Fehler.

Entsprechend wird das Skript auch unter sudo aufgerufen (siehe motion.conf).

Während dieser Fehlerbehebung habe ich viele unnötige Änderungen vorgenommen und bin mir nicht sicher, was notwendig ist, und jetzt zu faul, um sie inkrementell zurückzusetzen und zu sehen, wann es nicht mehr funktioniert. Insbesondere gewährte Bewegungsadministratorrechte:

pi@raspberrypi:~ $ Gruppenbewegung

motion: motion adm sudo audio video users netdev pi

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

pi ALLE=(ALLE) NOPASSWD: ALLE

Bewegung ALLE=(ALLE) NOPASSWD: ALLE

Außerdem wurden Dateibesitzer und Berechtigungen ähnlich wie beim Hochladen auf Google Drive geändert. Wahrscheinlich kann es Ihnen in einem Fall helfen, in dem Sie ein ähnliches Problem haben.

5.2 Mit der Google Fotos-API können nur Dateien zu freigegebenen Alben hinzugefügt werden, damit jeder mit dem Link darauf zugreifen kann. Teilen Sie es nicht per Link und löschen Sie alte Filme oder verschieben Sie sie in den Papierkorb oder aus dem Album. Im letzteren Fall verbleiben sie auf dem Konto.

5.3 Der Google Fotos-Assistent erkennt Gesichter, was bei guter Kameraqualität sehr nützlich ist. Als Bonus macht es ausgefallene Medienzusammenstellungen und Gifs usw.

5.4 Ich habe versucht, ein 4G LTE-USB-Modem für den Internetzugang zu verwenden, und hier sind meine Ergebnisse. Es gibt https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ eine wirklich einfache Anleitung, wie man es mit RaspAP macht. 5.4.3 Dynamisches DNS funktionierte nicht im 4G-Netzwerk meines Trägers. Es gibt eine Erklärung warum

5.5 Nachdem Sie dieses System einige Wochen lang verwendet haben, stellte sich heraus, dass Google Fotos mit Bildern besser funktioniert, obwohl Videos bequemer anzuzeigen und hochzuladen sind. ZB ermöglicht es die Gruppierung von Dingen/Gesichtern, nur Bilder zu analysieren und erst dann nach Gesichtern/Dingen aus den Bildern in Videos zu suchen, aber nicht das Gegenteil. Also teste ich mal Bilder und lade eher Videos hoch.

Empfohlen: