Kamera e sigurisë Raspberry Pi: 11 hapa (me fotografi)
Kamera e sigurisë Raspberry Pi: 11 hapa (me fotografi)
Anonim
Kamera e sigurisë Raspberry Pi
Kamera e sigurisë Raspberry Pi

Ky është një udhëzues hap pas hapi se si të krijoni një kamerë sigurie të IoT, të aktivizuar me lëvizje duke përdorur një Raspberry Pi. Do të mësoni se si të krijoni një web server dhe formë që lejon përdoruesin të rregullojë ndjeshmërinë e kamerës dhe kohën e regjistrimit, të fillojë/ndalojë manualisht një regjistrim dhe/ose të bëjë një fotografi që do të ruhet në nivel lokal.

Furnizimet

  • Mjedër Pi 3
  • Kamera Pi
  • Sensori i lëvizjes PIR
  • kartë SD
  • Burimi i energjisë

Hapi 1: Mblidhni pajisjen

Mblidhni harduerin
Mblidhni harduerin
Mblidhni harduerin
Mblidhni harduerin
Mblidhni harduerin
Mblidhni harduerin
Mblidhni harduerin
Mblidhni harduerin

Ndërsa Pi është i fikur, futni kartën micro-SD në Pi. Futni kabllon e shiritit të modulit të kamerës në portën e modulit të kamerës në Pi. Pastaj, lidhni 3 kunjat (të etiketuar VCC, OUT dhe GND) të detektorit të lëvizjes PRI me kunjat GPIO të Pi. Lidhni VCC në fuqinë 5.5V, GND në tokë dhe OUT në pin 11 në Pi.

Hapi 2: Sigurohuni që Pi juaj të jetë i lidhur me internetin

Sigurohuni që Pi juaj të jetë i lidhur me internetin
Sigurohuni që Pi juaj të jetë i lidhur me internetin

Tani, ndizni Pi duke e lidhur atë me një burim energjie dhe verifikoni që jeni lidhur me internetin duke përdorur komandën ping. Nëse nuk dini si ta lidhni Pi -në tuaj në internet, klikoni këtu.

sudo ping www.google.com

Nëse jeni të suksesshëm, duhet të shihni që të dhënat po merren nga google.

Për më tepër, mund të përdorni ifconfig për të parë adresën tuaj IP.

sudo ifconfig

Hapi 3: Vendosni kamerën

Përdorni komandën e mëposhtme për të hapur ndërfaqen e konfigurimit dhe aktivizoni kamerën në "opsionet e ndërlidhjes".

sudo raspi-config

Pas rindezjes, mund të shfaqni statusin e kamerës tuaj për të siguruar që ajo është e lidhur siç duhet.

vcgencmd get_camera

Së fundi, instaloni modulin e fotografisë.

pip instaloni picamera

Hapi 4: Instaloni Flask

Instaloni modulin qetësues dhe balonë për Python:

sudo apt-get instaloni python-dev python-pip

python -m pip install flask flask -restful

Tjetra, ne do të instalojmë një modul balte python të përdorur për krijimin e formave.

pip instaloni balonë-wtf

Hapi 5: Krijoni një klasë formash

Krijoni një drejtori të quajtur iotProject për të ruajtur të gjithë skedarët tuaj.

sudo mkdir iotProjekt

Krijoni një skedar python të quajtur "camControl.py".

sudo nano camControl.py

Në këtë skedar ne do të krijojmë klasën tonë të formave, e cila na lejon të krijojmë një formë në internet me kuti teksti dhe një menu zbritëse që përdoruesi të jetë në gjendje të ndryshojë cilësimet e kamerës, të fillojë/ndalojë manualisht një regjistrim dhe të kapë video.

nga flask_wtf import FlaskFormfrom wtforms.validators import Data Të kërkuara nga wtforms import SubmitField from wtforms import validators, IntegerField, BooleanField, SelectField

klasa camFrame (FlaskForm):

videoDuration = IntegerField ('Koha e Regjistrimit (në sekonda)')

ndjeshmëri = IntegerField ("Ndjeshmëria në lëvizje (diapazoni 2500-10000) nSi më i lartë numri, aq më pak i ndjeshëm është kamera ', validuesit = [validators. NumberRange (min = 2500, max = 10000, mesazh = 'Vlera jashtë rrezes')])

opsionet = SelectField ("Opsionet", zgjedhjet = [("asnjë", "Asnjë veprim"), ("rec", "Fillo regjistrimin"), ("ndalo", "Ndalo regjistrimin"), ('foto', 'Bëj fotografi')])

paraqit = SubmitField ('Paraqit')

Hapi 6: Krijoni një model në shishe

Krijoni një model shablloni
Krijoni një model shablloni

Për të krijuar ndërfaqen e përdoruesit, duhet të krijoni një model Flask i cili përdor formën që sapo keni krijuar. Ky skedar do të shkruhet në html dhe do të ruhet në një dosje të quajtur shabllone, të cilat duhet të jenë në të njëjtën drejtori me formën tuaj.

Brenda dosjes tuaj të modeleve, krijoni një skedar të quajtur index.html. Brenda këtij skedari, kopjoni kodin e treguar më lart.

Hapi 7: Bëni modelin

Tani është koha për të krijuar një skedar që jep modelin. Krijoni një skedar të quajtur appCam.py (sigurohuni që nuk jeni më në dosjen e modeleve). Çdo përmbajtje dinamike e përdorur në shabllon duhet të përdoret si një argument i emërtuar në thirrjen për render_template ().

import camControlfrom balonë import Flask, render_template, kërkesë, Përgjigje nga flak_restful import Resource, Api, reqparse

aplikacion = Flask (_ emri_)

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

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Kohëzgjatja e videos kur zbulohet lëvizja') parser.add_argument ('sens', type = int, help = 'Niveli i lëvizjes i kërkuar për të shkaktuar një regjistrim') analizues.add_argument ('opt', type = str, help = 'Regjistroni manualisht një video ose kapni një imazh')

Përditësimi i klasës (Burimi):

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #shkruani skedarin tekst që bisedon me kamerën që funksionon paralelisht me cameraSettingsFile = hapur ("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 ['sens'], 'opt': args ['opt']}

@app.route ('/', metodat = ['MERR', 'POST'])

def index (): "" "Faqja kryesore e kontrolluesit" "" form = camControl.camFrame () #kjo është një formë nëse kërkohet.metoda == 'POST': print (request.form) args = [i për i në kërkesë.form.items ()] #rc.input (int (args [0] [1]), int (args [1] [1]), args [2] [1]) cameraSettingsFile = hapur ("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') #shkruaj opt cameraSettingsFile.close () imageDictionary = {"filename": "image.jpg"} ktheje render_template ('index.html', formë = formë, imazh = imageDictionary)

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

nëse _name_ == '_majt_':

app.run (host = '0.0.0.0', port = 80, debug = E vërtetë, e filetuar = E vërtetë)

Hapi 8: Krijoni një klasë të operatorit të kamerës

Tani duam të krijojmë një skedar të quajtur camOperator.py. Në të do të bëjmë një klasë kamerash me metoda për të operuar kamerën, duke përdorur funksionet tashmë të disponueshme PiCamera. Ne do të përdorim një shembull të këtij objekti në hapin tjetër ku do të kombinojmë funksionalitetin e kamerës dhe sensorin e lëvizjes.

Metodat e përcaktuara në këtë klasë ndryshojnë cilësimet e "regjistrimit" në kamerën e sigurisë duke përdorur inputet e ndjeshmërisë dhe kohëzgjatjes që ofron përdoruesi, duke vendosur vlerat e paracaktuara për këto ndryshore nëse hyrja e përdoruesit nuk është e pranishme.

importo RPi. GPIO si GPIOimporto kohë importo picamera nga dataetime importo dataetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

zbulo = 0

kamera e klasësOperatori:

def _init _ (vetja):

#constructor self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "asnjë"

def rekord (vet, dur):

#Regjistron për kohëzgjatjen e caktuar të vendosur nga kontrolluesi 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 operacion (vet, dur, sens):

#Funksionimi kryesor i kamerës i cili kontrollon vazhdimisht për të parë nëse një njeri është afër, nëse një njeri qëndron përreth mjaft kohë, ne fillojmë të regjistrojmë! zbulimi global i = GPIO.input (11) nëse i == 0: #Kur dalja nga sensori i lëvizjes është LOW zbulo = 0 kohë. gjumë (0.1) elif i == 1: #Kur dalja nga sensori i lëvizjes është shtypje e lartë (" lëvizja e zbuluar " +str (zbulo)) nëse zbulohet> = sens*10: self.record (dur) print (" REGJISTRUAR ") zbulo = 0 kohë. gjumi (0.1) zbulon += 1

Hapi 9: Krijoni modulin e regjistrimit

Programi i fundit i nevojshëm për këtë projekt do të shkruhet në një skedar të quajtur rec.py. Ky skedar i tregon kamerës kur të regjistrojë, sa kohë të regjistrojë dhe nëse/kur të bëjë një fotografi. E bën këtë duke kontrolluar dhe lexuar vazhdimisht të dhënat e përdoruesit të shkruara në skedarin tekst nga hapi 5. Nëse skedari është azhurnuar, ai rregullon vlerat e ndjeshmërisë dhe kohëzgjatjes në përputhje me rrethanat dhe më pas, nëse merret një regjistrim ose fotografi, ruan përmbajtjen në pi, ose në një format skedari.h264 ose.jpg.

'' 'Shkon paralelisht me serverin e shisheve, duke lexuar variablat e kontrollit të vendosur nga format e serverit. Variablat e kontrollit të serverit vendosen në një skedar të veçantë pasi të dorëzohen format. Moduli rec i lexon këto ndryshore dhe përditëson kamerën bazuar në to. '' 'import camOperator nga dataetime import dataetime kohë importi

rc = camOperator.cameraOperator ()

cameraSettingsFile = hapur ("cameraSettings.txt", 'w') cameraSettingsFile.close () #këtu, ne hapim dhe mbyllim në modalitetin e shkrimit në mënyrë që të fshijmë përmbajtjen brenda skedarit para se të funksionojë laku kryesor

#Një lak i vazhdueshëm i cili shikon për të parë nëse njerëzit janë afër. Nëse janë, atëherë

#kamera fillon regjistrimin. Ky funksion funksionon paralelisht me servisin #balonë që kontrollon këtë aparat fotografik. recordingInProcess = E rreme ndërsa E vërtetë: #kontrolloni/regjistroni nëse (regjistrimiInProcess == False): rc.operation (rc.dur, rc.sens) #ndryshoni cilësimet e kamerës bazuar në serverin cameraSettingsFile = hapur ("cameraSettings.txt", 'r') settingNum = 0 për vendosjen në cameraSettingsFile.readlines (): nëse settingNum == 0: #Ndryshimi i kohëzgjatjes rc.dur = int (vendosja) elif settingNum == 1: #Ndryshimi i ndjeshmërisë rc.sens = int (vendosja) elif settingNum == 2: #Ndryshimi i veprimit rc.opt = vendosja e cilësimitNum += 1 kameraSettingsFile.close ()

#ekzekutoni një veprim

# nëse rc.opt == "asnjë": # vazhdoni nëse rc.opt == "rec / n" dhe regjistrimiInProcess == E rreme: print ("Ekzekutimi i komandës së regjistrimit nga kontrolluesi") #Gjeneroni emrin për videon bazuar në videon e emrit aktual = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject /videos/' + VideoName +'.h264 ') recordingInProcess = E vërtetë elif rc.opt == "stop / n" dhe recordingInProcess == E vërtetë: print ("Ndalimi i komandës së regjistrimit nga kontrolluesi") rc.cam.stop_recording () recordingInProcess = CameraSettingsFile e rreme = e hapur ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile shkruaj ("asnjë / n") rc.opt = "asnjë / n" elif rc.opt == "foto / n" dhe regjistrimInProcess == E rreme: print ("Shkrep një komandë fotografie nga kontrolluesi") fotoName = "snappedPic_ "+str (dataetime.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. shkruaj (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Hapi 10: Filloni serverin

Filloni Serverin
Filloni Serverin

SSH në pi dhe filloni serverin duke përdorur vijën e komandës të treguar më sipër.

Hapi 11: Provojeni

PROVOJE!
PROVOJE!
PROVOJE!
PROVOJE!

Hyni në faqen në internet duke përdorur adresën IP dhe duhet të jeni në gjendje të kontrolloni kamerën nga distanca!

Recommended: