Satura rādītājs:

Raspberry Pi drošības kamera: 11 soļi (ar attēliem)
Raspberry Pi drošības kamera: 11 soļi (ar attēliem)

Video: Raspberry Pi drošības kamera: 11 soļi (ar attēliem)

Video: Raspberry Pi drošības kamera: 11 soļi (ar attēliem)
Video: Mans darbs ir vērot mežu un te notiek kaut kas dīvains. 2024, Novembris
Anonim
Raspberry Pi drošības kamera
Raspberry Pi drošības kamera

Šis ir soli pa solim norādāms, kā izveidot IoT, kustību aktivizētu drošības kameru, izmantojot Raspberry Pi. Jūs uzzināsit, kā izveidot kolbas tīmekļa serveri un veidlapu, kas ļauj lietotājam pielāgot kameras jutību un ierakstīšanas laiku, manuāli sākt/pārtraukt ierakstīšanu un/vai uzņemt attēlu, kas tiks saglabāts lokāli.

Piegādes

  • Raspberry Pi 3
  • Pi kamera
  • PIR kustības sensors
  • SD karte
  • Enerģijas avots

1. darbība: salieciet aparatūru

Salieciet aparatūru
Salieciet aparatūru
Salieciet aparatūru
Salieciet aparatūru
Salieciet aparatūru
Salieciet aparatūru
Salieciet aparatūru
Salieciet aparatūru

Kamēr Pi ir izslēgts, ievietojiet mikro-SD karti Pi. Ievietojiet kameras moduļa lentes kabeli Pi kameras moduļa portā. Pēc tam savienojiet PRI kustības detektora 3 tapas (ar apzīmējumu VCC, OUT un GND) ar Pi GPIO tapām. Pievienojiet VCC pie 5,5 V strāvas, GND pie zemes un OUT pie Pi tapas 11.

2. darbība. Pārliecinieties, vai jūsu Pi ir savienots ar internetu

Pārliecinieties, vai jūsu Pi ir savienots ar internetu
Pārliecinieties, vai jūsu Pi ir savienots ar internetu

Tagad ieslēdziet Pi, pievienojot to strāvas avotam, un pārbaudiet, vai esat izveidojis savienojumu ar internetu, izmantojot ping komandu. Ja jūs nezināt, kā savienot savu Pi ar internetu, noklikšķiniet šeit.

sudo ping www.google.com

Ja jums veicas, jums vajadzētu redzēt, ka Google saņem datus.

Turklāt, lai redzētu savu IP adresi, varat izmantot ifconfig.

sudo ifconfig

3. darbība: iestatiet kameru

Izmantojiet šo komandu, lai atvērtu konfigurācijas saskarni, un iespējojiet kameru "saskarnes opcijās".

sudo raspi-config

Pēc pārstartēšanas varat parādīt kameras statusu, lai pārliecinātos, ka tā ir pareizi pievienota.

vcgencmd get_camera

Visbeidzot, instalējiet picamera moduli.

pip instalēt picamera

4. solis: instalējiet kolbu

Instalējiet kolbu un kolbu nomierinošo moduli Python:

sudo apt-get instalēt python-dev python-pip

python -m pip uzstādīt kolbu kolba -nomierinoša

Tālāk mēs instalēsim pitona kolbas moduli, ko izmanto veidlapu izveidošanai.

pip instalēt kolbu-wtf

5. darbība: veidlapu klases izveide

Izveidojiet direktoriju ar nosaukumu iotProject, lai saglabātu visus savus failus.

sudo mkdir iotProject

Izveidojiet pitona failu ar nosaukumu "camControl.py".

sudo nano camControl.py

Šajā failā mēs izveidosim savu veidlapu klasi, kas ļauj mums izveidot tīmekļa veidlapu ar tekstlodziņiem un nolaižamo izvēlni, lai lietotājs varētu mainīt kameras iestatījumus, manuāli sākt/apturēt ierakstīšanu un uzņemt video.

no flask_wtf importēt FlaskFormfrom wtforms.validators importē datus Nepieciešams no wtforms importa

klases camFrame (FlaskForm):

videoDuration = IntegerField ('Ierakstīšanas laiks (sekundēs)')

jutība = IntegerField ('Kustības jutība (diapazons 2500-10000) nJo lielāks skaitlis, jo kamera ir mazāk jutīga', validatori = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out of Range'])

options = SelectField ('Options', options = [('none', 'No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('pic', 'Take picture')])

iesniegt = SubmitField ('Iesniegt')

6. darbība: izveidojiet kolbas veidni

Izveidojiet kolbas veidni
Izveidojiet kolbas veidni

Lai izveidotu lietotāja interfeisu, jums jāizstrādā kolbas veidne, kurā tiek izmantota tikko izveidotā veidlapa. Šis fails tiks rakstīts html formātā un saglabāts mapē ar nosaukumu veidnes, kurai jāatrodas tajā pašā direktorijā kā jūsu veidlapai.

Veidņu mapē izveidojiet failu ar nosaukumu index.html. Šajā failā atkārtojiet iepriekš parādīto kodu.

7. darbība: atveidojiet veidni

Tagad ir pienācis laiks izveidot failu, kas atveido veidni. Izveidojiet failu ar nosaukumu appCam.py (pārliecinieties, ka vairs neesat veidņu mapē). Jebkurš veidnē izmantotais dinamiskais saturs jāizmanto kā nosaukts arguments aicinājumā uz render_template ().

importēt camControl no kolbas importēt kolbu, render_template, pieprasījums, atbilde no flask_restful importēt resursus, Api, reqparse

app = kolba (_ name_)

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

parsētājs = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Video ilgums, kad tiek konstatēta kustība') parser.add_argument ('sens', type = int, help = 'Kustības līmenis, kas nepieciešams, lai aktivizētu ierakstu') parser.add_argument ('opt', type = str, help = 'Manuāli ierakstiet videoklipu vai uzņemiet attēlu')

klases atjauninājums (resurss):

#Stuff wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #ierakstiet teksta failā, kas sarunājas ar kameru, kas darbojas paralēli + '\ n') #write sens cameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () return {'dur': args ['dur'], 'sens': args ['sense'], 'opt': args ['opt']}

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

def index (): "" "Kontroliera mājas lapa" "" form = camControl.camFrame () #šī ir veidlapa, ja 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 = 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 = {"faila nosaukums": "image.jpg"} atgriezt render_template ('index.html', form = forma, image = imageDictionary)

api.add_resource (Atjaunināt, '/update/')

ja _name_ == '_main_':

app.run (resursdators = '0.0.0.0', ports = 80, atkļūdošana = True, threaded = True)

8. darbība: izveidojiet kameras operatora klasi

Tagad mēs vēlamies izveidot failu ar nosaukumu camOperator.py. Tajā mēs izveidosim kameru klasi ar metodēm kameras darbināšanai, izmantojot jau pieejamās PiCamera funkcijas. Mēs izmantosim šī objekta eksemplāru nākamajā solī, kurā mēs apvienosim kameras un kustības sensora funkcionalitāti.

Šajā klasē definētās metodes maina drošības kameras "ieraksta" iestatījumus, izmantojot lietotāja sniegtās jutības un ilguma ievades, vienlaikus nosakot šo mainīgo noklusējuma vērtības, ja lietotāja ievades nav.

importēt RPi. GPIO kā GPIOimportēt laika importu picamera no datuma un laika importēšanas datuma

GPIO.setmode (GPIO. BOARD)

GPIO.iestatīšana (11, GPIO. IN)

atklāt = 0

klases kamera Operators:

def _init _ (sevi):

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

def ieraksts (self, dur):

#Records uz noteiktu laiku, ko iestatījis kontrolieris 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 darbība (self, dur, sens):

#Kameras galvenā darbība, kas pastāvīgi pārbauda, vai tuvumā atrodas cilvēks, vai cilvēks uzturas pietiekami ilgi, mēs sākam ierakstīt! globālā noteikšana i = GPIO. ievade (11), ja i == 0: #Kad kustības sensora izeja ir LOW noteikšana = 0 laiks. miega (0,1) elif i == 1: #Ja izvade no kustības sensora ir HIGH print (" kustība konstatēta " +str (atklāt)), ja atklāt> = sens*10: self.record (dur) print (" RECORDED ") noteikt = 0 laiks. miega (0,1) noteikšana += 1

9. solis: izveidojiet ierakstu moduli

Pēdējā šim projektam nepieciešamā programma tiks ierakstīta failā ar nosaukumu rec.py. Šis fails norāda kamerai, kad ierakstīt, cik ilgi ierakstīt un vai/kad fotografēt. Tas tiek darīts, pastāvīgi pārbaudot un lasot lietotāja datus, kas rakstīti teksta failā no 5. darbības. Ja fails ir atjaunināts, tas attiecīgi pielāgo jutīguma un ilguma vērtības, un pēc tam, ja tiek uzņemts ieraksts vai attēls, tas saglabā saturu pi, vai nu.h264, vai-j.webp

'' 'Darbojas paralēli kolbas serverim, lasot servera veidlapu iestatītos kontroles mainīgos. Pēc veidlapu iesniegšanas servera vadības mainīgie tiek iestatīti atsevišķā failā. Rec modulis nolasa šos mainīgos un, pamatojoties uz tiem, atjaunina kameru. '' 'importēt camOperator no datuma un laika importēšanas datuma importēšanas laika

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #šeit mēs atveram un aizveram rakstīšanas režīmā, lai izdzēstu faila saturu pirms galvenās cilpas darbības

#Nepārtraukta cilpa, kas vēro, vai tuvumā atrodas cilvēki. Ja tie ir, tad

#kamera sāk ierakstīšanu. Šī funkcija darbojas paralēli kolbai #serveris, kas vada šo kameru. recordInProcess = False, kamēr True: #pārbaudiet/ierakstiet, ja (recordInProcess == False): rc.operation (rc.dur, rc.sens) #mainiet kameras iestatījumus, pamatojoties uz servera cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 kameras iestatīšanai) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#izpildīt darbību

# if rc.opt == "none": # turpināt, ja rc.opt == "rec / n" un ierakstsInProcess == Nepareizi: print ("Running ieraksta komanda no kontroliera") # Ģenerēt videoklipa nosaukumu, pamatojoties uz pašreizējo videoName = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject /videos/' + videoName +. = False cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile. rakstīt ("neviens / n") rc.opt = "neviens / n" elif rc.opt == "pic / n" un ierakstsInProcess == Nepareizi: drukāt ("Snap pic komanda no kontroliera") pictureName = "snappedPic_ "+str (datuma laiks. tagad ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.replace ('. ',') rc.cam.st art_preview () time.sleep (5) rc.cam.capture ('bildes/' + pictureName + '.jpg') rc.cam.stop_preview () cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile. rakstīt (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("nav / n") rc.opt = "nav / n"

10. darbība: palaidiet serveri

Palaidiet serveri
Palaidiet serveri

SSH ievadiet pi un palaidiet serveri, izmantojot iepriekš parādīto komandrindu.

11. solis: Mēģiniet to izmēģināt

IZMĒĢINI!
IZMĒĢINI!
IZMĒĢINI!
IZMĒĢINI!

Piekļūstiet tīmekļa lapai, izmantojot IP adresi, un jums vajadzētu būt iespējai attālināti vadīt kameru!

Ieteicams: