Sadržaj:

Sigurnosna kamera Raspberry Pi: 11 koraka (sa slikama)
Sigurnosna kamera Raspberry Pi: 11 koraka (sa slikama)

Video: Sigurnosna kamera Raspberry Pi: 11 koraka (sa slikama)

Video: Sigurnosna kamera Raspberry Pi: 11 koraka (sa slikama)
Video: Электрика в квартире своими руками. Финал. Переделка хрущевки от А до Я. #11 2024, Studeni
Anonim
Sigurnosna kamera Raspberry Pi
Sigurnosna kamera Raspberry Pi

Ovo je korak po korak uputstvo o tome kako stvoriti IoT sigurnosnu kameru s aktiviranjem pokreta pomoću Raspberry Pi. Naučit ćete kako stvoriti web poslužitelj i obrazac koji omogućuje korisniku da prilagodi osjetljivost fotoaparata i vrijeme snimanja, ručno pokrene/zaustavi snimanje i/ili napravi sliku koja će biti spremljena lokalno.

Pribor

  • Malina Pi 3
  • Pi kamera
  • PIR senzor pokreta
  • SD kartica
  • Izvor napajanja

Korak 1: Sastavite hardver

Sastavite hardver
Sastavite hardver
Sastavite hardver
Sastavite hardver
Sastavite hardver
Sastavite hardver
Sastavite hardver
Sastavite hardver

Dok je Pi isključen, umetnite mikro-SD karticu u Pi. Umetnite vrpčani kabel modula kamere u priključak modula kamere na Pi. Zatim spojite 3 pina (označeni s VCC, OUT i GND) PRI detektora pokreta na Pi -jeve GPIO pinove. Spojite VCC na 5,5 V napajanja, GND na masu, a OUT na pin 11 na Pi.

Korak 2: Provjerite je li vaš Pi povezan s internetom

Provjerite je li vaš Pi povezan s internetom
Provjerite je li vaš Pi povezan s internetom

Sada uključite Pi povezivanjem na izvor napajanja i provjerite jeste li povezani s internetom pomoću naredbe ping. Ako ne znate kako povezati svoj Pi s internetom, kliknite ovdje.

sudo ping www.google.com

Ako ste uspješni, trebali biste vidjeti da Google prima podatke.

Osim toga, možete koristiti ifconfig da vidite svoju IP adresu.

sudo ifconfig

Korak 3: Postavite kameru

Pomoću sljedeće naredbe otvorite konfiguracijsko sučelje i omogućite kameru u "opcijama sučelja".

sudo raspi-config

Nakon ponovnog pokretanja možete prikazati status fotoaparata kako biste bili sigurni da je pravilno spojen.

vcgencmd get_camera

Na kraju, instalirajte modul picamera.

pip instalirajte pikameru

Korak 4: Instalirajte Flask

Instalirajte modul tikvice i mirovanja tikvica za Python:

sudo apt-get install python-dev python-pip

python -m pip install flask flask -restful

Zatim ćemo instalirati modul python flask koji se koristi za stvaranje obrazaca.

pip install flask-wtf

Korak 5: Stvorite klasu obrasca

Napravite direktorij pod nazivom iotProject u koji će se pohraniti sve vaše datoteke.

sudo mkdir iotProjekt

Napravite python datoteku pod nazivom "camControl.py".

sudo nano camControl.py

U ovoj datoteci stvorit ćemo klasu obrasca koja nam omogućuje stvaranje web obrasca s tekstualnim okvirima i padajućim izbornikom kako bi korisnik mogao promijeniti postavke kamere, ručno pokrenuti/zaustaviti snimanje i snimiti video.

from flask_wtf import FlaskFormfrom wtforms.validators import DataRequired from wtforms import SubmitField iz wtforms import validators, IntegerField, BooleanField, SelectField

klasa camFrame (FlaskForm):

videoDuration = IntegerField ('Vrijeme snimanja (u sekundama)')

osjetljivost = IntegerField ('Osjetljivost pokreta (raspon 2500-10000) n Što je veći broj, kamera je manje osjetljiva', validators = [validators. NumberRange (min = 2500, max = 10000, message = 'Vrijednost izvan raspona')])

options = SelectField ('Options', choices = [('none', 'No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('slika', 'Fotografiraj')])

submit = SubmitField ('Pošalji')

Korak 6: Stvorite predložak bočice

Napravite predložak bočice
Napravite predložak bočice

Da biste stvorili korisničko sučelje, morate dizajnirati predložak Flask koji koristi obrazac koji ste upravo stvorili. Ova će datoteka biti napisana na html -u i pohranjena u mapu pod nazivom predlošci, koja bi trebala biti u istom direktoriju kao i vaš obrazac.

Unutar mape s predlošcima stvorite datoteku pod nazivom index.html. Unutar ove datoteke ponovite gornji kôd.

Korak 7: Renderirajte predložak

Sada je vrijeme za stvaranje datoteke koja generira predložak. Izradite datoteku pod nazivom appCam.py (provjerite niste li više u mapi predlošci). Svaki dinamički sadržaj koji se koristi u predlošku mora se koristiti kao imenovani argument u pozivu na render_template ().

import camControlfrom flask import Flask, render_template, request, Response from flask_restful import Resource, Api, reqparse

app = Flask (_ name_)

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

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Trajanje videozapisa kada se detektira kretanje') parser.add_argument ('sens', type = int, help = 'Razina kretanja potrebna za pokretanje snimanja') parser.add_argument ('opt', type = str, help = 'Ručno snimite video ili snimite sliku')

ažuriranje razreda (resurs):

#Stuff za wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #upišite u tekstualnu datoteku koju razgovara s kamerom koja radi paralelno 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 (): "" "Početna stranica kontrolera" "" form = camControl.camFrame () #ovo je obrazac ako request.method == 'POST': print (request.form) args = [i za i u zahtjevu.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 = imageDictionary)

api.add_resource (Ažuriranje, '/update/')

ako je _naziv_ == '_glavni_':

app.run (host = '0.0.0.0', port = 80, debug = True, threaded = True)

Korak 8: Stvorite klasu operatora kamere

Sada želimo stvoriti datoteku pod nazivom camOperator.py. U njoj ćemo napraviti klasu fotoaparata s metodama upravljanja kamerom, koristeći već dostupne funkcije PiCamera. Primjerak ovog objekta koristit ćemo u sljedećem koraku u kojem ćemo kombinirati funkcionalnost kamere i senzora pokreta.

Metode definirane u ovoj klasi mijenjaju postavke "snimanja" na sigurnosnoj kameri pomoću unosa osjetljivosti i trajanja koje korisnik daje, dok utvrđuju zadane vrijednosti za ove varijable ako korisnički unos nije prisutan.

uvoz RPi. GPIO kao GPIOuvoz vremena uvoz pikamera iz datuma uvoza datum i vrijeme

Način rada GPIO.set (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

otkriti = 0

klasa kamereOperater:

def _init _ (samo):

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

def zapis (self, dur):

#Zapisi za zadano trajanje koje je postavio kontroler 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 operacija (self, dur, sens):

#Glavni rad kamere koja neprestano provjerava je li čovjek u blizini, ako se čovjek dovoljno dugo zadržava, počinjemo snimati! globalno otkrivanje i = GPIO.input (11) ako je i == 0: #Kad je izlaz senzora pokreta LOW detektira = 0 time.sleep (0.1) elif i == 1: #Kad je izlaz s senzora pokreta HIGH ispis (" otkriveno kretanje " +str (otkrivanje)) ako je otkriveno> = sens*10: self.record (dur) ispis (" SNIMLJENO ") otkrivanje = 0 vrijeme.spavanje (0,1) otkrivanje += 1

Korak 9: Izradite modul zapisa

Posljednji program potreban za ovaj projekt bit će napisan u datoteci pod nazivom rec.py. Ova datoteka govori kameri kada snimati, koliko dugo snimati i treba li/kada snimiti sliku. To čini tako što neprestano provjerava i čita korisničke podatke zapisane u tekstualnu datoteku od koraka 5. Ako je datoteka ažurirana, ona prilagođava vrijednosti osjetljivosti i trajanja prema tome, a zatim, ako je snimljena snimka ili slika, sprema sadržaj u pi, bilo u.h264 ili-j.webp

'' 'Radi paralelno s poslužiteljem za tikvice, čitajući kontrolne varijable koje postavljaju obrasci poslužitelja. Kontrolne varijable poslužitelja postavljaju se u zasebnu datoteku nakon podnošenja obrazaca. Rec modul čita ove varijable i ažurira kameru na temelju njih. '' 'import camOperator od datuma i datuma uvoza datuma i vremena uvoza

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #ovdje, otvaramo i zatvaramo u načinu pisanja kako bismo izbrisali sadržaj unutar datoteke prije pokretanja glavne petlje

#Kontinuirana petlja koja nadzire jesu li ljudi u blizini. Ako jesu, onda

#kamera počinje snimati. Ova funkcija radi paralelno s poslužiteljem tikvice #server koji upravlja ovom kamerom. recordInProcess = False while True: #check/record if (recordInProcess == False): rc.operation (rc.dur, rc.sens) #promijenite postavke kamere na temelju poslužitelja cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 za postavljanje u cameraSettingsFile.readlines (): if settingNum == 0: #Promjena trajanja rc.dur = int (postavka) elif settingNum == 1: #Promjena osjetljivosti rc.sens = int (postavka) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#izvršite radnju

# if rc.opt == "none": # continue if rc.opt == "rec / n" and recordingInProcess == False: print ("Pokretanje naredbe za snimanje iz kontrolera") #Generirajte naziv videozapisa na temelju trenutnog vremena videoName = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject /videos/' + videoName +'.h264 ') recordInProcess = True elif rc.opt == "stop / n" and recordingInProcess == True: print ("Zaustavljanje naredbe za snimanje iz kontrolera") 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 recordingInProcess == False: print ("Snap a pic naredbu iz kontrolera") pictureName = "snappedPic_ "+str (datetime.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. write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Korak 10: Pokrenite poslužitelj

Pokrenite poslužitelj
Pokrenite poslužitelj

SSH u pi i pokrenite poslužitelj pomoću gore prikazane naredbene linije.

Korak 11: ISPROBAJTE

ISPROBAJ!
ISPROBAJ!
ISPROBAJ!
ISPROBAJ!

Pristupite web stranici pomoću IP adrese i trebali biste moći daljinski upravljati kamerom!

Preporučeni: