Sadržaj:
- Supplies
- Korak 1: Sastavite hardver
- Korak 2: Provjerite je li vaš Pi povezan s internetom
- Korak 3: Postavite kameru
- Korak 4: Instalirajte Flask
- Korak 5: Kreirajte klasu obrasca
- Korak 6: Kreirajte predložak bočice
- Korak 7: Renderirajte predložak
- Korak 8: Kreirajte klasu operatora kamere
- Korak 9: Kreirajte modul zapisa
- Korak 10: Pokrenite server
- Korak 11: Isprobajte
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-23 14:37
Ovo je korak po korak uputstvo o tome kako stvoriti IoT sigurnosnu kameru s pokretom 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.
Supplies
- Raspberry 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 trakasti kabel modula kamere u priključak modula kamere na Pi. Zatim spojite 3 pina (označeni kao VCC, OUT i GND) PRI detektora pokreta s Pi -jevim GPIO pinovima. 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 na internet, 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 kamere kako biste bili sigurni da je pravilno povezana.
vcgencmd get_camera
Na kraju, instalirajte modul pikamera.
pip install pikamera
Korak 4: Instalirajte Flask
Instalirajte modul tikvice i tišine 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 kreiranje obrazaca.
pip install flask-wtf
Korak 5: Kreirajte klasu obrasca
Napravite direktorij pod nazivom iotProject u koji će se pohraniti sve vaše datoteke.
sudo mkdir iotProject
Kreirajte python datoteku pod nazivom "camControl.py".
sudo nano camControl.py
U ovoj datoteci ćemo stvoriti našu klasu obrasca, koja nam omogućava kreiranje web obrasca s okvirima za tekst i padajućim izbornikom kako bi korisnik mogao promijeniti postavke kamere, ručno pokrenuti/zaustaviti snimanje i snimiti video.
iz flask_wtf import FlaskFormiz wtforms.validators uvoz 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'), ('pic', 'Take Picture')])
submit = SubmitField ('Submit')
Korak 6: Kreirajte predložak bočice
Da biste kreirali korisničko sučelje, morate dizajnirati predložak Flask koji koristi obrazac koji ste upravo stvorili. Ova datoteka će biti napisana na html -u i pohranjena u fasciklu pod nazivom predlošci, koja bi trebala biti u istom direktoriju kao i vaš obrazac.
Unutar mape sa 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 prikazuje predložak. Kreirajte datoteku pod nazivom appCam.py (provjerite da više niste 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 videa kada se detektira pokret') parser.add_argument ('sens', type = int, help = 'Nivo pokreta potreban za pokretanje snimanja') parser.add_argument ('opt', type = str, help = 'Ručno snimite video ili snimite sliku')
ažuriranje klase (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 sa 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 (Update, '/update/')
if _name_ == '_main_':
app.run (host = '0.0.0.0', port = 80, debug = True, threaded = True)
Korak 8: Kreirajte 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. U sljedećem koraku koristit ćemo instancu ovog objekta gdje ćemo kombinirati funkcionalnost kamere i senzora pokreta.
Metode definirane u ovoj klasi mijenjaju postavke "snimanja" na sigurnosnoj kameri korištenjem unosa osjetljivosti i trajanja koje korisnik daje, uz utvrđivanje zadanih vrijednosti za ove varijable ako korisnički unos nije prisutan.
uvesti RPi. GPIO kao GPIOuvoz vremena uvesti pikameru iz datuma i datuma uvesti datum -vreme
GPIO.setmode (GPIO. BOARD)
GPIO.setup (11, GPIO. IN)
detektiraj = 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 zadato 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: #Kada je izlaz sa senzora pokreta LOW detektuje = 0 time.sleep (0.1) elif i == 1: #Kada je izlaz sa senzora pokreta HIGH ispis (" otkriveno kretanje " +str (otkrivanje)) ako se otkrije> = sens*10: self.record (dur) ispis (" SNIMLJENO ") otkrivanje = 0 time.sleep (0.1) otkrivanje += 1
Korak 9: Kreirajte modul zapisa
Posljednji program potreban za ovaj projekt bit će napisan u datoteci pod nazivom rec.py. Ova datoteka govori kameri kada treba snimati, koliko dugo snima i da li/kada treba 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 snimljen snimak ili slika, sadržaj sprema u pi, bilo u.h264 ili-j.webp
'' 'Radi paralelno sa flask serverom, čita kontrolne varijable koje postavljaju obrasci servera. Kontrolne varijable poslužitelja postavljaju se u zasebnu datoteku nakon podnošenja obrazaca. Rec modul čita ove varijable i ažurira kameru na osnovu njih. '' 'import camOperator iz 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
#Neprekidna petlja koja nadgleda da li su ljudi u blizini. Ako jesu, onda
#kamera počinje snimanje. Ova funkcija radi paralelno sa serverama #serve koji kontroliše ovu kameru. recordInProcess = False while True: #check/record if (recordInProcess == False): rc.operation (rc.dur, rc.sens) #promenite postavke kamere na osnovu servera cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 za postavljanje u cameraSettingsFile.readlines (): ako settingNum == 0: #Promjena trajanja rc.dur = int (postavka) elif settingNum == 1: #Promjena osjetljivosti rc.sens = int (postavka) elif settingNum == 2: #Promjena radnje rc.opt = setting settingNum += 1 cameraSettingsFile.close ()
#izvršite radnju
# if rc.opt == "none": # nastavi ako je rc.opt == "rec / n" i recordInProcess == False: print ("Pokretanje naredbe za snimanje iz kontrolera") # Generirajte naziv za video na osnovu 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" i recordInProcess == 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 ("Snimite naredbu pic sa 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 server
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čuje se:
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 je
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 sa svoje web kamere prenijeli na svoju e -poštu - jednostavno upotrijebite svoj preglednik. Upotrijebite ažurirani preglednik Firefox, Chrome, Edge ili Opera u sustavu Windows, Mac ili Android za snimanje slike
DIY profesionalna sigurnosna kamera za noćni vid otvorenog koda: 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 otvorenog koda. Da, ovdje govorimo o pravoj otvorenoj 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 vam i priključivanje do četiri dodatne jeftine USB web kamere. Karakteristike: napaja se putem USB -a, otkriva pokrete sa
Sigurnosna kamera VHS Library Pi: 3 koraka (sa slikama)
Sigurnosna kamera VHS Library Pi: Ovo je stara futrola VHS videoteke koja sada pruža savršen dom za Raspberry Pi sigurnosnu kameru. Kućište sadrži Pi Zero, a kamera viri kroz hrbat lažne knjige. To je zaista jednostavna konstrukcija sa izgledom starog svijeta