Bezpečnostná kamera Raspberry Pi: 11 krokov (s obrázkami)
Bezpečnostná kamera Raspberry Pi: 11 krokov (s obrázkami)
Anonim
Bezpečnostná kamera Raspberry Pi
Bezpečnostná kamera Raspberry Pi

Toto je podrobný návod, ako vytvoriť bezpečnostnú kameru s aktivovaným pohybom internetu vecí pomocou Raspberry Pi. Dozviete sa, ako vytvoriť webový server v banke a formulár, ktorý používateľovi umožní nastaviť citlivosť fotoaparátu a čas záznamu, manuálne spustiť/zastaviť nahrávanie a/alebo nasnímať obrázok, ktorý sa lokálne uloží.

Zásoby

  • Raspberry Pi 3
  • Pi kamera
  • Snímač pohybu PIR
  • SD karta
  • Zdroj energie

Krok 1: Zostavte hardvér

Zostavte hardvér
Zostavte hardvér
Zostavte hardvér
Zostavte hardvér
Zostavte hardvér
Zostavte hardvér
Zostavte hardvér
Zostavte hardvér

Keď je Pi vypnuté, vložte do neho kartu micro-SD. Vložte plochý kábel modulu kamery do portu modulu kamery na zariadení Pi. Potom pripojte 3 piny (označené VCC, OUT a GND) detektora pohybu PRI k pinom GPIO Pi. Pripojte VCC k 5,5 V napájania, GND k zemi a OUT ku kolíku 11 na Pi.

Krok 2: Zaistite, aby bol váš Pi pripojený k internetu

Zaistite, aby bol váš Pi pripojený k internetu
Zaistite, aby bol váš Pi pripojený k internetu

Teraz zapnite Pi pripojením k zdroju napájania a pomocou príkazu ping overte, či ste pripojení k internetu. Ak neviete, ako pripojiť svoje Pi k internetu, kliknite sem.

sudo ping www.google.com

Ak ste úspešní, mali by ste vidieť, že spoločnosť Google prijíma údaje.

Okrem toho môžete na zobrazenie svojej adresy IP použiť ifconfig.

sudo ifconfig

Krok 3: Nastavte fotoaparát

Nasledujúcim príkazom otvoríte konfiguračné rozhranie a povolíte kameru v „možnostiach rozhrania“.

sudo raspi-config

Po reštarte môžete zobraziť stav fotoaparátu a uistiť sa, že je správne pripojený.

vcgencmd get_camera

Nakoniec nainštalujte modul picamera.

pip install picamera

Krok 4: Nainštalujte banku

Nainštalujte banku a modul na oddych v banke pre Python:

sudo apt-get install python-dev python-pip

python -m pip nainštalujte banku flask -restful

Ďalej nainštalujeme modul banky python, ktorý sa používa na vytváranie formulárov.

pip install flask-wtf

Krok 5: Vytvorte triedu formulárov

Vytvorte adresár s názvom iotProject, do ktorého sa budú ukladať všetky vaše súbory.

sudo mkdir iotProject

Vytvorte súbor pythonu s názvom „camControl.py“.

sudo nano camControl.py

V tomto súbore vytvoríme triedu formulárov, ktorá nám umožní vytvoriť webový formulár s textovými poliami a rozbaľovacou ponukou, pomocou ktorej bude môcť používateľ meniť nastavenia fotoaparátu, manuálne spúšťať/zastavovať nahrávanie a snímať video.

z flask_wtf import FlaskForm z wtforms.validators import DataRequired from wtforms import SubmitField from wtforms import validators, IntegerField, BooleanField, SelectField

trieda camFrame (FlaskForm):

videoDuration = IntegerField ('Čas záznamu (v sekundách)')

citlivosť = IntegerField („Citlivosť na pohyb (rozsah 2 500-10 000) nČím vyššie je číslo, tým je fotoaparát menej citlivý“, validátory = [validátory. NumberRange (min = 2500, max = 10 000, správa = 'Hodnota mimo rozsah')])

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

submit = SubmitField ('Odoslať')

Krok 6: Vytvorte šablónu banky

Vytvorte šablónu banky
Vytvorte šablónu banky

Na vytvorenie používateľského rozhrania musíte navrhnúť šablónu banky, ktorá používa formulár, ktorý ste práve vytvorili. Tento súbor bude zapísaný v html a uložený v priečinku s názvom šablóny, ktorý by mal byť v rovnakom adresári ako váš formulár.

V priečinku so šablónami vytvorte súbor s názvom index.html. V tomto súbore replikujte kód uvedený vyššie.

Krok 7: Vykreslite šablónu

Teraz je načase vytvoriť súbor, ktorý vykreslí šablónu. Vytvorte súbor s názvom appCam.py (uistite sa, že sa už nenachádzate v priečinku so šablónami). Akýkoľvek dynamický obsah použitý v šablóne musí byť použitý ako pomenovaný argument vo výzve na render_template ().

importovať kameru

app = Flask (_ name_)

app.config ['SECRET_KEY'] = '13542' api = Api (aplikácia)

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Trvanie videa pri detekcii pohybu') parser.add_argument ('sens', type = int, help = 'Úroveň pohybu potrebná na spustenie záznamu') analyzátor.add_argument ('opt', type = str, help = 'Manuálne nahrať video alebo zachytiť obrázok')

Aktualizácia triedy (zdroj):

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #napíšte do textového súboru, ktorý hovorí s kamerou bežiacou paralelne 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 () návrat {'dur': args ['dur'], 'sens': args ['sense'], 'opt': args ['opt']}

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

def index (): "" "Domovská stránka ovládača" "" form = camControl.camFrame () #toto je formulár, ak 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 = {"filename": "image.jpg"} return render_template ('index.html', form = form, image = imageDictionary)

api.add_resource (Aktualizácia, '/aktualizovať/')

if _name_ == '_main_':

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

Krok 8: Vytvorte triedu operátorov kamery

Teraz chceme vytvoriť súbor s názvom camOperator.py. V ňom vytvoríme triedu kamier s metódami na ovládanie kamery s využitím už dostupných funkcií PiCamera. Inštanciu tohto objektu použijeme v nasledujúcom kroku, kde spojíme funkcionalitu kamery a pohybového senzora.

Metódy definované v tejto triede menia nastavenia „záznamu“na bezpečnostnej kamere pomocou vstupov citlivosti a trvania, ktoré poskytuje používateľ, a stanovujú predvolené hodnoty pre tieto premenné, ak nie je prítomný vstup používateľa.

importovať RPi. GPIO ako GPIOimport času importovať pikamery z dátumu a času importu dátumu a času

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

detekovať = 0

triedna kamera Operátor:

def _init _ (self):

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

def record (self, dur):

#Records for the certain duration set by the controller 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 operácia (self, dur, sens):

#Hlavná prevádzka kamery, ktorá neustále kontroluje, či je v blízkosti človek, a ak tam človek pobýva dostatočne dlho, začíname nahrávať! globálna detekcia i = GPIO.vstup (11) ak i == 0: #Keď je výstup zo snímača pohybu NÍZKY, detekcia = 0 čas.spánok (0,1) elif i == 1: #Keď je výstup zo snímača pohybu VYSOKÝ, tlač (" detekovaný pohyb " +str (detekovať)) ak je detekovaný> = senzor*10: self.record (dur) tlač (" RECORDED ") detekovať = 0 čas.spánok (0,1) detekovať += 1

Krok 9: Vytvorte záznamový modul

Posledný program potrebný pre tento projekt bude zapísaný do súboru s názvom rec.py. Tento súbor informuje fotoaparát, kedy má nahrávať, ako dlho nahrávať a či/kedy má nasnímať obrázok. Vykonáva to neustálou kontrolou a čítaním používateľských údajov zapísaných do textového súboru od kroku 5. Ak bol súbor aktualizovaný, zodpovedajúcim spôsobom upraví hodnoty citlivosti a trvania a potom, ak sa nasníma záznam alebo obrázok, uloží obsah do pi, buď vo formáte súboru.h264 alebo.jpg.

'' 'Beží súbežne s bankovým serverom a číta riadiace premenné nastavené serverovými formulármi. Riadiace premenné servera sú po odoslaní formulárov nastavené v samostatnom súbore. Rec modul číta tieto premenné a aktualizuje na základe nich kameru. '' 'import camOperator z dátumu a času importu

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #tu, v režime zápisu otvárame a zatvárame, aby sme pred spustením hlavnej slučky odstránili obsah zo súboru.

#Súvislá slučka, ktorá sleduje, či sú v blízkosti ľudia. Ak sú, tak

#kamera začne nahrávať. Táto funkcia je súbežne s bankou #server, ktorý ovláda túto kameru. recordingInProcess = False while True: #check/record if (záznamInProcess == False): rc.operation (rc.dur, rc.sens) #zmeňte nastavenia kamery na základe servera CameraSettingsFile = otvorený ("cameraSettings.txt", 'r') settingNum = 0 pre nastavenie v CameraSettingsFile.readlines (): if settingNum == 0: #Duration change rc.dur = int (setting) elif settingNum == 1: #Sensitivity change rc.sens = int (setting) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#vykonajte akciu

# if rc.opt == "none": # continue if rc.opt == "rec / n" and recordingInProcess == False: print ("Running record command from controller") #Generate name for video based on current time videoName = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject /videos/' + videoName +'.h264 ') recordingInProcess = True elif rc.opt == "stop / n" and recordingInProcess == True: print ("Stopping record command from controller") rc.cam.stop_recording () recordingInProcess = False cameraSettingsFile = otvorený ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile. zapíšte ("nikto / n") rc.opt = "nikto / n" odstráňte rc.opt == "obrázok / n" a recordingInProcess == False: print ("Snap a pic command from the controller") pictureName = "snappedPic_ "+str (datetime.now ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.replace ('. ',') rc.cam.st art_preview () time.sleep (5) rc.cam.capture ('images/' + 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"

Krok 10: Spustite server

Spustite server
Spustite server

SSH do pí a spustite server pomocou príkazového riadka uvedeného vyššie.

Krok 11: VYSKÚŠAJTE TO

VYSKÚŠAJ TO!
VYSKÚŠAJ TO!
VYSKÚŠAJ TO!
VYSKÚŠAJ TO!

Prejdite na webovú stránku pomocou adresy IP a mali by ste byť schopní ovládať kameru na diaľku!

Odporúča: