Kazalo:

Varnostna kamera Raspberry Pi: 11 korakov (s slikami)
Varnostna kamera Raspberry Pi: 11 korakov (s slikami)

Video: Varnostna kamera Raspberry Pi: 11 korakov (s slikami)

Video: Varnostna kamera Raspberry Pi: 11 korakov (s slikami)
Video: ВСЯ НОЧЬ С ПОЛТЕРГЕЙСТОМ В ЖИЛОМ ДОМЕ, я заснял жуткую активность. 2024, Julij
Anonim
Varnostna kamera Raspberry Pi
Varnostna kamera Raspberry Pi

To je korak za korakom navodila, kako z Raspberry Pi ustvariti varnostno kamero IoT, aktivirano z gibanjem. Naučili se boste ustvariti spletni strežnik in obrazec za bučke, ki uporabniku omogoča, da prilagodi občutljivost fotoaparata in čas snemanja, ročno zažene/ustavi snemanje in/ali posname sliko, ki bo shranjena lokalno.

Zaloge

  • Malina Pi 3
  • Pi kamera
  • PIR senzor gibanja
  • sD kartice
  • Vir energije

1. korak: Sestavite strojno opremo

Sestavite strojno opremo
Sestavite strojno opremo
Sestavite strojno opremo
Sestavite strojno opremo
Sestavite strojno opremo
Sestavite strojno opremo
Sestavite strojno opremo
Sestavite strojno opremo

Ko je Pi izklopljen, vstavite kartico micro-SD v Pi. Vstavite tračni kabel modula kamere v vrata modula kamere na Pi. Nato priključite 3 nožice (označene z VCC, OUT in GND) detektorja gibanja PRI na nožice Pi GPIO. VCC priključite na napajanje 5,5 V, GND na maso, izhod pa na pin 11 na Pi.

2. korak: Prepričajte se, da je vaš Pi povezan z internetom

Prepričajte se, da je vaš Pi povezan z internetom
Prepričajte se, da je vaš Pi povezan z internetom

Zdaj vklopite Pi tako, da ga priključite na vir napajanja in preverite, ali ste povezani z internetom z ukazom ping. Če ne veste, kako svoj Pi povezati z internetom, kliknite tukaj.

sudo ping www.google.com

Če ste uspešni, bi morali videti, da Google prejema podatke.

Poleg tega lahko uporabite ifconfig za ogled vašega naslova IP.

sudo ifconfig

3. korak: Nastavite kamero

Z naslednjim ukazom odprite konfiguracijski vmesnik in omogočite kamero v "možnostih vmesnika".

sudo raspi-config

Po ponovnem zagonu lahko prikažete stanje fotoaparata in se prepričate, da je pravilno priključen.

vcgencmd get_camera

Nazadnje namestite modul picamera.

pip namestite pikamero

4. korak: Namestite Flask

Namestite bučko in modul za počitek bučke za Python:

sudo apt-get install python-dev python-pip

python -m pip install flask flask -restful

Nato bomo namestili modul bučke python, ki se uporablja za ustvarjanje obrazcev.

pip install flask-wtf

5. korak: Ustvarite razred obrazca

Naredite imenik iotProject, v katerega bodo shranjene vse vaše datoteke.

sudo mkdir iotProject

Ustvarite datoteko python z imenom "camControl.py".

sudo nano camControl.py

V tej datoteki bomo ustvarili naš razred obrazcev, ki nam omogoča ustvarjanje spletnega obrazca z besedilnimi polji in spustnim menijem, da lahko uporabnik spremeni nastavitve fotoaparata, ročno zažene/ustavi snemanje in zajame video.

iz flask_wtf uvoz FlaskFormiz wtforms.validators uvoz DataRequired from wtforms import SubmitField iz potrjevalnikov uvoza wtforms, IntegerField, BooleanField, SelectField

razred camFrame (FlaskForm):

videoDuration = IntegerField ('Čas snemanja (v sekundah)')

občutljivost = IntegerField ('Občutljivost gibanja (razpon 2500-10000) nVišja kot je številka, manj občutljiva je kamera', validators = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out of Range')])

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

submit = SubmitField ('Predloži')

6. korak: Ustvarite predlogo steklenice

Ustvarite predlogo steklenice
Ustvarite predlogo steklenice

Če želite ustvariti uporabniški vmesnik, morate oblikovati predlogo Flask, ki uporablja obrazec, ki ste ga pravkar ustvarili. Ta datoteka bo zapisana v html -u in shranjena v mapi, imenovani templates, ki naj bo v istem imeniku kot obrazec.

Znotraj mape s predlogami ustvarite datoteko, imenovano index.html. V tej datoteki ponovite zgoraj prikazano kodo.

7. korak: Upodobite predlogo

Zdaj je čas, da ustvarite datoteko, ki upodobi predlogo. Ustvarite datoteko z imenom appCam.py (poskrbite, da niste več v mapi s predlogami). Vsako dinamično vsebino, uporabljeno v predlogi, je treba uporabiti kot imenovani argument v klicu 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, ko zazna gibanje') parser.add_argument ('sens', type = int, help = 'Raven gibanja, potrebna za sprožitev snemanja') parser.add_argument ('opt', type = str, help = 'Ročno posnemite video ali posnemite sliko')

posodobitev razreda (vir):

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #write v besedilno datoteko, ki govori s kamero, ki deluje vzporedno 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 (): "" "Domača stran krmilnika" "" form = camControl.camFrame () #to je obrazec, če request.method == 'POST': print (request.form) args = [i za i v zahtevi.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 (Posodobi, '/update/')

če _name_ == '_main_':

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

8. korak: Ustvarite razred operaterja kamere

Zdaj želimo ustvariti datoteko z imenom camOperator.py. V njem bomo naredili razred fotoaparatov z metodami upravljanja kamere, pri čemer bomo uporabili že razpoložljive funkcije PiCamera. V naslednjem koraku bomo uporabili primerek tega predmeta, kjer bomo združili funkcionalnost kamere in senzorja gibanja.

Metode, opredeljene v tem razredu, spremenijo nastavitve "snemanja" na varnostni kameri z uporabo vnosov občutljivosti in trajanja, ki jih poda uporabnik, obenem pa določijo privzete vrednosti za te spremenljivke, če uporabniški vnos ni prisoten.

uvoz RPi. GPIO kot GPIOimport časa uvoz pikamere iz datuma in časa uvoz datetime

Način nastavitve GPIO (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

zazna = 0

razred fotoaparata Operater:

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 dano trajanje, ki jih nastavi krmilnik 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):

#Glavno delovanje kamere, ki nenehno preverja, ali je v bližini človek, če ostane dovolj dolgo, začnemo snemati! globalno zaznavanje i = GPIO.input (11), če je i == 0: #Ko je izhod iz senzorja gibanja LOW zaznan = 0 time.sleep (0.1) elif i == 1: #Ko je izhod iz senzorja gibanja HIGH print (" zaznano gibanje " +str (zaznavanje)), če zazna> = sens*10: self.record (dur) print (" RECORDED ") zaznavanje = 0 time.sleep (0,1) zaznavanje += 1

9. korak: Ustvarite zapisni modul

Zadnji program, potreben za ta projekt, bo zapisan v datoteki z imenom rec.py. Ta datoteka pove fotoaparatu, kdaj naj snema, kako dolgo snema in ali/kdaj posname fotografijo. To stori tako, da nenehno preverja in bere uporabniške podatke, zapisane v besedilno datoteko od 5. koraka. Če je bila datoteka posodobljena, se temu ustrezno prilagodi vrednosti občutljivosti in trajanja, nato pa, če je posnet posnetek ali slika, vsebino shrani v pi v obliki zapisa datoteke.h264 ali.jpg.

'' 'Deluje vzporedno s strežnikom za bučke in bere kontrolne spremenljivke, ki jih določijo obrazci strežnika. Spremenljivke strežnika za upravljanje so nastavljene v ločeni datoteki, ko so obrazci predloženi. Modul rec bere te spremenljivke in na podlagi njih posodobi kamero. '' 'uvoz camOperator iz datuma in časa uvoza datuma in časa uvoza

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #tukaj odpremo in zapremo v načinu pisanja, da izbrišemo vsebino v datoteki, preden se zažene glavna zanka

#Neprekinjena zanka, ki opazuje, ali so ljudje v bližini. Če so, potem

#kamera začne snemati. Ta funkcija deluje paralelno s strežnikom bučke #server, ki upravlja to kamero. recordInProcess = False, medtem ko je True: #preverite/zapišite if (recordInProcess == False): rc.operation (rc.dur, rc.sens) #spremenite nastavitve kamere glede na strežnik cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 za nastavitev v cameraSettingsFile.readlines (): če settingNum == 0: #Sprememba trajanja rc.dur = int (nastavitev) elif nastavitevNum == 1: #Sprememba občutljivosti rc.sens = int (nastavitev) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#izvedite dejanje

# if rc.opt == "no" = "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" in recordInProcess == True: print ("Ustavitev ukaza za snemanje iz krmilnika") 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" in recordInProcess == False: print ("Ustrezi ukaz pic iz krmilnika") 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"

10. korak: Zaženite strežnik

Zaženite strežnik
Zaženite strežnik

SSH v pi in zaženite strežnik z uporabo zgornje ukazne vrstice.

11. korak: PREIZKUSITE

POSKUSI!
POSKUSI!
POSKUSI!
POSKUSI!

Dostopajte do spletne strani z naslovom IP in kamero bi morali upravljati na daljavo!

Priporočena: