Sadržaj:
- Pribor
- Korak 1: Sastavite hardver
- Korak 2: Provjerite je li vaš Pi povezan s internetom
- Korak 3: Postavite kameru
- Korak 4: Instalirajte Flask
- Korak 5: Stvorite klasu obrasca
- Korak 6: Stvorite predložak bočice
- Korak 7: Renderirajte predložak
- Korak 8: Stvorite klasu operatora kamere
- Korak 9: Izradite modul zapisa
- Korak 10: Pokrenite poslužitelj
- Korak 11: ISPROBAJTE
Video: Sigurnosna kamera Raspberry Pi: 11 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:33
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
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
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
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
SSH u pi i pokrenite poslužitelj pomoću gore prikazane naredbene linije.
Korak 11: ISPROBAJTE
Pristupite web stranici pomoću IP adrese i trebali biste moći daljinski upravljati kamerom!
Preporučeni:
Sigurnosna kamera Raven Pi: 7 koraka (sa slikama)
Sigurnosna kamera Raven Pi: Ovaj plastični gavran uživa u novom zagrobnom životu kao praktična, ali jeziva sigurnosna kamera, Raven Pi. Ima Raspberry Pi u trbuhu i Pi kameru ugrađenu u vrat, koja snima HD video kad god se detektira pokret. U istom trenutku njegov
Najjednostavnija web kamera kao sigurnosna kamera - otkrivanje pokreta i slike poslane e -poštom: 4 koraka
Najjednostavnija web kamera kao sigurnosna kamera - otkrivanje pokreta i slike poslane e -poštom: više ne morate preuzimati ili konfigurirati softver da biste slike s web -kamere s e -pošte primili na svoju e -poštu - jednostavno upotrijebite preglednik. Za snimanje slike upotrijebite ažurirani preglednik Firefox, Chrome, Edge ili Opera u sustavu Windows, Mac ili Android
DIY profesionalna sigurnosna kamera za noćni vid s otvorenim kodom: 10 koraka (sa slikama)
DIY profesionalna sigurnosna kamera za noćni vid s otvorenim kodom: U ovom novom vodiču zajedno ćemo napraviti našu Raspberry Pi kameru za video nadzor s otvorenim kodom. Da, ovdje govorimo o pravoj vanjskoj nadzornoj kameri otvorenog koda, sposobnoj za noćni vid i detekciju pokreta, svi povezani s našim Jeedom
WoodThing IOT sigurnosna kamera: 8 koraka (sa slikama)
WoodThing IOT sigurnosna kamera: Ovo je moćna IP kamera zasnovana na Raspberry PI. Pokreće motionEyeOS, pa se može koristiti za upravljanje s više udaljenih IP kamera, a omogućuje i priključivanje do četiri dodatne jeftine USB web kamere. Značajke: napaja se USB -om, otkriva pokrete s
Unaprijeđena sigurnosna kamera kamere: 7 koraka (sa slikama)
Unaprijeđena kamera za sigurnosnu kameru: Siguran sam da većina vas koji ovo čitate ima ladicu ili ormar negdje pun nekad omiljene tehnologije koja je upravo postala prestara i zastarjela. Definitivno imam svoj dio stare tehnologije i tužno je vidjeti da takav potencijal nestaje. Pa, u ovom vodiču ja sam