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

Κάμερα ασφαλείας Raspberry Pi: 11 βήματα (με εικόνες)
Κάμερα ασφαλείας Raspberry Pi: 11 βήματα (με εικόνες)

Βίντεο: Κάμερα ασφαλείας Raspberry Pi: 11 βήματα (με εικόνες)

Βίντεο: Κάμερα ασφαλείας Raspberry Pi: 11 βήματα (με εικόνες)
Βίντεο: Πώς να χρησιμοποιήσω το Raspberry Pi με την Dr Sally Le Page 2024, Νοέμβριος
Anonim
Κάμερα ασφαλείας Raspberry Pi
Κάμερα ασφαλείας Raspberry Pi

Αυτό είναι βήμα προς βήμα οδηγίες για το πώς μπορείτε να δημιουργήσετε μια κάμερα ασφαλείας IoT, ενεργοποιημένη με κίνηση χρησιμοποιώντας ένα Raspberry Pi. Θα μάθετε πώς να δημιουργείτε έναν διακομιστή και φόρμα ιστού φιάλης που επιτρέπει στον χρήστη να προσαρμόσει την ευαισθησία και τον χρόνο εγγραφής της κάμερας, να ξεκινήσει/διακόψει χειροκίνητα μια εγγραφή ή/και να τραβήξει μια φωτογραφία που θα αποθηκευτεί τοπικά.

Προμήθειες

  • Raspberry Pi 3
  • Κάμερα Pi
  • Αισθητήρας κίνησης PIR
  • κάρτα SD
  • Πηγή ενέργειας

Βήμα 1: Συναρμολογήστε το υλικό

Συναρμολογήστε το υλικό
Συναρμολογήστε το υλικό
Συναρμολογήστε το υλικό
Συναρμολογήστε το υλικό
Συναρμολογήστε το υλικό
Συναρμολογήστε το υλικό
Συναρμολογήστε το υλικό
Συναρμολογήστε το υλικό

Ενώ το Pi είναι απενεργοποιημένο, τοποθετήστε την κάρτα micro-SD στο Pi. Τοποθετήστε το καλώδιο κορδέλας της μονάδας κάμερας στη θύρα της μονάδας κάμερας στο Pi. Στη συνέχεια, συνδέστε τις 3 ακίδες (με σήμανση VCC, OUT και GND) του ανιχνευτή κίνησης PRI στις ακίδες GPIO του Pi. Συνδέστε το VCC σε 5,5V ισχύος, το GND στη γείωση και το OUT στο pin 11 στο Pi.

Βήμα 2: Βεβαιωθείτε ότι το Pi σας είναι συνδεδεμένο στο Διαδίκτυο

Βεβαιωθείτε ότι το Pi σας είναι συνδεδεμένο στο Διαδίκτυο
Βεβαιωθείτε ότι το Pi σας είναι συνδεδεμένο στο Διαδίκτυο

Τώρα, ενεργοποιήστε το Pi συνδέοντάς το σε μια πηγή ενέργειας και βεβαιωθείτε ότι είστε συνδεδεμένοι στο διαδίκτυο χρησιμοποιώντας την εντολή ping. Εάν δεν γνωρίζετε πώς να συνδέσετε το Pi σας στο διαδίκτυο, κάντε κλικ εδώ.

sudo ping www.google.com

Εάν είστε επιτυχημένοι, θα πρέπει να δείτε ότι τα δεδομένα λαμβάνονται από το Google.

Επιπλέον, μπορείτε να χρησιμοποιήσετε το ifconfig για να δείτε τη διεύθυνση IP σας.

sudo ifconfig

Βήμα 3: Ρύθμιση της κάμερας

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

sudo raspi-config

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

vcgencmd get_camera

Τέλος, εγκαταστήστε τη μονάδα picamera.

pip εγκατάσταση picamera

Βήμα 4: Εγκατάσταση Flask

Εγκαταστήστε τη μονάδα φιάλης και ηρεμίας φιάλης για την Python:

sudo apt-get install python-dev python-pip

python -m pip install φιάλη φιάλη -ξεκούραστη

Στη συνέχεια, θα εγκαταστήσουμε μια μονάδα φιάλης python που χρησιμοποιείται για τη δημιουργία φορμών.

pip εγκατάσταση φιάλης-wtf

Βήμα 5: Δημιουργήστε μια κλάση φόρμας

Δημιουργήστε έναν κατάλογο που ονομάζεται iotProject για να αποθηκεύσετε όλα τα αρχεία σας.

sudo mkdir iotProject

Δημιουργήστε ένα αρχείο python με το όνομα "camControl.py".

sudo nano camControl.py

Σε αυτό το αρχείο θα δημιουργήσουμε την κατηγορία φόρμας, η οποία μας επιτρέπει να δημιουργήσουμε μια φόρμα ιστού με πλαίσια κειμένου και ένα αναπτυσσόμενο μενού για να μπορεί ο χρήστης να αλλάξει τις ρυθμίσεις της κάμερας, να ξεκινήσει/σταματήσει χειροκίνητα μια εγγραφή και να τραβήξει βίντεο.

από flask_wtf import FlaskFormfrom wtforms.validators import dataΑπαραίτητα από wtforms import SubmitField from wtforms validators import, IntegerField, BooleanField, SelectField

class camFrame (FlaskForm):

videoDuration = IntegerField («Χρόνος εγγραφής (σε δευτερόλεπτα)»)

ευαισθησία = IntegerField («Ευαισθησία κίνησης (εύρος 2500-10000) nΌσο μεγαλύτερος είναι ο αριθμός, τόσο λιγότερο ευαίσθητη είναι η κάμερα», επικυρωτές = [validators. NumberRange (min = 2500, max = 10000, μήνυμα = 'Value Out of Range')])

επιλογές = SelectField («Επιλογές», επιλογές = [(«καμία», «Καμία ενέργεια»), («rec», «Έναρξη εγγραφής»), («διακοπή», «Διακοπή εγγραφής»), ('pic', 'Take Picture')])

υποβολή = SubmitField ("Υποβολή")

Βήμα 6: Δημιουργήστε ένα πρότυπο φιάλης

Δημιουργήστε ένα πρότυπο φιάλης
Δημιουργήστε ένα πρότυπο φιάλης

Για να δημιουργήσετε τη διεπαφή χρήστη, πρέπει να σχεδιάσετε ένα πρότυπο Flask το οποίο χρησιμοποιεί τη φόρμα που μόλις δημιουργήσατε. Αυτό το αρχείο θα γραφτεί σε html και θα αποθηκευτεί σε ένα φάκελο που ονομάζεται πρότυπα, ο οποίος θα πρέπει να βρίσκεται στον ίδιο κατάλογο με τη φόρμα σας.

Μέσα στο φάκελο των προτύπων σας, δημιουργήστε ένα αρχείο που ονομάζεται index.html. Μέσα σε αυτό το αρχείο, αντιγράψτε τον κώδικα που εμφανίζεται παραπάνω.

Βήμα 7: Αποδώστε το Πρότυπο

Τώρα ήρθε η ώρα να δημιουργήσετε ένα αρχείο που αποδίδει το πρότυπο. Δημιουργήστε ένα αρχείο με το όνομα appCam.py (βεβαιωθείτε ότι δεν είστε πλέον στο φάκελο προτύπων). Οποιοδήποτε δυναμικό περιεχόμενο που χρησιμοποιείται στο πρότυπο πρέπει να χρησιμοποιείται ως ονομαστικό όρισμα στην κλήση προς render_template ().

εισαγωγή camControl από φιάλη εισαγωγής Φιάλη, render_template, αίτημα, Απάντηση από flask_restful Import Resource, Api, reqparse

app = Φιάλη (_ όνομα_)

app.config ['SECRET_KEY'] = '13542' api = Api (εφαρμογή)

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Διάρκεια βίντεο όταν ανιχνεύεται κίνηση') parser.add_argument ('sens', type = int, help = 'Απαιτείται επίπεδο κίνησης για να ενεργοποιηθεί ηχογράφηση').add_argument ('opt', type = str, help = 'Μη αυτόματη εγγραφή βίντεο ή λήψη εικόνας')

Ενημέρωση κλάσης (πόρος):

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #write to the text text that συνομιλεί με την κάμερα που λειτουργεί παράλληλα cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (args ['dur'] + '\ n') #write dur cameraSettingsFile.write (args ['sens'] + '\ n') #write sens cameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () return {'dur': args ['dur'], 'sens': args ['sense'], 'opt': args ['opt']}

@app.route ('/', Methods = ['GET', 'POST'])

def index (): "" "Αρχική σελίδα ελεγκτή" "" form = camControl.camFrame () #αυτή είναι μια φόρμα if request.method == 'POST': print (request.form) args = [i for i in request.form.items ()] #rc.input (int (args [0] [1]), int (args [1] [1]), args [2] [1]) cameraSettingsFile = open ("cameraSettings.txt ", 'w') cameraSettingsFile.write (args [0] [1] + '\ n') #write dur cameraSettingsFile.write (args [1] [1] + '\ n') #write sens cameraSettingsFile.write (args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {"filename": "image.jpg"} επιστροφή render_template ('index.html', form = form, image = imageDictionary)

api.add_resource (Ενημέρωση, '/update/')

αν _name_ == '_main_':

app.run (host = '0.0.0.0', port = 80, debug = True, threaded = True)

Βήμα 8: Δημιουργήστε μια κατηγορία χειριστή κάμερας

Τώρα θέλουμε να δημιουργήσουμε ένα αρχείο που ονομάζεται camOperator.py. Σε αυτό θα φτιάξουμε μια κατηγορία κάμερας με μεθόδους λειτουργίας της κάμερας, χρησιμοποιώντας τις ήδη διαθέσιμες λειτουργίες PiCamera. Θα χρησιμοποιήσουμε μια παρουσία αυτού του αντικειμένου στο επόμενο βήμα όπου θα συνδυάσουμε τη λειτουργικότητα της κάμερας και του αισθητήρα κίνησης.

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

εισαγωγή RPi. GPIO ως GPIOimport time import picamera from datetime import dataetetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

ανίχνευση = 0

κάμερα κατηγορίας Λειτουργός:

def _init _ (self):

#constructor self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "κανένα"

def record (self, dur):

#Εγγραφές για τη δεδομένη διάρκεια που έχει οριστεί από τον ελεγκτή videoName = str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') Self.cam.start_recording ('/home/pi/iotProject/videos/' + videoName + '.h264') time.sleep (dur) self.cam.stop_recording ()

def λειτουργία (self, dur, sens):

#Κύρια λειτουργία της κάμερας η οποία ελέγχει συνεχώς για να δει αν ένας άνθρωπος είναι κοντά, αν ένας άνθρωπος μείνει αρκετά καιρό γύρω, ξεκινάμε την εγγραφή! καθολική ανίχνευση i = GPIO.input (11) αν i == 0: #Όταν η έξοδος από τον αισθητήρα κίνησης είναι LOW detection = 0 time.sleep (0.1) elif i == 1: #Όταν η έξοδος από τον αισθητήρα κίνησης είναι Υψηλή εκτύπωση (" ανίχνευση κίνησης " +str (ανίχνευση)) αν ανιχνεύσει> = sens*10: self.record (dur) print (" RECORDED ") detect = 0 time.sleep (0.1) detector += 1

Βήμα 9: Δημιουργήστε την ενότητα εγγραφής

Το τελευταίο πρόγραμμα που απαιτείται για αυτό το έργο θα γραφτεί σε ένα αρχείο με το όνομα rec.py. Αυτό το αρχείο ενημερώνει την κάμερα πότε πρέπει να εγγράψει, πόσο χρόνο να εγγράψει και αν/πότε να τραβήξει μια φωτογραφία. Το κάνει αυτό ελέγχοντας και διαβάζοντας συνεχώς τα δεδομένα χρήστη που έχουν γραφτεί στο αρχείο κειμένου από το βήμα 5. Εάν το αρχείο έχει ενημερωθεί, προσαρμόζει ανάλογα τις τιμές ευαισθησίας και διάρκειας και στη συνέχεια, εάν τραβήξει μια εγγραφή ή εικόνα, αποθηκεύει το περιεχόμενο σε το pi, είτε σε μορφή αρχείου.h264 είτε.jpg.

'' 'Λειτουργεί παράλληλα με το διακομιστή φιάλης, διαβάζοντας μεταβλητές ελέγχου που ορίζονται από τις φόρμες του διακομιστή. Οι μεταβλητές ελέγχου διακομιστή ορίζονται σε ξεχωριστό αρχείο μόλις υποβληθούν οι φόρμες. Η μονάδα rec διαβάζει αυτές τις μεταβλητές και ενημερώνει την κάμερα με βάση αυτές. '' 'εισαγωγή camOperator από ώρα εισαγωγής ημερομηνίας ώρας εισαγωγής χρόνου

rc = camOperator.cameraOperator ()

cameraSettingsFile = ανοιχτό ("cameraSettings.txt", 'w') cameraSettingsFile.close () #εδώ, ανοίγουμε και κλείνουμε σε λειτουργία εγγραφής για να διαγράψουμε τα περιεχόμενα μέσα στο αρχείο πριν τρέξει ο κύριος βρόχος

#Ένας συνεχής βρόχος που παρακολουθεί για να δει αν οι άνθρωποι είναι κοντά. Αν είναι, τότε

#η κάμερα ξεκινά την εγγραφή. Αυτή η λειτουργία εκτελείται παράλληλα με τον διακομιστή #φιάλης που ελέγχει αυτήν την κάμερα. recordingInProcess = False while True: #check/record if (recordingInProcess == False): rc.operation (rc.dur, rc.sens) #change the settings of the camera based on the server cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 για ρύθμιση στην κάμεραSettingsFile.readlines (): if settingNum == 0: #Duration change rc.dur = int (setting) elif settingNum == 1: #Αλλαγή ευαισθησίας rc.sens = int (ρύθμιση) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#εκτελέστε μια ενέργεια

# if rc.opt == "none": # continue if rc.opt == "rec / n" and recordingInProcess == False: print ("Εκτέλεση εντολής εγγραφής από τον ελεγκτή") #Generate name for video based on the current time timeName = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject /videos/' + videoName +'.h264 ') recordingInProcess = True elif rc.opt == "stop / n" and recordingInProcess == True: print ("Stopping record command from controller") rc.cam.stop_recording () recordingInProcess = False cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile εγγραφή ("none / n") rc.opt = "none / n" elif rc.opt == "pic / n" and recordingInProcess == False: print ("Snap a pic command from the controller") pictureName = "snappedPic_ "+str (datetime.now ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.replace ('. ',') rc.cam.st art_preview () time.sleep (5) rc.cam.capture ('pictures/' + pictureName + '.jpg') rc.cam.stop_preview () cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile. εγγραφή (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Βήμα 10: Εκκινήστε τον διακομιστή

Εκκινήστε τον διακομιστή
Εκκινήστε τον διακομιστή

SSH στο pi και ξεκινήστε τον διακομιστή χρησιμοποιώντας τη γραμμή εντολών που φαίνεται παραπάνω.

Βήμα 11: ΔΟΚΙΜΑΣΤΕ ΤΟ

ΔΟΚΙΜΑΣΕ ΤΟ!
ΔΟΚΙΜΑΣΕ ΤΟ!
ΔΟΚΙΜΑΣΕ ΤΟ!
ΔΟΚΙΜΑΣΕ ΤΟ!

Αποκτήστε πρόσβαση στην ιστοσελίδα χρησιμοποιώντας τη διεύθυνση IP και θα πρέπει να μπορείτε να ελέγχετε την κάμερα από απόσταση!

Συνιστάται: