Bezpečnostní kamera Raspberry Pi: 11 kroků (s obrázky)
Bezpečnostní kamera Raspberry Pi: 11 kroků (s obrázky)
Anonim
Bezpečnostní kamera Raspberry Pi
Bezpečnostní kamera Raspberry Pi

Toto je krok za krokem s pokyny, jak vytvořit bezpečnostní kameru aktivovanou pohybem internetu věcí pomocí Raspberry Pi. Dozvíte se, jak vytvořit webový server v baňce a formulář, který uživateli umožňuje upravit citlivost a dobu záznamu kamery, ručně spustit/zastavit záznam a/nebo pořídit snímek, který bude uložen na místo.

Zásoby

  • Raspberry Pi 3
  • Pi kamera
  • PIR pohybový senzor
  • SD karta
  • Zdroj energie

Krok 1: Sestavte hardware

Sestavte hardware
Sestavte hardware
Sestavte hardware
Sestavte hardware
Sestavte hardware
Sestavte hardware
Sestavte hardware
Sestavte hardware

Když je Pi vypnuté, vložte do něj kartu micro-SD. Vložte plochý kabel modulu kamery do portu modulu kamery na Pi. Poté připojte 3 piny (označené VCC, OUT a GND) detektoru pohybu PRI k pinům GPIO Pi. Připojte VCC k napájení 5,5 V, GND k zemi a OUT ke kolíku 11 na Pi.

Krok 2: Zajistěte, aby byl váš Pi připojen k internetu

Zajistěte, aby byl váš Pi připojen k internetu
Zajistěte, aby byl váš Pi připojen k internetu

Nyní zapněte Pi připojením ke zdroji napájení a ověřte, že jste připojeni k internetu pomocí příkazu ping. Pokud nevíte, jak připojit Pi k internetu, klikněte sem.

sudo ping www.google.com

Pokud jste úspěšní, měli byste vidět, že společnost Google přijímá data.

Kromě toho můžete použít ifconfig k zobrazení vaší IP adresy.

sudo ifconfig

Krok 3: Nastavení kamery

Pomocí následujícího příkazu otevřete konfigurační rozhraní a povolte kameru v „možnostech rozhraní“.

sudo raspi-config

Po restartu můžete zobrazit stav kamery a ujistit se, že je správně připojena.

vcgencmd get_camera

Nakonec nainstalujte modul picamera.

pip install picamera

Krok 4: Nainstalujte baňku

Nainstalujte modul baňky a modul pro odpočinek v baňce pro Python:

sudo apt-get install python-dev python-pip

python -m pip install flask flask -restful

Dále nainstalujeme modul baňky pythonu používaný pro vytváření formulářů.

pip install flask-wtf

Krok 5: Vytvořte třídu formuláře

Vytvořte adresář s názvem iotProject, do kterého budete ukládat všechny své soubory.

sudo mkdir iotProject

Vytvořte soubor pythonu s názvem „camControl.py“.

sudo nano camControl.py

V tomto souboru vytvoříme naši třídu formulářů, která nám umožňuje vytvořit webový formulář s textovými poli a rozbalovací nabídkou, aby uživatel mohl měnit nastavení fotoaparátu, ručně spouštět/zastavovat záznam a pořizovat video.

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

třída camFrame (FlaskForm):

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

citlivost = IntegerField ('Citlivost na pohyb (rozsah 2500-10000) nČím vyšší číslo, tím je kamera méně citlivá', validátory = [validators. NumberRange (min = 2500, max = 10 000, zpráva = 'Hodnota mimo rozsah')])

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

submit = SubmitField ('Odeslat')

Krok 6: Vytvořte šablonu baňky

Vytvořte šablonu baňky
Vytvořte šablonu baňky

Chcete -li vytvořit uživatelské rozhraní, musíte navrhnout šablonu baňky, která používá formulář, který jste právě vytvořili. Tento soubor bude zapsán v html a uložen do složky s názvem šablony, která by měla být ve stejném adresáři jako váš formulář.

Ve složce šablon vytvořte soubor s názvem index.html. V tomto souboru replikujte výše uvedený kód.

Krok 7: Vykreslení šablony

Nyní je čas vytvořit soubor, který vykreslí šablonu. Vytvořte soubor s názvem appCam.py (ujistěte se, že již nejste ve složce šablon). Jakýkoli dynamický obsah použitý v šabloně musí být použit jako pojmenovaný argument ve volání render_template ().

importovat kameru

app = Flask (_ name_)

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

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Trvání videa, když je detekován pohyb') parser.add_argument ('sens', type = int, help = 'Úroveň pohybu nutná ke spuštění záznamu') analyzátor.add_argument ('opt', type = str, help = 'Ručně nahrát video nebo zachytit obrázek')

aktualizace třídy (zdroj):

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #zapište do textového souboru, který hovoří s kamerou běžící paralelně + '\ 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 (): "" "Domovská stránka ovladače" "" form = camControl.camFrame () #toto je formulář, pokud 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 (Aktualizace, '/aktualizovat/')

if _name_ == '_main_':

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

Krok 8: Vytvořte třídu kamerových operátorů

Nyní chceme vytvořit soubor s názvem camOperator.py. V něm vytvoříme třídu kamer s metodami ovládání kamery s využitím již dostupných funkcí PiCamera. Instanci tohoto objektu použijeme v dalším kroku, kde spojíme funkčnost kamery a pohybového senzoru.

Metody definované v této třídě mění nastavení „záznamu“na bezpečnostní kameře pomocí vstupů citlivosti a doby trvání, které poskytuje uživatel, a stanoví výchozí hodnoty pro tyto proměnné, pokud není zadán vstup uživatele.

importovat RPi. GPIO jako GPIOimportovat čas importovat pikamery z datetime import datetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

detekovat = 0

fotoaparát třídy Operátor:

def _init _ (self):

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

def záznam (vlastní, dur):

#Records for the fixed 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 operace (self, dur, sens):

#Hlavní provoz kamery, která neustále kontroluje, zda je poblíž člověk, pokud člověk pobývá dostatečně dlouho, spouštíme nahrávání! global detect i = GPIO.input (11) if i == 0: #When output from motion sensor is LOW detect = 0 time.sleep (0.1) elif i == 1: #When output from motion sensor is HIGH print (" detekován pohyb " +str (detekovat)) pokud detekovat> = sens*10: self.record (dur) tisk (" RECORDED ") detekovat = 0 čas.spánek (0,1) detekovat += 1

Krok 9: Vytvořte modul záznamu

Poslední program potřebný pro tento projekt bude zapsán do souboru s názvem rec.py. Tento soubor říká fotoaparátu, kdy má nahrávat, jak dlouho nahrávat a zda/kdy pořídit snímek. Toho je dosaženo neustálou kontrolou a čtením uživatelských dat zapsaných do textového souboru od kroku 5. Pokud byl soubor aktualizován, upraví odpovídajícím způsobem hodnoty citlivosti a doby trvání, a pokud je pořízen záznam nebo obrázek, uloží obsah do pi, buď ve formátu souboru.h264 nebo.jpg.

'' 'Běží souběžně s bankovým serverem, čte kontrolní proměnné nastavené serverovými formuláři. Proměnné řízení serveru jsou po odeslání formulářů nastaveny v samostatném souboru. Modul rec čte tyto proměnné a na základě nich aktualizuje kameru. '' 'import camOperator z datetime import datetime import time

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #zde otevíráme a zavíráme v režimu zápisu, abychom odstranili obsah v souboru před spuštěním hlavní smyčky

#Nepřetržitá smyčka, která sleduje, zda jsou poblíž lidé. Pokud ano, pak

#kamera začne nahrávat. Tato funkce běží paralelně s bankou #server, který ovládá tuto kameru. recordingInProcess = False while True: #check/record if (záznamInProcess == False): rc.operation (rc.dur, rc.sens) #změňte nastavení kamery na základě serveru cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 pro nastavení 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 ()

#provést akci

# 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 = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile. zapište ("none / n") rc.opt = "none / n" elif rc.opt == "pic / n" and 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: Spusťte server

Spusťte server
Spusťte server

SSH do pí a spusťte server pomocí výše uvedeného příkazového řádku.

Krok 11: VYZKOUŠEJTE TO

VYZKOUŠEJ TO!
VYZKOUŠEJ TO!
VYZKOUŠEJ TO!
VYZKOUŠEJ TO!

Vstupte na webovou stránku pomocí IP adresy a měli byste mít možnost ovládat kameru na dálku!

Doporučuje: