Indholdsfortegnelse:

Raspberry Pi -sikkerhedskamera: 11 trin (med billeder)
Raspberry Pi -sikkerhedskamera: 11 trin (med billeder)

Video: Raspberry Pi -sikkerhedskamera: 11 trin (med billeder)

Video: Raspberry Pi -sikkerhedskamera: 11 trin (med billeder)
Video: SunFounder Mini PC Kit for Raspberry Pi - Pironman Assembly Tutorial 2024, November
Anonim
Raspberry Pi sikkerhedskamera
Raspberry Pi sikkerhedskamera

Dette er en trinvis vejledning i, hvordan du opretter et IoT, bevægelsesaktiveret sikkerhedskamera ved hjælp af en Raspberry Pi. Du lærer, hvordan du opretter en kolbe webserver og formular, der giver brugeren mulighed for at justere kameraets følsomhed og optagetid, manuelt starte/stoppe en optagelse og/eller tage et billede, der gemmes lokalt.

Forbrugsvarer

  • Raspberry Pi 3
  • Pi kamera
  • PIR bevægelsessensor
  • SD kort
  • Strømkilde

Trin 1: Saml hardware

Saml hardware
Saml hardware
Saml hardware
Saml hardware
Saml hardware
Saml hardware
Saml hardware
Saml hardware

Mens Pi er slukket, skal du indsætte micro-SD-kortet i Pi. Sæt kameramodulets båndkabel i kameramodulporten på Pi. Tilslut derefter de 3 ben (mærket VCC, OUT og GND) på PRI -bevægelsesdetektoren til Pi's GPIO -ben. Tilslut VCC til 5,5 V strøm, GND til jord, og OUT til pin 11 på Pi.

Trin 2: Sørg for, at din Pi er forbundet til internettet

Sørg for, at din Pi er forbundet til internettet
Sørg for, at din Pi er forbundet til internettet

Tænd nu for Pi ved at slutte den til en strømkilde, og kontroller, at du har forbindelse til internettet ved hjælp af ping -kommandoen. Hvis du ikke ved, hvordan du slutter din Pi til internettet, skal du klikke her.

sudo ping www.google.com

Hvis du har succes, skal du se, at data modtages af google.

Derudover kan du bruge ifconfig til at se din IP -adresse.

sudo ifconfig

Trin 3: Konfigurer kameraet

Brug følgende kommando til at åbne konfigurationsgrænsefladen, og aktiver kameraet i "grænseflademuligheder".

sudo raspi-config

Efter genstart kan du vise status for dit kamera for at sikre, at det er korrekt tilsluttet.

vcgencmd get_camera

Til sidst skal du installere picamera -modulet.

pip installer picamera

Trin 4: Installer kolbe

Installer kolben og kolbe-afslappende modul til Python:

sudo apt-get install python-dev python-pip

python -m pip install kolbe kolbe -afslappende

Dernæst vil vi installere et python -kolbe -modul, der bruges til at oprette formularer.

pip installer kolbe-wtf

Trin 5: Opret en formklasse

Lav et bibliotek kaldet iotProject for at gemme alle dine filer i.

sudo mkdir iotProject

Opret en python -fil med navnet "camControl.py".

sudo nano camControl.py

I denne fil opretter vi vores formularklasse, som giver os mulighed for at oprette en webformular med tekstbokse og en rullemenu, så brugeren kan ændre kameraets indstillinger, manuelt starte/stoppe en optagelse og optage video.

fra flask_wtf import FlaskFormfrom wtforms.validatorer import DataRequired from wtforms import SubmitField from wtforms import validators, IntegerField, BooleanField, SelectField

klasse camFrame (FlaskForm):

videoDuration = IntegerField ('Optagelsestid (i sekunder)')

følsomhed = IntegerField ('Bevægelsesfølsomhed (område 2500-10000) n Jo højere tallet er, jo mindre følsomt er kameraet', validators = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out of Range')])

options = SelectField ('Valgmuligheder', valg = [('ingen', 'Ingen handling'), ('rec', 'Start optagelse'), ('stop', 'Stop optagelse'), ('billede', 'Tag billede')])

submit = SubmitField ('Send')

Trin 6: Opret en kolbe skabelon

Opret en kolbe skabelon
Opret en kolbe skabelon

For at oprette brugergrænsefladen skal du designe en kolbe -skabelon, der bruger den formular, du lige har oprettet. Denne fil vil blive skrevet i html og gemt i en mappe kaldet skabeloner, som skal være i det samme bibliotek som din formular.

Inde i din skabelonmappe skal du oprette en fil kaldet index.html. Inden for denne fil skal du replikere koden vist ovenfor.

Trin 7: Gengiv skabelonen

Nu er det tid til at oprette en fil, der gengiver skabelonen. Opret en fil med navnet appCam.py (sørg for, at du ikke længere er i skabelonmappen). Ethvert dynamisk indhold, der bruges i skabelonen, skal bruges som et navngivet argument i opkaldet til render_template ().

import camControl fra kolbe import Flask, render_template, request, Respons from flask_restful import Resource, Api, reqparse

app = kolbe (_ navn_)

app.config ['SECRET_KEY'] = '13542' api = Api (app)

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Videoens varighed, når bevægelse registreres') parser.add_argument ('sens', type = int, help = 'Bevægelsesniveau, der kræves for at udløse en optagelse') parser.add_argument ('opt', type = str, help = 'Optag en video manuelt eller tag et billede')

klasseopdatering (ressource):

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #skriv til tekstfilen, der taler til kameraet, der kører parallelt 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 ('/', metoder = ['GET', 'POST'])

def index (): "" "Controller startside" "" form = camControl.camFrame () #dette er en form, hvis request.method == 'POST': print (request.form) args = [i for i i anmodning.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 under cameraSettingsFile.write (args [1] [1] + '\ n') #write sens cameraSettingsFile.write (args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {"filnavn": "image.jpg"} return render_template ('index.html', form = form, image = imageDiction)

api.add_resource (opdatering, '/update/')

hvis _name_ == '_main_':

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

Trin 8: Opret en kameraoperatørklasse

Nu vil vi oprette en fil kaldet camOperator.py. I den vil vi lave en kameraklasse med metoder til betjening af kameraet ved hjælp af de allerede tilgængelige PiCamera -funktioner. Vi vil bruge en forekomst af dette objekt i det næste trin, hvor vi vil kombinere kameraets og bevægelsessensorens funktionalitet.

De metoder, der er defineret i denne klasse, ændrer indstillingerne for "registrering" på sikkerhedskameraet ved hjælp af følsomheds- og varighedsinput, som brugeren angiver, samtidig med at standardværdier for disse variabler etableres, hvis brugerinput ikke er til stede.

importer RPi. GPIO som GPIOimport tid importer picamera fra datetime import datetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

opdage = 0

klasse kamera Operatør:

def _init _ (selv):

#konstruktør self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "ingen"

def record (self, dur):

#Records for den givne varighed indstillet af controlleren 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 operation (self, dur, sens):

#Hovedbetjening af kameraet, som konstant kontrollerer, om et menneske er i nærheden, hvis et menneske bliver længe nok, begynder vi at optage! global detekter i = GPIO.input (11) hvis i == 0: #Når output fra bevægelsessensor er LOW detekter = 0 time.sleep (0,1) elif i == 1: #Når output fra bevægelsessensor er HIGH print (" bevægelse registreret " +str (detekter)) hvis detekt>> sens*10: self.record (dur) print (" OPTAGET ") detekter = 0 time.sleep (0,1) detekter += 1

Trin 9: Opret postmodulet

Det sidste program, der er nødvendigt til dette projekt, vil blive skrevet i en fil med navnet rec.py. Denne fil fortæller kameraet, hvornår der skal optages, hvor lang tid der skal optages, og om/hvornår der skal tages et billede. Det gør det ved konstant at kontrollere og læse brugerdataene, der er skrevet til tekstfilen fra trin 5. Hvis filen er blevet opdateret, justeres følsomheds- og varighedsværdierne derefter, og derefter, hvis der optages eller optages et billede, gemmer det indholdet til pi, enten i et.h264 eller-j.webp

'' 'Kører parallelt med kolbserveren, læser kontrolvariabler indstillet af serverformularerne. Serverstyringsvariablerne indstilles i en separat fil, når formularerne er indsendt. Rec -modulet læser disse variabler og opdaterer kameraet baseret på dem. '' 'import camOperator fra datetime import datetime import tid

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #here, vi åbner og lukker i skrivemodus for at slette indholdet i filen, inden hovedsløjfen kører

#En kontinuerlig sløjfe, der ser for at se, om mennesker er i nærheden. Hvis de er, så

#kameraet begynder at optage. Denne funktion kører parallelt med kolben #server, der styrer dette kamera. recordingInProcess = False while True: #check/record if (recordingInProcess == False): rc.operation (rc.dur, rc.sens) #ændre kameraets indstillinger baseret på server cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 for indstilling i cameraSettingsFile.readlines (): hvis settingNum == 0: #Duration change rc.dur = int (setting) elif settingNum == 1: #Sensitivity change rc.sens = int (setting) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#udfør en handling

# hvis rc.opt == "ingen": # fortsæt hvis rc.opt == "rec / n" og recordingInProcess == Falsk: print ("Kører postkommando fra controller") #Gener navn til video baseret på aktuelt tidsvideonavn = "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" og recordingInProcess == True: print ("Stopping record command from controller") rc.cam.stop_recording () recordingInProcess = Falsk cameraSettingsFile = åben ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile. skriv ("none / n") rc.opt = "none / n" elif rc.opt == "pic / n" og recordingInProcess == Falsk: print ("Snap en pic -kommando fra controlleren") 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. write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Trin 10: Start serveren

Start serveren
Start serveren

SSH ind i pi og start serveren ved hjælp af kommandolinjen vist ovenfor.

Trin 11: PRØV DET

PRØVE DET!
PRØVE DET!
PRØVE DET!
PRØVE DET!

Få adgang til websiden ved hjælp af IP -adressen, og du bør kunne styre kameraet eksternt!

Anbefalede: