Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Sett sammen maskinvaren
- Trinn 2: Sørg for at Pi er koblet til Internett
- Trinn 3: Sett opp kameraet
- Trinn 4: Installer kolbe
- Trinn 5: Lag en skjemaklasse
- Trinn 6: Lag en kolbe -mal
- Trinn 7: Gjør malen
- Trinn 8: Lag en kameraoperatørklasse
- Trinn 9: Lag postmodulen
- Trinn 10: Start serveren
- Trinn 11: PRØV DET
Video: Raspberry Pi sikkerhetskamera: 11 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Dette er en trinnvis instruksjon om hvordan du lager et IoT, bevegelsesaktivert sikkerhetskamera med en Raspberry Pi. Du vil lære hvordan du oppretter en kolbe -webserver og skjema som lar brukeren justere kameraets følsomhet og opptakstid, starte/stoppe et opptak manuelt og/eller ta et bilde som vil bli lagret lokalt.
Rekvisita
- Raspberry Pi 3
- Pi kamera
- PIR bevegelsessensor
- SD kort
- Strømkilde
Trinn 1: Sett sammen maskinvaren
Mens Pi er slått av, setter du inn micro-SD-kortet i Pi. Sett båndkabelen til kameramodulen inn i kameramodulporten på Pi. Koble deretter de 3 pinnene (merket VCC, OUT og GND) til PRI -bevegelsesdetektoren til Pi's GPIO -pinner. Koble VCC til 5,5 V strøm, GND til jord, og OUT til pinne 11 på Pi.
Trinn 2: Sørg for at Pi er koblet til Internett
Slå på Pi ved å koble den til en strømkilde og bekreft at du er koblet til internett ved hjelp av ping -kommandoen. Hvis du ikke vet hvordan du kobler din Pi til internett, klikk her.
sudo ping www.google.com
Hvis du lykkes, bør du se at data blir mottatt av google.
I tillegg kan du bruke ifconfig for å se IP -adressen din.
sudo ifconfig
Trinn 3: Sett opp kameraet
Bruk følgende kommando for å åpne konfigurasjonsgrensesnittet, og aktiver kameraet i "grensesnittalternativer".
sudo raspi-config
Etter omstart kan du vise kameraets status for å sikre at det er riktig tilkoblet.
vcgencmd get_camera
Til slutt installerer du picamera -modulen.
pip installer picamera
Trinn 4: Installer kolbe
Installer kolben og kolbe-avslappende modul for Python:
sudo apt-get install python-dev python-pip
python -m pip installere kolbe kolbe -avslappende
Deretter vil vi installere en python -kolbe -modul som brukes til å lage skjemaer.
pip installere flask-wtf
Trinn 5: Lag en skjemaklasse
Lag en katalog som heter iotProject for å lagre alle filene dine i.
sudo mkdir iotProject
Lag en python -fil med navnet "camControl.py".
sudo nano camControl.py
I denne filen vil vi lage vår formklasse, som lar oss lage et webskjema med tekstbokser og en rullegardinmeny for at brukeren kan endre kameraets innstillinger, starte/stoppe et opptak manuelt og ta opp video.
fra flask_wtf import FlaskFormfrom wtforms.validators import DataRequired from wtforms import SubmitField from wtforms import validators, IntegerField, BooleanField, SelectField
class camFrame (FlaskForm):
videoDuration = IntegerField ('Opptakstid (i sekunder)')
sensitivitet = HeltallFelt ('Bevegelsesfølsomhet (område 2500-10000) n Jo høyere tall, jo mindre følsomt er kameraet', validators = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out of Range')])
options = SelectField ('Options', options = [('none', 'No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('bilde', 'Ta bilde')])
submit = SubmitField ('Send')
Trinn 6: Lag en kolbe -mal
For å opprette brukergrensesnittet må du designe en kolbe -mal som bruker skjemaet du nettopp har opprettet. Denne filen vil bli skrevet i html og lagret i en mappe som heter maler, som skal være i samme katalog som skjemaet ditt.
Lag en fil som heter index.html inne i malen din. I denne filen, repliker du koden vist ovenfor.
Trinn 7: Gjør malen
Nå er det på tide å lage en fil som gjengir malen. Lag en fil som heter appCam.py (sørg for at du ikke lenger er i malmappen). Eventuelt dynamisk innhold som brukes i malen, må brukes som et navngitt argument i oppfordringen til render_template ().
import camControl fra flaske importflaske, 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 varighet når bevegelse oppdages') parser.add_argument ('sens', type = int, help = 'Bevegelsesnivå som kreves for å utløse et opptak') parser.add_argument ('opt', type = str, help = 'Ta opp en video manuelt eller ta et bilde')
klasseoppdatering (ressurs):
#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #write til tekstfilen som snakker med kameraet som kjø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 ('/', methods = ['GET', 'POST'])
def index (): "" "Controller startside" "" form = camControl.camFrame () #dette er et skjema hvis request.method == 'POST': print (request.form) args = [i for i på forespørsel.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"} return render_template ('index.html', form = form, image = imageDiction)
api.add_resource (oppdatering, '/update/')
hvis _name_ == '_main_':
app.run (host = '0.0.0.0', port = 80, debug = True, threaded = True)
Trinn 8: Lag en kameraoperatørklasse
Nå vil vi lage en fil som heter camOperator.py. I den vil vi lage en kameraklasse med metoder for å betjene kameraet, ved å bruke de allerede tilgjengelige PiCamera -funksjonene. Vi vil bruke en forekomst av dette objektet i neste trinn hvor vi vil kombinere funksjonaliteten til kameraet og bevegelsessensoren.
Metodene som er definert i denne klassen, endrer "post" -innstillingene på sikkerhetskameraet ved hjelp av sensitivitets- og varighetsinngangene som brukeren gir, samtidig som standardverdier for disse variablene opprettes hvis brukerinngang ikke er tilstede.
importer RPi. GPIO som GPIOimport tid importer picamera fra datetime import datetime
GPIO.setmode (GPIO. BOARD)
GPIO.setup (11, GPIO. IN)
oppdage = 0
klasse kamera Operatør:
def _init _ (self):
#konstruktør self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "ingen"
def -post (selv, dur):
#Records for den angitte varigheten satt av kontrolleren 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 operasjon (selv, dur, sens):
#Hovedfunksjonen til kameraet som hele tiden sjekker om et menneske er i nærheten, hvis et menneske blir værende lenge nok, begynner vi å ta opp! global detekter i = GPIO.inngang (11) hvis i == 0: #Når utdata fra bevegelsessensor er LÅG detekter = 0 time.sleep (0,1) elif i == 1: #Når utgang fra bevegelsessensor er HØY utskrift (" bevegelse oppdaget " +str (detekter)) hvis detekter>> sens*10: self.record (dur) print (" RECORDED ") detect = 0 time.sleep (0.1) detect += 1
Trinn 9: Lag postmodulen
Det siste programmet som trengs for dette prosjektet vil bli skrevet i en fil som heter rec.py. Denne filen forteller kameraet når det skal tas opp, hvor lenge det skal tas opp, og om/når det skal tas et bilde. Den gjør dette ved å konstant sjekke og lese brukerdataene som er skrevet til tekstfilen fra trinn 5. Hvis filen er oppdatert, justerer den følsomhets- og varighetsverdiene deretter, og hvis det tas et opptak eller et bilde, lagrer det innholdet til pi, enten i.h264 eller-j.webp
'' 'Kjører parallelt med kolbserveren og leser kontrollvariabler satt av serverskjemaene. Serverkontrollvariablene settes i en egen fil når skjemaene er sendt inn. Rec -modulen leser disse variablene og oppdaterer kameraet basert på dem. '' 'import camOperator fra datetime import datetime import tid
rc = camOperator.cameraOperator ()
cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #here, vi åpner og lukker i skrivemodus for å slette innholdet i filen før hovedsløyfen kjøres
#En kontinuerlig sløyfe som ser på om mennesker er i nærheten. Hvis de er det, da
#kameraet begynner å ta opp. Denne funksjonen kjøres parallelt med kolben #server som styrer dette kameraet. recordingInProcess = False while True: #check/record if (recordingInProcess == False): rc.operation (rc.dur, rc.sens) #endre innstillingene til kameraet basert på serveren cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 for innstilling 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 ()
#utføre en handling
# if rc.opt == "none": # continue if rc.opt == "rec / n" and recordingInProcess == False: print ("Running record command from controller") #Generate 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" og 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. write ("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 ('images/' + 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"
Trinn 10: Start serveren
SSH inn i pi og start serveren ved hjelp av kommandolinjen vist ovenfor.
Trinn 11: PRØV DET
Få tilgang til websiden ved hjelp av IP -adressen, og du bør kunne kontrollere kameraet eksternt!
Anbefalt:
Raven Pi sikkerhetskamera: 7 trinn (med bilder)
Raven Pi sikkerhetskamera: Denne plastkorpen nyter et nytt liv etter livet som et praktisk, men skummelt sikkerhetskamera, Raven Pi. Den har en Raspberry Pi i magen og et Pi -kamera innebygd i nakken, og tar opp HD -video når det oppdages bevegelse. I samme øyeblikk er det
Enkleste webkamera som sikkerhetskamera - bevegelsesdeteksjon og bilder via e -post: 4 trinn
Enkleste webkamera som sikkerhetskamera - bevegelsesdeteksjon og bilder på e -post: Du trenger ikke lenger å laste ned eller konfigurere programvare for å få bevegelsesdetekterte bilder fra webkameraet til e -posten din - bare bruk nettleseren. Bruk en oppdatert Firefox, Chrome, Edge eller Opera-nettleser på Windows, Mac eller Android for å ta bildet
Komme i gang med ESP32 CAM - Streaming av video ved bruk av ESP CAM over Wifi - ESP32 sikkerhetskamera -prosjekt: 8 trinn
Komme i gang med ESP32 CAM | Streaming av video ved bruk av ESP CAM over Wifi | ESP32 Security Camera Project: I dag lærer vi hvordan du bruker dette nye ESP32 CAM -kortet og hvordan vi kan kode det og bruke det som et sikkerhetskamera og få en streaming video over wifi
WoodThing IOT sikkerhetskamera: 8 trinn (med bilder)
WoodThing IOT sikkerhetskamera: Dette er en kraftig IP -kamera basert på Raspberry PI. Den kjører motionEyeOS, så den kan brukes til å administrere flere eksterne IP -kameraer, i tillegg til at du kan koble til opptil fire ekstra billige USB -webkameraer. Funksjoner: USB -drevet, bevegelsessensor med s
VHS Library Pi sikkerhetskamera: 3 trinn (med bilder)
VHS Library Pi Security Camera: Dette er et gammelt VHS Video Library -tilfelle som nå gir et perfekt hjem for et Raspberry Pi -sikkerhetskamera. Etuiet inneholder en Pi Zero og kameraet titter ut gjennom ryggraden til den falske boken. Det er en veldig enkel konstruksjon med et gammeldags utseende