Orodha ya maudhui:

Kamera ya Usalama wa Raspberry Pi: Hatua 11 (na Picha)
Kamera ya Usalama wa Raspberry Pi: Hatua 11 (na Picha)

Video: Kamera ya Usalama wa Raspberry Pi: Hatua 11 (na Picha)

Video: Kamera ya Usalama wa Raspberry Pi: Hatua 11 (na Picha)
Video: СТРАШНЫЕ ПРИЗРАКИ ПОКАЗАЛИ СВОЮ СИЛУ НОЧЬЮ В ТАИНСТВЕННОЙ УСАДЬБЕ / WHAT ARE GHOSTS CAPABLE OF? 2024, Novemba
Anonim
Kamera ya Usalama wa Raspberry Pi
Kamera ya Usalama wa Raspberry Pi

Hii ni hatua kwa hatua inayofundishwa juu ya jinsi ya kuunda IoT, kamera ya usalama iliyoamilishwa kwa mwendo kwa kutumia Raspberry Pi. Utajifunza jinsi ya kuunda seva ya wavuti ya chupa na fomu ambayo inamruhusu mtumiaji kurekebisha uelewa wa kamera na wakati wa kurekodi, anza / simamisha kurekodi mwenyewe, na / au kupiga picha ambayo itahifadhiwa kwa eneo lako.

Vifaa

  • Raspberry Pi 3
  • Kamera ya Pi
  • Sensor ya mwendo wa PIR
  • Kadi ya SD
  • Chanzo cha nguvu

Hatua ya 1: Unganisha vifaa

Kusanya vifaa
Kusanya vifaa
Kusanya vifaa
Kusanya vifaa
Kusanya vifaa
Kusanya vifaa
Kusanya vifaa
Kusanya vifaa

Wakati Pi imezimwa, ingiza kadi ndogo ya SD ndani ya Pi. Ingiza kebo ya kebo ya moduli ya kamera kwenye bandari ya moduli ya kamera kwenye Pi. Kisha, unganisha pini 3 (iliyoitwa VCC, OUT, na GND) ya kigundua mwendo wa PRI kwa pini za GPIO za Pi. Unganisha VCC na 5.5V ya nguvu, GND chini, na OUT kubandika 11 kwenye Pi.

Hatua ya 2: Hakikisha kwamba Pi yako imeunganishwa kwenye mtandao

Hakikisha kwamba Pi yako imeunganishwa kwenye Mtandao
Hakikisha kwamba Pi yako imeunganishwa kwenye Mtandao

Sasa washa Pi kwa kuiunganisha na chanzo cha nguvu na uhakikishe kuwa umeunganishwa kwenye mtandao ukitumia amri ya ping. Ikiwa haujui jinsi ya kuunganisha Pi yako kwenye wavuti, bonyeza hapa.

sudo ping www.google.com

Ikiwa umefanikiwa, unapaswa kuona kwamba data inapokelewa na google.

Kwa kuongeza, unaweza kutumia ifconfig kuona anwani yako ya IP.

Sudo ifconfig

Hatua ya 3: Sanidi Kamera

Tumia amri ifuatayo kufungua kiolesura cha usanidi, na uwezeshe kamera katika "chaguzi za kuingiliana".

Sudo raspi-config

Baada ya kuwasha upya, unaweza kuonyesha hali ya kamera yako kuhakikisha kuwa imeunganishwa vizuri.

vcgencmd pata_kamera

Mwishowe, weka moduli ya picha.

bomba kufunga picamera

Hatua ya 4: Sakinisha Flask

Sakinisha moduli ya kutuliza chupa na chupa kwa Python:

Sudo apt-get kufunga python-dev python-pip

python -m pip kufunga flask flask-restful

Ifuatayo, tutaweka moduli ya chupa ya chatu inayotumiwa kuunda fomu.

bomba funga chupa-wtf

Hatua ya 5: Unda Darasa la Fomu

Tengeneza saraka inayoitwa iotProject ili kuhifadhi faili zako zote katika.

Sudo mkdir iotProject

Unda faili ya chatu iitwayo "camControl.py".

Sudo nano camControl.py

Katika faili hii tutaunda darasa letu la fomu, ambayo inaruhusu sisi kuunda fomu ya wavuti na masanduku ya maandishi na menyu ya kushuka kwa mtumiaji kuweza kubadilisha mipangilio ya kamera, kuanza / kuacha kurekodi kwa mikono, na kunasa video.

kutoka kwa flask_wtf kuagiza FlaskFormfrom wtforms.validators kuagiza Data Inahitajika kutoka wtforms kuagiza SubmitField kutoka wtforms kuagiza vibali, IntegerField, BooleanField, SelectField

darasa camFrame (FlaskForm):

videoDuration = IntegerField ('Saa ya Kurekodi (kwa sekunde)')

unyeti = IntegerField ('unyeti wa mwendo (masafa 2500-10000) nKuongezeka kwa nambari, kamera ni nyeti zaidi', idhibitisho = [vibali. IdadiRange (min = 2500, max = 10000, ujumbe = 'Thamani Kati ya Kiwango')])

chaguzi = SelectField ('Chaguzi', chaguzi = [('hakuna', 'Hakuna kitendo'), ('rec', 'Anza Kurekodi'), ('stop', 'Stop Recording'), ('pic', 'Piga Picha'])

wasilisha = Tuma shamba ('Wasilisha')

Hatua ya 6: Unda Kiolezo cha Flask

Unda Kiolezo cha chupa
Unda Kiolezo cha chupa

Ili kuunda kiolesura cha mtumiaji, lazima ubuni templeti ya Flask ambayo hutumia fomu ambayo umetengeneza tu. Faili hii itaandikwa katika html, na kuhifadhiwa kwenye folda inayoitwa templeti, ambayo inapaswa kuwa kwenye saraka sawa na fomu yako.

Ndani ya folda yako ya templeti, tengeneza faili inayoitwa index.html. Ndani ya faili hii, nukuu nambari iliyoonyeshwa hapo juu.

Hatua ya 7: Toa Kiolezo

Sasa ni wakati wa kuunda faili ambayo inatoa templeti. Unda faili inayoitwa appCam.py (hakikisha hauko tena kwenye folda ya templeti). Yaliyomo ya nguvu inayotumika kwenye templeti lazima itumiwe kama hoja iliyoitwa katika simu ya render_template ().

kuagiza camControlfrom chupa kuagiza Flask, render_template, ombi, Jibu kutoka Flask_restful import Resource, Api, reparparse

programu = chupa (_ jina_)

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

mshauri = reqparse. RequestParser ()

mjadala.add_argument ('dur', type = int, help = 'Duration of video when movement is detected').add_argument ('opt', type = str, help = 'Rekodi mikono video au nasa picha')

Sasisho la darasa (Rasilimali):

#Vitu vya wtforms def post (self): args = parser.parse_args () # rc.input (args ['dur'], args ['sens'], args ['opt']) # andika kwa faili ya maandishi ambayo inazungumza na kamera inayoendesha kamera sambamba + '\ n') #andika kamera ya hisiaSettingsFile.write (args ['opt'] + '\ n') #andika kamera ya kuchaguaSettingsFile.close () rudisha {'dur': args ['dur'], 'sens': args ['akili'], 'opt': args ['opt']}

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

def index (): "" "Mdhibiti ukurasa wa nyumbani" "" form = camControl.camFrame () #hii ni fomu ikiwa ombi.method == 'POST': chapa (form.form) args = [i for i in request.form.items ()] # rc.input (int (args [0] [1]), int (args [1] [1]), args [2] [1]) cameraSettingsFile = wazi ("cameraSettings.txt ", 'w') cameraSettingsFile.write (args [0] [1] + '\ n') #andika camera dur cameraSettingsFile.write (args [1] [1] + '\ n') #andika camera cameraSettingsFile.write (args [2] [1] + '\ n') # andika chagua kameraSettingsFile.close () imageDictionary = {"filename": "image.jpg"} Return render_template ('index.html', form = form, image = imageDictionary)

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

ikiwa _name_ == '_main_':

app.run (host = '0.0.0.0', bandari = 80, debug = Kweli, imefungwa = Kweli)

Hatua ya 8: Unda Darasa la Opereta Kamera

Sasa tunataka kuunda faili inayoitwa camOperator.py. Ndani yake tutatengeneza darasa la kamera na njia za kutumia kamera, tukitumia kazi za PiCamera zilizopo tayari. Tutatumia mfano wa kitu hiki katika hatua inayofuata ambapo tutachanganya utendaji wa kamera na sensorer ya mwendo.

Mbinu zilizoainishwa katika darasa hili hubadilisha mipangilio ya "rekodi" kwenye kamera ya usalama kwa kutumia uelewa na pembejeo za muda ambazo mtumiaji hutoa, wakati wa kuweka maadili chaguo-msingi kwa vigeuzi hivi ikiwa pembejeo ya mtumiaji haipo.

kuagiza RPi. GPIO kama GPIOingiza wakati wa kuagiza picha kutoka wakati wa kuingiza wakati wa kuingilia

GPIO.setmode (GPIO. BOARD)

Usanidi wa GPIO (11, GPIO. IN)

gundua = 0

kamera ya darasaOperator:

def _init _ (binafsi):

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

rekodi rekodi (binafsi, dur):

#Rekodi za muda uliopewa uliowekwa na mtawala videoName = str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') Self.cam.art_recording ('/ nyumbani / pi / iotProject / video /' + videoName + '.h264') wakati. kulala (dur) self.cam.stop_recording ()

operesheni ya def (binafsi, dur, sens):

Utendaji kuu wa kamera ambayo huangalia kila wakati ikiwa mwanadamu yuko karibu, ikiwa mwanadamu anakaa karibu kwa muda wa kutosha, tunaanza kurekodi! gundua ulimwengu i = GPIO.input (11) ikiwa i == 0: #Wakati pato kutoka kwa sensorer ya mwendo ni chini Gundua = saa 0. mwendo umegunduliwa "+ str (gundua)) ikiwa hugundua> = sens * 10: self.record (dur) chapa (" REKODI ") gundua = saa 0. lala (0.1) gundua + = 1

Hatua ya 9: Unda Moduli ya Rekodi

Programu ya mwisho inayohitajika kwa mradi huu itaandikwa katika faili iliyoitwa rec.py. Faili hii inaambia kamera wakati wa kurekodi, ni muda gani wa kurekodi, na ikiwa / wakati wa kuchukua picha. Inafanya hivyo kwa kuangalia kila wakati na kusoma data ya mtumiaji iliyoandikwa kwa faili ya maandishi kutoka hatua ya 5. Ikiwa faili imesasishwa inabadilisha uelewa na viwango vya muda ipasavyo na kisha, ikiwa kurekodi au picha imechukuliwa, inahifadhi yaliyomo kwenye pi, iwe katika muundo wa faili ya.h264 au.jpg.

Inakimbia sambamba na seva ya chupa, kusoma vigezo vya kudhibiti vilivyowekwa na fomu za seva. Vigezo vya kudhibiti seva vimewekwa katika faili tofauti mara tu fomu zitakapowasilishwa. Moduli ya rec inasoma vigeuzi hivi na inasasisha kamera kulingana na hizo. kuagiza camOperator kutoka wakati wa kuingiza wakati wa kuingiza wakati wa kuingiza

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #hapa, tunafungua na kufunga katika hali ya uandishi ili kufuta yaliyomo ndani ya faili kabla ya kitanzi kuu kuanza

Kitanzi kinachoendelea kinachoangalia ikiwa wanadamu wako karibu. Ikiwa ni hivyo, basi

# kamera inaanza kurekodi. Kazi hii inaendeshwa kwa paralell na chupa ya #sava inayodhibiti kamera hii. recordingInProcess = Uongo wakati ni Kweli: # angalia / rekodi ikiwa (recordingInProcess == False): rc.operation (rc.dur, rc.sens) #badilisha mipangilio ya kamera kulingana na server cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 ya kuweka kwenye cameraSettingsFile.readlines (): ikiwa kuwekaNum == 0: #Duration change rc.dur = int (setting) elif settingNum == 1: #Sensitivity change rc.sens = int (setting (mpangilio wa elifNum == 2: #Ubadilishaji wa shughuli rc.opt = kuweka mipangilioNum + = 1 kameraSettingsFile.close ()

#fanya tendo

# ikiwa rc.opt == "hakuna": # endelea ikiwa rc.opt == "rec / n" na kurekodiInProcess == Uwongo: chapa ("Running record command from controller") #Zalisha jina la video kulingana na videoName ya wakati wa sasa = "snappedVid _" + str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/ home / pi / iotProject / video / '+ videoName +'.h264 ') recordingInProcess = True elif rc.opt == "stop / n" na recordingInProcess == True: chapa ("Kusimamisha rekodi ya amri kutoka kwa mdhibiti") rc.cam.stop_recording () recordingInProcess = Kamera ya UongoSettingsFile = wazi ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur) + '\ n') cameraSettingsFile.write (str (rc.ens) + '\ n') cameraSettingsFile. andika ("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 art_preview () muda.kulala (5) rc.cam.capture ('picha /' + pictureName + '.jpg') rc.cam.stop_preview () cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile. andika (str (rc.dur) + '\ n') cameraSettingsFile.write (str (rc.ens) + '\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Hatua ya 10: Anza Seva

Anza Seva
Anza Seva

SSH ndani ya pi na anza seva ukitumia laini ya amri iliyoonyeshwa hapo juu.

Hatua ya 11: JARIBU

JARIBU!
JARIBU!
JARIBU!
JARIBU!

Fikia ukurasa wa wavuti ukitumia anwani ya IP na unapaswa kudhibiti kamera kwa mbali!

Ilipendekeza: