Innehållsförteckning:

Raspberry Pi säkerhetskamera: 11 steg (med bilder)
Raspberry Pi säkerhetskamera: 11 steg (med bilder)

Video: Raspberry Pi säkerhetskamera: 11 steg (med bilder)

Video: Raspberry Pi säkerhetskamera: 11 steg (med bilder)
Video: Raspberry Pi Camera Group Test 2024, November
Anonim
Raspberry Pi säkerhetskamera
Raspberry Pi säkerhetskamera

Detta är en steg -för -steg instruktion om hur du skapar en IoT, rörelseaktiverad säkerhetskamera med en Raspberry Pi. Du kommer att lära dig hur du skapar en kolvwebbserver och ett formulär som gör att användaren kan justera kamerans känslighet och inspelningstid, starta/stoppa en inspelning manuellt och/eller ta en bild som sparas på lokalt.

Tillbehör

  • Raspberry Pi 3
  • Pi -kamera
  • PIR rörelsesensor
  • SD-kort
  • Kraftkälla

Steg 1: Montera hårdvaran

Montera hårdvaran
Montera hårdvaran
Montera hårdvaran
Montera hårdvaran
Montera hårdvaran
Montera hårdvaran
Montera hårdvaran
Montera hårdvaran

Medan Pi är avstängd sätter du in mikro-SD-kortet i Pi. Sätt i kameramodulens bandkabel i kameramodulporten på Pi. Anslut sedan de 3 stiften (märkta VCC, OUT och GND) på PRI -rörelsedetektorn till Pi: s GPIO -stift. Anslut VCC till 5,5 V ström, GND till jord och OUT till stift 11 på Pi.

Steg 2: Se till att din Pi är ansluten till Internet

Se till att din Pi är ansluten till Internet
Se till att din Pi är ansluten till Internet

Slå nu på Pi genom att ansluta den till en strömkälla och kontrollera att du är ansluten till internet med hjälp av ping -kommandot. Om du inte vet hur du ansluter din Pi till internet, klicka här.

sudo ping www.google.com

Om du lyckas bör du se att data tas emot av google.

Dessutom kan du använda ifconfig för att se din IP -adress.

sudo ifconfig

Steg 3: Ställ in kameran

Använd följande kommando för att öppna konfigurationsgränssnittet och aktivera kameran i "gränssnittsalternativ".

sudo raspi-config

Efter omstart kan du visa kamerans status för att säkerställa att den är korrekt ansluten.

vcgencmd get_camera

Slutligen, installera picamera -modulen.

pip installera picamera

Steg 4: Installera kolv

Installera kolven och kolv-vilsam modul för Python:

sudo apt-get install python-dev python-pip

python -m pip installera kolvkolv -vilsam

Därefter kommer vi att installera en python -kolvmodul som används för att skapa formulär.

pip installera kolv-wtf

Steg 5: Skapa en formulärklass

Skapa en katalog som heter iotProject för att lagra alla dina filer i.

sudo mkdir iotProject

Skapa en pythonfil med namnet "camControl.py".

sudo nano camControl.py

I den här filen skapar vi vår formulärklass, som gör att vi kan skapa ett webbformulär med textrutor och en rullgardinsmeny för att användaren ska kunna ändra kamerans inställningar, starta/stoppa en inspelning manuellt och spela in video.

från flask_wtf import FlaskFormfrom wtforms.validators import DataRequired from wtforms import SubmitField from wtforms import validators, IntegerField, BooleanField, SelectField

klass camFrame (FlaskForm):

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

känslighet = IntegerField ('Rörelsekänslighet (intervall 2500-10000) n Ju högre siffra, desto mindre känslig är kameran', validators = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out of Range')])

options = SelectField ('Options', options = [('none', 'No action'), ('rec', 'Starta inspelning'), ('stop', 'Stop inspelning'), ('bild', 'Ta bild')])

submit = SubmitField ('Submit')

Steg 6: Skapa en kolvmall

Skapa en kolvmall
Skapa en kolvmall

För att skapa användargränssnittet måste du designa en kolvmall som använder det formulär som du just skapade. Den här filen kommer att skrivas i html och lagras i en mapp som kallas mallar, som ska finnas i samma katalog som ditt formulär.

Skapa en fil som heter index.html inuti mallarna. I den här filen replikerar du koden som visas ovan.

Steg 7: Gör mallen igen

Nu är det dags att skapa en fil som gör mallen. Skapa en fil som heter appCam.py (se till att du inte längre finns i mallarna). Eventuellt dynamiskt innehåll som används i mallen måste användas som ett namngivet argument i anropet till render_template ().

import camControlfrån kolvimportkolv, render_template, begäran, Svar från flask_restful importresurs, Api, reqparse

app = kolv (_ namn_)

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

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Videoens varaktighet när rörelse detekteras') parser.add_argument ('sens', type = int, help = 'Nivå av rörelse som krävs för att utlösa en inspelning') parser.add_argument ('opt', type = str, help = 'Spela in en video manuellt eller ta en bild')

klassuppdatering (resurs):

#Stuff för wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #write till textfilen som pratar med kameran som körs parallellt 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 () returnera {'dur': args ['dur'], 'sens': args ['sense'], 'opt': args ['opt']}

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

def index (): "" "Controller startsida" "" form = camControl.camFrame () #detta är ett formulär om request.method == 'POST': print (request.form) args = [i för i på begäran.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 = {"filnamn": "image.jpg"} return render_template ('index.html', form = form, image = imageDictionary)

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

om _name_ == '_main_':

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

Steg 8: Skapa en kameraoperatörsklass

Nu vill vi skapa en fil som heter camOperator.py. I den kommer vi att göra en kameraklass med metoder för att styra kameran, med hjälp av de redan tillgängliga PiCamera -funktionerna. Vi kommer att använda en instans av detta objekt i nästa steg där vi kommer att kombinera funktionen hos kameran och rörelsesensorn.

Metoderna som definieras i den här klassen ändrar "inspelning" -inställningarna på övervakningskameran med hjälp av känslighets- och varaktighetsinmatningar som användaren tillhandahåller, samtidigt som standardvärden för dessa variabler fastställs om användarinmatning inte finns.

importera RPi. GPIO som GPIOimporttid importera picamera från datetime import datetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

detektera = 0

klass kamera Operatör:

def _init _ (själv):

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

def -post (själv, dur):

#Records för den givna varaktigheten som anges av kontrollern 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):

#Huvudmanövreringen av kameran som ständigt kontrollerar om en människa är i närheten, om en människa stannar kvar tillräckligt länge, börjar vi spela in! global detektera i = GPIO.input (11) om i == 0: #När utmatning från rörelsesensorn är LÅG detektera = 0 tid.sömn (0,1) elif i == 1: #När utmatning från rörelsesensorn är HÖG utskrift (" rörelse detekterad " +str (detektera)) om detektera> = sens*10: self.record (dur) print (" RECORDED ") detect = 0 time.sleep (0.1) detect += 1

Steg 9: Skapa postmodulen

Det sista programmet som behövs för detta projekt kommer att skrivas i en fil med namnet rec.py. Denna fil berättar för kameran när den ska spela in, hur lång tid den ska spela in och om/när den ska tas. Den gör detta genom att ständigt kontrollera och läsa användardata som skrivits till textfilen från steg 5. Om filen har uppdaterats justerar den känslighets- och varaktighetsvärdena i enlighet med detta och sedan, om en inspelning eller bild tas, sparas innehållet till pi, antingen i filformatet.h264 eller.jpg.

'' 'Körs parallellt med kolvservern, läser kontrollvariabler som anges av serverformulären. Serverkontrollvariablerna ställs in i en separat fil när formuläret har skickats in. Rec -modulen läser dessa variabler och uppdaterar kameran baserat på dem. '' 'importera camOperator från importtid från datetime import datetime

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #here, vi öppnar och stänger i skrivläge för att radera innehållet i filen innan huvudslingan körs

#En kontinuerlig slinga som tittar för att se om människor är i närheten. Om de är det, då

#kameran börjar spela in. Denna funktion körs parallellt med kolven #server som styr kameran. recordingInProcess = False while True: #check/record if (recordingInProcess == False): rc.operation (rc.dur, rc.sens) #ändra kamerans inställningar baserat på servern cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 för inställning i cameraSettingsFile.readlines (): if 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 ()

#kör en åtgärd

# if rc.opt == "none": # continue if rc.opt == "rec / n" and recordingInProcess == False: print ("Running record command from controller") #Genere name for video based on current time videoName = "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" och recordingInProcess == True: print ("Stoppar inspelningskommando från controller") rc.cam.stop_recording () recordingInProcess = Falsk kameraSettingsFile = öppen ("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" och 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. write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Steg 10: Starta servern

Starta servern
Starta servern

SSH i pi och starta servern med kommandoraden som visas ovan.

Steg 11: PRÖVA DET

TESTA!
TESTA!
TESTA!
TESTA!

Gå till webbsidan med hjälp av IP -adressen och du bör kunna styra kameran på distans!

Rekommenderad: