Innehållsförteckning:
- Tillbehör
- Steg 1: Montera hårdvaran
- Steg 2: Se till att din Pi är ansluten till Internet
- Steg 3: Ställ in kameran
- Steg 4: Installera kolv
- Steg 5: Skapa en formulärklass
- Steg 6: Skapa en kolvmall
- Steg 7: Gör mallen igen
- Steg 8: Skapa en kameraoperatörsklass
- Steg 9: Skapa postmodulen
- Steg 10: Starta servern
- Steg 11: PRÖVA DET
Video: Raspberry Pi säkerhetskamera: 11 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:39
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
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
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
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
SSH i pi och starta servern med kommandoraden som visas ovan.
Steg 11: PRÖVA DET
Gå till webbsidan med hjälp av IP -adressen och du bör kunna styra kameran på distans!
Rekommenderad:
Raven Pi säkerhetskamera: 7 steg (med bilder)
Raven Pi säkerhetskamera: Denna plastkorp njuter av ett nytt liv efter livet som en praktisk men läskig säkerhetskamera, Raven Pi. Den har en Raspberry Pi i magen och en Pi -kamera inbäddad i nacken och tar HD -video när rörelse detekteras. I samma ögonblick är det
Enklaste webbkamera som säkerhetskamera - rörelsedetektering och mejlade bilder: 4 steg
Enklaste webbkamera som säkerhetskamera - rörelsedetektering och mejlade bilder: Du behöver inte längre ladda ner eller konfigurera programvara för att få rörelsedetekterade bilder från din webbkamera till din e -post - använd bara din webbläsare. Använd en uppdaterad webbläsare Firefox, Chrome, Edge eller Opera på Windows, Mac eller Android för att ta bilden
DIY Professional Open Source Night Vision -säkerhetskamera: 10 steg (med bilder)
DIY Professional Open Source Night Vision Security Camera: I denna nya handledning kommer vi tillsammans att göra vår Raspberry Pi videoövervakningskamera med öppen källkod. alla kopplade till vår Jeed
WoodThing IOT -säkerhetskamera: 8 steg (med bilder)
WoodThing IOT säkerhetskamera: Detta är en kraftfull IP -kamera baserad på Raspberry PI. Den kör motionEyeOS, så den kan användas för att hantera flera fjärr -IP -kameror samt låta dig ansluta upp till fyra extra billiga USB -webbkameror. Funktioner: USB -driven, rörelsedetektering med s
VHS Library Pi säkerhetskamera: 3 steg (med bilder)
VHS Library Pi Security Camera: Detta är ett gammalt VHS Video Library -fodral som nu ger ett perfekt hem för en Raspberry Pi -säkerhetskamera. Fodralet innehåller en Pi Zero och kameran tittar fram genom ryggraden i den falska boken. Det är en riktigt enkel byggnad med ett gammaldags utseende