Πίνακας περιεχομένων:

Raspberry Pi Linux Motion Ενσωμάτωση φωτογραφιών Google: 5 βήματα
Raspberry Pi Linux Motion Ενσωμάτωση φωτογραφιών Google: 5 βήματα

Βίντεο: Raspberry Pi Linux Motion Ενσωμάτωση φωτογραφιών Google: 5 βήματα

Βίντεο: Raspberry Pi Linux Motion Ενσωμάτωση φωτογραφιών Google: 5 βήματα
Βίντεο: Leap Motion SDK 2024, Ιούλιος
Anonim
Raspberry Pi Linux Motion Google Photos Integration
Raspberry Pi Linux Motion Google Photos Integration

Η ιδέα είναι να ανεβάσετε φωτογραφίες και βίντεο που έχουν δημιουργηθεί με κάμερα ενεργοποιημένη με κίνηση συνδεδεμένη στο Raspberry Pi για να ανεβάσετε αρχεία σε σύννεφο. Το λογισμικό «Motion» υποστηρίζει τη μεταφόρτωση στο Google Drive μέσω PyDrive. Σε αυτό το άρθρο, το "Motion" χρησιμοποιείται για μεταφόρτωση στις Φωτογραφίες Google.

Σκεύη, εξαρτήματα:

Raspberry Pi 3B+

Κάμερα USB Logitech C920

Η επιλογή υλικού δεν καθορίστηκε, πήρα απλώς αυτό που είχαμε στο χέρι.

Προαπαιτούμενα:

Για ευκολία, το Raspberry pi πρέπει να βρίσκεται στο τοπικό σας δίκτυο - για να το ελέγχετε χωρίς οθόνη/πληκτρολόγιο και να ανεβάζετε/κατεβάζετε αρχεία. Για αυτό θα πρέπει να έχετε ssh agent στον υπολογιστή σας (π.χ. στόκος).

Ευχαριστώ πολύ τον ssandbac για ένα υπέροχο σεμινάριο. Αν χρειάζεστε περισσότερες πληροφορίες σχετικά με τον τρόπο ρύθμισης του περιβάλλοντος, δείτε αυτό το άρθρο. Δανείστηκα την εγκατάσταση κίνησης και τη διαμόρφωση βημάτων από αυτήν και πρόσθεσα μερικές αλλαγές. Συγκεκριμένα, αντί για αποστολή αρχείων και ειδοποιήσεων μέσω ηλεκτρονικού ταχυδρομείου, αυτό το παράδειγμα χρησιμοποιεί τη μεταφόρτωση στο κοινόχρηστο άλμπουμ φωτογραφιών Google και τη λήψη ειδοποιήσεων τύπου "προσθήκης φωτογραφιών" στη γραμμή ειδοποιήσεων.

Εδώ είναι τα βήματα:

Βήμα 1: Εγκαταστήστε το Linux Motion στο Raspberry

Ιδιαίτερα σε αυτό το παράδειγμα χρησιμοποιήθηκε η κίνηση v4.0.

1.1 Ενημέρωση pi

pi@raspberrypi: su $ sudo apt-get ενημέρωση

pi@raspberrypi: su $ sudo apt-get upgrade

1.2 Λήψη κίνησης

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

1.3 Τώρα επεξεργαστείτε αυτό το αρχείο με τις ακόλουθες αλλαγές

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

# Έναρξη σε λειτουργία δαίμονα (παρασκήνιο) και απελευθέρωση τερματικού (προεπιλογή: απενεργοποιημένο)

δαίμονας επάνω

# Χρησιμοποιήστε ένα αρχείο για να αποθηκεύσετε μηνύματα καταγραφής, εάν δεν έχει οριστεί stderr και syslog χρησιμοποιείται. (προεπιλογή: δεν ορίζεται)

logfile /var/log/motion/motion.log

# Πλάτος εικόνας (pixel). Έγκυρο εύρος: Εξαρτάται από την κάμερα, προεπιλογή: 352

πλάτος 1920

# Heightψος εικόνας (εικονοστοιχεία). Έγκυρο εύρος: Εξαρτάται από την κάμερα, προεπιλογή: 288

ύψος 1080

# Μέγιστος αριθμός καρέ που πρέπει να καταγράφονται ανά δευτερόλεπτο.

ρυθμός καρέ 30

# Καθορίζει τον αριθμό των προ-τραβηγμένων (προσωρινών) εικόνων από πριν την κίνηση

προ -σύλληψη 5

# Ο αριθμός των καρέ για λήψη μετά την κίνηση δεν ανιχνεύεται πλέον

post_capture 5

# Έξοδος "κανονικών" εικόνων όταν ανιχνεύεται κίνηση (προεπιλογή: ενεργοποιημένη)

έξοδος_απεικονίσεις απενεργοποιημένες

# Η ποιότητα (σε ποσοστό) που θα χρησιμοποιηθεί από τη συμπίεση jpeg

ποιότητα 100

# Χρησιμοποιήστε το ffmpeg για κωδικοποίηση ταινιών σε πραγματικό χρόνο

ffmpeg_output_movies απενεργοποιημένο

# ή το εύρος 1 - 100 όπου 1 σημαίνει χειρότερη ποιότητα και 100 καλύτερη.

ffmpeg_variable_bitrate 100

# Κατά τη δημιουργία βίντεο, θα πρέπει να αντιγράψετε τα καρέ με τη σειρά

ffmpeg_duplicate_frames false

# Bool για ενεργοποίηση ή απενεργοποίηση extpipe (προεπιλογή: απενεργοποιημένη)

use_extpipe ενεργοποιημένο

extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx %h -framerate %fps -i σωλήνας: 0 -vcodec libx264 -προεπιλεγμένο ultrafast -f mp4 %f.mp4

target_dir/var/lib/motion

# Εντολή για εκτέλεση όταν ένα αρχείο ταινίας

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

Αφήστε το τελευταίο με ερωτηματικό προς το παρόν (σχολιάστηκε) για να το σχολιάσετε αφού βεβαιωθείτε ότι η εγγραφή και η μεταφόρτωση βίντεο λειτουργεί.

1.4 Στη συνέχεια, αλλάξτε

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

pi@raspberrypi: start $ start_motion_daemon = ναι

Βήμα 2: Ρύθμιση του Google Photos API για Python

Ρύθμιση του Google Photos API για Python
Ρύθμιση του Google Photos API για Python
Ρύθμιση του Google Photos API για Python
Ρύθμιση του Google Photos API για Python

2.1 Συνιστάται η δημιουργία ενός νέου λογαριασμού για το σκοπό αυτό για να μοιραστείτε ένα άλμπουμ με τον κύριο σας για να λαμβάνετε ειδοποιήσεις όταν προστίθενται νέα αρχεία, καθώς και περισσότερο χώρο αποθήκευσης. Ενεργοποιήστε το API των Φωτογραφιών Google για τον λογαριασμό που πρόκειται να χρησιμοποιήσετε για μεταφόρτωση.

Μετά από αυτό, θα πρέπει να έχετε αρχείο credentials.json.

2.2 Ρύθμιση περιβάλλοντος Python

Βασικά η ρύθμιση του περιβάλλοντος απαιτείται μόνο για βατόμουρο. Απαιτεί όμως άδεια χρήσης, η οποία είναι πιο βολικό να πραγματοποιηθεί σε υπολογιστή. Για να το κάνετε αυτό σε βατόμουρο, πρέπει να συνδέσετε την οθόνη/το πληκτρολόγιο σε αυτήν ή να ρυθμίσετε κάποιο περιβάλλον εργασίας απομακρυσμένης επιφάνειας εργασίας. Μόλις εγκατέστησα το ίδιο περιβάλλον σε βατόμουρο και στον υπολογιστή και τα δύο. Έτσι, τα βήματα 2.2.1..2.2.3 έγιναν σε υπολογιστή, 2.2.1, 2.2.2, 2.2.5, 2.2.6 σε Rpi

2.2.1 εγκατάσταση Python 3

2.2.2 Εγκατάσταση πακέτων google api σύμφωνα με το εγχειρίδιο*(βλ. 5.1)

Σε υπολογιστή

pip3 install-αναβάθμιση google-api-python-client google-auth-httplib2 google-auth-oauthlib

Στο βατόμουρο

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

2.2.3 Ελέγξτε τη μεταφόρτωση σεναρίου σε φωτογραφίες Google. Τοποθετείται στο github μου. Τοποθετήστε τον στον ίδιο κατάλογο με τα διαπιστευτήρια.json.

2.2.4 Τραβήξτε λίγη φωτογραφία και δοκιμάστε τη μεταφόρτωση

python3 photos.py image.jpg

Εγκαταστήστε τις εξαρτήσεις που λείπουν εάν υπάρχουν και δοκιμάστε ξανά. Ως αποτέλεσμα, θα πρέπει να λάβετε το token.pickle στον κατάλογο του σεναρίου και επίσης ένα νέο κοινόχρηστο άλμπουμ που δημιουργήθηκε στη διεπαφή ιστού των Φωτογραφιών Google με το image.jpg. Καθώς παίρνετε το token.pickle, δεν χρειάζεστε πια τα credentials.json για photos.py στον ίδιο κατάλογο.

2.2.5 Μοιραστείτε το άλμπουμ με τον λογαριασμό σχετικά με το τι θέλετε να λαμβάνετε ειδοποιήσεις για νέα μέσα. Προσθέστε αυτόν τον λογαριασμό στο τηλέφωνό σας.

2.2.6 Τοποθετήστε photos.py και token.pickle στο/var/lib/motion σε βατόμουρο. Ο χρήστης "pi" δεν μπορεί να γράψει στα dir "κίνησης", γι 'αυτό πρώτα να ανεβάσετε στο /home /pi

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

Στη συνέχεια, συνδεθείτε στο βατόμουρο και μετακινήστε τα αρχεία στο sudo

ssh pi@IP

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

2.2.7 Ελέγξτε πώς λειτουργεί η φόρτωση στο βατόμουρο. Πάρτε μια φωτογραφία με fswebcam και προσπαθήστε να την ανεβάσετε

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

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

Θα μπορούσε να υπάρχει image-j.webp

Βήμα 3: Δοκιμή

3.1 Έναρξη υπηρεσίας κίνησης

pi@raspberrypi: su $ sudo κίνηση κίνησης υπηρεσίας

Μπορείτε να αλλάξετε την εντολή σε "διακοπή" ή "επανεκκίνηση"

3.2 Ενεργοποίηση αρχείων καταγραφής κίνησης

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

3.2 Προβολή της εξόδου κάμερας σε άλλη συσκευή συνδεδεμένη στο ίδιο τοπικό δίκτυο. Εισαγάγετε στο πρόγραμμα περιήγησης:

IP: 8081

3.3 Κοιτάζοντας τα αρχεία καταγραφής περιμένετε μέχρι να εντοπιστεί η κίνηση και το αρχείο NAME.mp4 να γραφτεί σε/var/lib/motion. Στη συνέχεια, ξεκινήστε τη χειροκίνητη μεταφόρτωση σεναρίου

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

Ελέγξτε τα ίχνη του πύθωνα. Περιμένετε έως ότου εμφανιστεί το event_end στο motion.log. Στη συνέχεια, μεταβείτε στο άλμπουμ "helloworld" στις φωτογραφίες σας στο Google και ελέγξτε αν έχει μεταφορτωθεί βίντεο.

3.4 Εάν η μεταφόρτωση είναι επιτυχής, μην σχολιάζετε στο /etc/motion.conf τη γραμμή:

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

# Εντολή για εκτέλεση όταν ένα αρχείο ταινίας είναι έτοιμο

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

pi@raspberrypi: ~ $ sync

pi@raspberrypi: su $ sudo υπηρεσία επανεκκίνησης κίνησης

3.5 Κοιτάζοντας τα αρχεία καταγραφής κίνησης και στο άλμπουμ ελέγξτε αν το βίντεο ανέβηκε αυτόματα.

3.6 Προαιρετικά μοιραστείτε το άλμπουμ με τον κύριο λογαριασμό σας για να λαμβάνετε ειδοποίηση όταν προστίθεται το νέο βίντεο ή φωτογραφία.

Βήμα 4: Προαιρετικό: Διαμορφώστε την πρόσβαση στο Web σε κάμερα ροής σε πραγματικό χρόνο

Προαιρετικά: Διαμορφώστε την πρόσβαση στο Web σε κάμερα ροής σε πραγματικό χρόνο
Προαιρετικά: Διαμορφώστε την πρόσβαση στο Web σε κάμερα ροής σε πραγματικό χρόνο
Προαιρετικά: Διαμορφώστε την πρόσβαση στο Web σε κάμερα ροής σε πραγματικό χρόνο
Προαιρετικά: Διαμορφώστε την πρόσβαση στο Web σε κάμερα ροής σε πραγματικό χρόνο
Προαιρετικά: Διαμορφώστε την πρόσβαση στο Web σε κάμερα ροής σε πραγματικό χρόνο
Προαιρετικά: Διαμορφώστε την πρόσβαση στο Web σε κάμερα ροής σε πραγματικό χρόνο

Αυτό το βήμα βασίζεται στο σεμινάριο του Michel’s Parreno. Μόλις επέλεξα το FreeDNS αντί του NoIP όπως συνιστάται εδώ.

4.1 Διαμόρφωση εξουσιοδοτημένης πρόσβασης σε διακομιστή κίνησης ροής βίντεο:

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

# Ορίστε τη μέθοδο ελέγχου ταυτότητας (προεπιλογή: 0)

# 0 = απενεργοποιημένο

# 1 = Βασικός έλεγχος ταυτότητας

# 2 = Συμπέρασμα MD5 (η ασφαλέστερη πιστοποίηση ταυτότητας)

stream_auth_method 2

# Έλεγχος ταυτότητας για τη ροή. Όνομα χρήστη σύνταξης: κωδικός πρόσβασης

# Προεπιλογή: δεν έχει οριστεί (απενεργοποιημένο)

όνομα χρήστη webcontrol_authentication: κωδικός πρόσβασης

# Μέγιστο ρυθμό καρέ για ροές ροής (προεπιλογή: 1)

stream_maxrate 30

# Περιορισμός συνδέσεων ροής μόνο σε localhost (προεπιλογή: ενεργοποιημένο)

Το stream_localhost είναι απενεργοποιημένο

Εάν δεν πρόκειται να χρησιμοποιήσετε διεπαφή ελέγχου ιστού από εξωτερικό δίκτυο, αφήστε την απενεργοποιημένη (όπως από προεπιλογή)

# Περιορίστε τις συνδέσεις ελέγχου μόνο στο localhost (προεπιλογή: ενεργοποιημένο)

webcontrol_localhost ενεργοποιημένο

Επίσης, δεδομένου ότι το βατόμουρο μπαίνει στο διαδίκτυο, συνιστώ να αλλάξετε τον προεπιλεγμένο κωδικό πρόσβασης βατόμουρου

pi@raspberrypi: ~ $ passwd

Παρόλο που η θύρα ssh 22 δεν δρομολογείται προς το βατόμουρο, ακόμα.

4.2 Μετάβαση στον ιστότοπο του FreeDNS

4.3 Εγγραφή

4.4 Προσθήκη υποτομέα (Για μέλη -> υποτομείς)

4.5 Επιλέξτε πελάτη DNS για εγκατάσταση στο Raspberry (Για μέλη -> Dynamic DNS -> Synamic DNS Resources -> Dynamic DNS Clients)

Επέλεξα το wget_script update.sh από τον Adam Dean (στο κάτω μέρος της σελίδας)

Υπάρχουν θέσεις κράτησης _YOURAPIKEYHERE_ και _YOURDOMAINHERE_. Για να τα αποκτήσετε, μεταβείτε στο (Για μέλη -> Dynamic DNS)

Και στην παρακάτω σελίδα θα βρείτε παραδείγματα σεναρίων με το APIKEY και το DOMAIN σας (αυτό που προστέθηκε στο 4.4). Πήρα αυτές τις τιμές από το Wget Script και αντικατέστησα τα _YOURAPIKEYHERE_ και _YOURDOMAINHERE_ στο update.sh

4.6 Στη συνέχεια εκτελέστε το update.sh στο βατόμουρο. Μπορεί να απαιτεί dnsutils για nslookup. Εγκαταστήστε το τότε:

pi@raspberrypi: su $ sudo apt-get dnsutils

4.7 Στη συνέχεια, διαμορφώστε το δρομολογητή σας για να επαναπροσδιορίσει αιτήματα εξωτερικού κόσμου στη θύρα 8081 στο ip του βατόμουρου

4.8 Κρατήστε το ip για το MAC βατόμουρου σε ρύθμιση DHCP, ώστε το Rpi να έχει πάντα το ίδιο ip

4.9 Στη συνέχεια, εισαγάγετε το πρόγραμμα περιήγησης σε μια συσκευή που δεν είναι συνδεδεμένη στο τοπικό δίκτυο:

yourdomain: 8081

Εισαγάγετε τα διαπιστευτήριά σας που ορίσατε στο motion.conf.

Δοκιμάστε πώς λειτουργεί το βίντεο.

4.10 για να ενημερώσετε το DDNS αυτόματη ρύθμιση της εργασίας cron. Δείτε το Quick_cron_example στο (Για μέλη -> Dynamic DNS)

Βήμα 5: Συμβουλές

5.1 Να είστε προσεκτικοί στην εγκατάσταση πακέτων python σε βατόμουρο. Πέρασα μια μέρα για να διορθώσω αυτό το πρόβλημα - το ζήτημα ήταν ότι το σενάριο έτρεχε καλά από την κονσόλα, αλλά δεν κάλεσα από την κίνηση κλήσης συμβάντος. Αυτό που το έκανε χειρότερο ήταν ότι τα ίχνη από το σενάριο δεν ήταν διαθέσιμα στην τελευταία περίπτωση.

Ο λόγος ήταν ότι ακολουθώντας τον οδηγό εγκατέστησα τα πακέτα για χρήστες "pi" (ο οποίος από προεπιλογή είναι στον κατάλογο /home /pi και είναι περιορισμένος για άλλους χρήστες), αλλά για να τρέξει το σενάριο ως παιδί της υπηρεσίας "κίνησης", τα πακέτα πρέπει να είναι διατίθεται και για χρήστες «κίνησης». Έτσι τελικά το διόρθωσα εγκαθιστώντας τα πακέτα ως

sudo pip3…

Αυτός δεν είναι ένας σωστός τρόπος που εξακολουθεί να λειτουργεί. Η εγκατάσταση χωρίς sudo ως pip3 -σύστημα μου έδωσε σφάλματα για κάποιο λόγο.

Αντίστοιχα το σενάριο ονομάζεται επίσης υπό sudo (βλ. Motion.conf).

Κατά τη διάρκεια αυτής της αντιμετώπισης προβλημάτων έκανα πολλές περιττές αλλαγές και δεν ήμουν σίγουρος τι είναι απαραίτητο και τώρα είμαι πολύ τεμπέλης για να τα επιστρέψω σταδιακά και να δω πότε θα σταματήσει να λειτουργεί. Ειδικότερα, χορηγούνται δικαιώματα διαχειριστή κίνησης:

pi@raspberrypi: groups $ ομάδες κίνησης

κίνηση: κίνηση adm sudo χρήστες βίντεο ήχου netdev pi

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

pi ALL = (ALL) NOPASSWD: ALL

κίνηση ALL = (ALL) NOPASSWD: ALL

Επίσης, άλλαζε κάτοχοι αρχείων και δικαιώματα παρόμοια με τη μεταφόρτωση στο Google Drive. Πιθανώς να σας βοηθήσει σε περίπτωση που έχετε παρόμοιο πρόβλημα.

5.2 Το Google Photos API επιτρέπει την προσθήκη αρχείων σε κοινόχρηστα άλμπουμ μόνο για να έχει πρόσβαση οποιοσδήποτε με το σύνδεσμο. Μην το μοιράζεστε με σύνδεσμο και διαγράψτε παλιές ταινίες ή μην τις μεταφέρετε στον κάδο απορριμμάτων ή από το άλμπουμ. Στην τελευταία περίπτωση παραμένουν στο λογαριασμό.

5.3 Ο Βοηθός φωτογραφιών Google εντοπίζει πρόσωπα, κάτι που είναι αρκετά χρήσιμο εάν η ποιότητα της κάμερας είναι καλή. Ως μπόνους κάνει φανταχτερά μέσα συλλογής και-g.webp

5.4 Προσπάθησα να χρησιμοποιήσω το μόντεμ USB 4G LTE για πρόσβαση στο Διαδίκτυο και εδώ είναι τα αποτελέσματά μου. Υπάρχει https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ ένας πολύ εύκολος οδηγός για το πώς να το κάνετε χρησιμοποιώντας το RaspAP. 5.4.3 Το Dynamic DNS δεν λειτούργησε στο δίκτυο 4G του carrie μου. Υπάρχει εξήγηση γιατί

5.5 Μετά τη χρήση αυτού του συστήματος για μερικές εβδομάδες αποδείχθηκε, αν και τα βίντεο είναι πιο βολικά για προβολή και μεταφόρτωση, το Google Photos λειτουργεί καλύτερα με τις εικόνες. Για παράδειγμα, επιτρέπει την ομαδοποίηση πραγμάτων/προσώπων που αναλύουν μόνο εικόνες και μόνο τότε αναζητούν πρόσωπα/πράγματα από τις εικόνες σε βίντεο, αλλά όχι το αντίθετο. Έτσι θα δοκιμάσω εικόνες που ανεβάζουν μάλλον βίντεο.

Συνιστάται: