Sisukord:

Raspberry Pi turvakaamera: 11 sammu (koos piltidega)
Raspberry Pi turvakaamera: 11 sammu (koos piltidega)

Video: Raspberry Pi turvakaamera: 11 sammu (koos piltidega)

Video: Raspberry Pi turvakaamera: 11 sammu (koos piltidega)
Video: 10 самых АТМОСФЕРНЫХ мест Дагестана. БОЛЬШОЙ ВЫПУСК #Дагестан #ПутешествиеПоДагестану 2024, November
Anonim
Raspberry Pi turvakaamera
Raspberry Pi turvakaamera

See on samm -sammult juhendatav, kuidas Raspberry Pi abil luua IoT, liikumisega aktiveeritud turvakaamera. Õpid, kuidas luua kolbi veebiserver ja vorm, mis võimaldab kasutajal reguleerida kaamera tundlikkust ja salvestusaega, käsitsi salvestust alustada/peatada ja/või teha pilti, mis salvestatakse kohapeal.

Tarvikud

  • Vaarika Pi 3
  • Pi kaamera
  • PIR liikumisandur
  • SD -kaart
  • Energiaallikas

Samm: riistvara kokkupanek

Pange riistvara kokku
Pange riistvara kokku
Pange riistvara kokku
Pange riistvara kokku
Pange riistvara kokku
Pange riistvara kokku
Pange riistvara kokku
Pange riistvara kokku

Kui Pi on välja lülitatud, sisestage mikro-SD-kaart Pi-sse. Sisestage kaameramooduli lintkaabel Pi kaameramooduli porti. Seejärel ühendage PRI liikumisanduri 3 tihvti (märgistusega VCC, OUT ja GND) Pi GPIO tihvtidega. Ühendage VCC 5,5 V toiteallikaga, GND maandusega ja OUT pistikuga 11.

Samm: veenduge, et teie Pi oleks Internetiga ühendatud

Veenduge, et teie Pi oleks Internetiga ühendatud
Veenduge, et teie Pi oleks Internetiga ühendatud

Nüüd lülitage Pi sisse, ühendades selle toiteallikaga ja veenduge, et olete ping -käsuga Interneti -ühenduse loonud. Kui te ei tea, kuidas oma Pi Internetti ühendada, klõpsake siin.

sudo ping www.google.com

Kui teil õnnestub, peaksite nägema, et Google võtab andmeid vastu.

Lisaks saate oma IP -aadressi nägemiseks kasutada ifconfig.

sudo ifconfig

Samm: seadistage kaamera

Kasutage konfiguratsiooniliidese avamiseks järgmist käsku ja lubage kaamera "liidese suvandites".

sudo raspi-config

Pärast taaskäivitamist saate oma kaamera olekut kuvada, et veenduda, et see on korralikult ühendatud.

vcgencmd get_camera

Lõpuks installige picamera moodul.

pip installige picamera

Samm: paigaldage kolb

Paigaldage Pythoni jaoks kolb ja kolvi rahustav moodul:

sudo apt-get install python-dev python-pip

python -m pip paigaldage kolb -kolb -rahustav

Järgmisena paigaldame vormide loomiseks kasutatava python -kolbi mooduli.

pip paigaldage kolb-wtf

Samm: looge vormiklass

Looge kõigi failide salvestamiseks kataloog nimega iotProject.

sudo mkdir iotProject

Looge pythoni fail nimega "camControl.py".

sudo nano camControl.py

Selles failis loome oma vormiklassi, mis võimaldab meil luua veebivormi tekstikastide ja rippmenüüga, et kasutajal oleks võimalik kaamera seadeid muuta, salvestust käsitsi käivitada/peatada ja videot jäädvustada.

from flask_wtf import FlaskFormfrom wtforms.validaatorid impordivad andmeid Nõutavad saidilt wtforms import SubmitField wtformsi impordi valideerijatelt, IntegerField, BooleanField, SelectField

klassi camFrame (FlaskForm):

videoDuration = IntegerField ('Salvestusaeg (sekundites)')

tundlikkus = IntegerField ('Liikumistundlikkus (vahemik 2500-10000) nKui mida suurem on number, seda vähem tundlik on kaamera ", valideerijad = [validators. NumberRange (min = 2500, max = 10000, message = 'väärtus väljaspool vahemikku'])

options = SelectField ('Options', options = [('none', 'No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('pilt', 'Pildista')])

esitama = SubmitField ('Esita')

6. samm: looge kolvimall

Looge kolvimall
Looge kolvimall

Kasutajaliidese loomiseks peate kujundama kolvimalli, mis kasutab äsja loodud vormi. See fail kirjutatakse html -vormingus ja salvestatakse kausta nimega mallid, mis peaks olema teie vormiga samas kataloogis.

Looge oma mallide kausta sees fail nimega index.html. Kopeerige selles failis ülaltoodud koodi.

Samm 7: Malli renderdamine

Nüüd on aeg luua mall, mis renderdab malli. Looge fail nimega appCam.py (veenduge, et te pole enam mallide kaustas). Mallis kasutatud dünaamilist sisu tuleb render_template () kutses kasutada nimega argumendina.

import camControlkolbist import kolb, render_template, request, Response from flask_restful import Resource, Api, reqparse

app = kolb (_ nimi_)

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

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Video kestus liikumise tuvastamisel') parser.add_argument ('sens', type = int, help = 'Salvestamise käivitamiseks vajalik liikumise tase') parser.add_argument ('opt', type = str, help = 'Video käsitsi salvestamine või pildi jäädvustamine')

klassi värskendus (ressurss):

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #kirjutage tekstifaili, mis räägib kaameraga, mis töötab paralleelselt + '\ n') #write sens cameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () return {'dur': args ['dur'], 'sens': args ['tunne'], 'opt': args ['opt']}

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

def index (): "" "Kontrolleri koduleht" "" form = camControl.camFrame () #see on vorm, kui request.method == 'POST': print (request.form) args = [i for i in request.form.items ()] #rc.input (int (args [0] [1]), int (args [1] [1]), args [2] [1]) cameraSettingsFile = avatud ("cameraSettings.txt ", w args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {"faili nimi": "image.jpg"} return render_template ('index.html', vorm = vorm, pilt = pilt)

api.add_resource (Värskenda, '/update/')

kui _name_ == '_main_':

app.run (host = '0.0.0.0', port = 80, silumine = tõsi, keermestatud = tõene)

8. samm: looge kaamera operaatoriklass

Nüüd tahame luua faili nimega camOperator.py. Selles teeme kaameraklassi koos kaameraga töötamise meetoditega, kasutades juba olemasolevaid PiCamera funktsioone. Järgmises etapis kasutame selle objekti eksemplari, kus ühendame kaamera ja liikumisanduri funktsionaalsuse.

Selles klassis määratletud meetodid muudavad turvakaamera "salvestamise" seadeid, kasutades kasutaja sisestatud tundlikkuse ja kestuse sisendeid, kehtestades nende muutujate vaikeväärtused, kui kasutaja sisend puudub.

RPi. GPIO importimine GPIO -ks Importige aja importimine fotoaparaat kuupäeva ja aja importimise kuupäevast

GPIO.setmode (GPIO. BOARD)

GPIO.seadistus (11, GPIO. IN)

avastama = 0

klassi kaamera Operaator:

def _init _ (ise):

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

def rekord (ise, dur):

#Records määratud aja jooksul, mille määras kontroller 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 operatsioon (ise, dur, sens):

#Kaamera põhitegevus, mis kontrollib pidevalt, kas inimene on läheduses, kui inimene jääb piisavalt kauaks, alustame salvestamist! globaalne tuvastamine i = GPIO.input (11), kui i == 0: #Kui liikumisanduri väljund on LOW tuvastus = 0 aega. uni (0,1) elif i == 1: #Kui liikumisanduri väljund on HIGH print (" tuvastatud liikumine " +str (tuvastamine)) kui tuvastamine> = sens*10: self.record (dur) print (" RECORDED ") tuvastab = 0 time.sleep (0,1) tuvastab += 1

9. samm: looge salvestusmoodul

Viimane selle projekti jaoks vajalik programm kirjutatakse faili nimega rec.py. See fail ütleb kaamerale, millal salvestada, kui kaua salvestada ja kas/millal pilti teha. Seda tehakse, kontrollides ja lugedes pidevalt tekstifaili 5. etapist kirjutatud kasutajaandmeid. Kui faili on värskendatud, reguleerib see vastavalt tundlikkuse ja kestuse väärtusi ning salvestab või pildistab salvestise sisu pi, kas.h264 või-j.webp

'' 'Töötab paralleelselt kolviserveriga, lugedes serverivormide määratud juhtmuutujaid. Pärast vormide esitamist määratakse serveri juhtelemendid eraldi faili. Rec moodul loeb neid muutujaid ja värskendab nende põhjal kaamerat. '' 'import camOperator alates kuupäevast ja ajast impordi kuupäeva ja aja importimise aeg

rc = camOperator.cameraOperator ()

cameraSettingsFile = avatud ("cameraSettings.txt", 'w') cameraSettingsFile.close () #šee, avame ja sulgeme kirjutusrežiimis, et kustutada failis olev sisu enne põhiahela käivitamist

#Pidev silmus, mis jälgib, kas läheduses on inimesi. Kui nad on, siis

#kaamera alustab salvestamist. See funktsioon töötab paralleelselt seda kaamerat juhtiva kolviga #server. recordInProcess = Väär, kuigi tõene: #kontrolli/salvesta, kui (recordInProcess == Väär): rc.operation (rc.dur, rc.sens) #muuda kaamera seadeid serveri kaamera põhjalSettingsFile = open ("cameraSettings.txt"), 'r') settingNum = 0 kaameraSettingsFile.readlines () seadistamisel) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#täitke toiming

# if rc.opt == "none": # jätka, kui rc.opt == "rec / n" ja recordInProcess == Vale: print ("Käivitab salvestuskäsk kontrollerilt") #Generate video nimi vastavalt praegusele ajale videoName = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject /videos/' + videoName +'.h264 ') recordInProcess = Tõeline elif rc.opt == "stop / n" ja recordInProcess == Tõsi: print ("Salvesta käsk kontrollerilt") rc.cam.stop_recording () recordInProcess = 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 recordInProcess == 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 ("pole / n") rc.opt = "pole / n"

Samm: käivitage server

Käivitage server
Käivitage server

Sisestage SSH pi -sse ja käivitage server ülaltoodud käsurea abil.

11. samm: proovige seda teha

PROOVI!
PROOVI!
PROOVI!
PROOVI!

Juurdepääs veebilehele IP -aadressi abil ja teil peaks olema võimalus kaamerat kaugjuhtida!

Soovitan: