Tartalomjegyzék:

Raspberry Pi biztonsági kamera: 11 lépés (képekkel)
Raspberry Pi biztonsági kamera: 11 lépés (képekkel)

Videó: Raspberry Pi biztonsági kamera: 11 lépés (képekkel)

Videó: Raspberry Pi biztonsági kamera: 11 lépés (képekkel)
Videó: ПРОСТОЕ БЛЮДО‼ ПОДОЙДЁТ К МЯСУ РЫБЕ. ХРЕНОВИНА. КОМЕДИЯ 2024, November
Anonim
Raspberry Pi biztonsági kamera
Raspberry Pi biztonsági kamera

Ez lépésről lépésre oktatható arról, hogyan lehet IoT, mozgással aktivált biztonsági kamerát létrehozni egy Raspberry Pi segítségével. Megtanulja, hogyan hozhat létre egy lombik webszervert és űrlapot, amely lehetővé teszi a felhasználó számára a fényképezőgép érzékenységének és rögzítési idejének beállítását, a felvétel kézi indítását/leállítását és/vagy a helyben mentendő kép készítését.

Kellékek

  • Raspberry Pi 3
  • Pi kamera
  • PIR mozgásérzékelő
  • SD kártya
  • Áramforrás

Lépés: Szerelje össze a hardvert

Szerelje össze a hardvert
Szerelje össze a hardvert
Szerelje össze a hardvert
Szerelje össze a hardvert
Szerelje össze a hardvert
Szerelje össze a hardvert
Szerelje össze a hardvert
Szerelje össze a hardvert

Amíg a Pi ki van kapcsolva, helyezze be a mikro-SD kártyát a Pi-be. Csatlakoztassa a kameramodul szalagkábelét a kamera kameramoduljának portjához. Ezután csatlakoztassa a PRI mozgásérzékelő 3 érintkezőjét (VCC, OUT és GND) a Pi GPIO csapjaihoz. Csatlakoztassa a VCC -t 5,5 V -os tápellátáshoz, a GND -t a földhöz, és az OUT -t a Pi 11 -es tűjéhez.

2. lépés: Győződjön meg arról, hogy a Pi csatlakozik az internethez

Győződjön meg arról, hogy a Pi csatlakozik az internethez
Győződjön meg arról, hogy a Pi csatlakozik az internethez

Most kapcsolja be a Pi -t áramforráshoz csatlakoztatva, és ellenőrizze, hogy csatlakozik -e az internethez a ping paranccsal. Ha nem tudja, hogyan csatlakoztassa a Pi -t az internethez, kattintson ide.

sudo ping www.google.com

Ha sikeres vagy, látnod kell, hogy a Google fogadja az adatokat.

Ezenkívül az ifconfig használatával megtekintheti IP -címét.

sudo ifconfig

3. lépés: Állítsa be a kamerát

A következő paranccsal nyissa meg a konfigurációs felületet, és engedélyezze a kamerát az "interfész opciók" menüben.

sudo raspi-config

Az újraindítás után megjelenítheti fényképezőgépének állapotát, hogy megbizonyosodjon arról, hogy megfelelően van csatlakoztatva.

vcgencmd get_camera

Végül telepítse a picamera modult.

pip install picamera

4. lépés: Telepítse a lombikot

Telepítse a lombikot és a lombiknyugtató modult a Python számára:

sudo apt-get install python-dev python-pip

python -m pip install lombik lombik -nyugtató

Ezután telepítünk egy űrlapok létrehozásához használt python -lombik modult.

pip install flask-wtf

5. lépés: Hozzon létre egy űrlaposztályt

Készítse el az iotProject nevű könyvtárat az összes fájl tárolására.

sudo mkdir iotProject

Hozzon létre egy "camControl.py" nevű python fájlt.

sudo nano camControl.py

Ebben a fájlban létrehozjuk űrlaposztályunkat, amely lehetővé teszi számunkra, hogy webes űrlapot hozzunk létre szövegdobozokkal és egy legördülő menüvel, hogy a felhasználó módosítsa a kamera beállításait, manuálisan indítsa el/állítsa le a felvételt, és készítsen videót.

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

osztály camFrame (FlaskForm):

videoDuration = IntegerField ('Felvételi idő (másodpercben)')

érzékenység = IntegerField ('Mozgásérzékenység (2500-10000 tartomány) nMinél magasabb a szám, annál kevésbé érzékeny a kamera', érvényesítők = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out of Range'])

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

benyújtás = SubmitField ('Küldés')

6. lépés: Lombik sablon létrehozása

Hozzon létre egy lombik sablont
Hozzon létre egy lombik sablont

A felhasználói felület létrehozásához meg kell terveznie egy lombik sablont, amely az imént létrehozott űrlapot használja. Ezt a fájlt html -ben írják, és a sablonok nevű mappában tárolják, amelynek ugyanabban a könyvtárban kell lennie, mint az űrlap.

A sablonok mappájában hozzon létre egy index.html nevű fájlt. Ebben a fájlban ismételje meg a fent látható kódot.

7. lépés: A sablon megjelenítése

Itt az ideje, hogy hozzon létre egy fájlt, amely megjeleníti a sablont. Hozzon létre egy appCam.py nevű fájlt (győződjön meg arról, hogy már nincs a sablonok mappában). A sablonban használt minden dinamikus tartalmat a render_template () hívásban megnevezett argumentumként kell használni.

import camControl lombikból import Flask, render_template, request, Response from flask_restful import Resource, Api, reqparse

app = Lombik (_ név_)

app.config ['SECRET_KEY'] = '13542' api = Api (alkalmazás)

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'A videó időtartama mozgás észlelésekor') parser.add_argument ('sens', type = int, help = 'A felvétel elindításához szükséges mozgásszint') parser.add_argument ('opt', type = str, help = 'Videó kézi rögzítése vagy kép készítése')

osztály frissítése (forrás):

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #írjuk be a szövegfájlba, amely beszélget a párhuzamosan futó kamerával 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 ('/', metódus = ['GET', 'POST'])

def index (): "" "A vezérlő honlapja" "" form = camControl.camFrame () #ez egy űrlap, ha 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 = {"fájlnév": "image.jpg"} return render_template ('index.html', form = forma, image = imageDictionary)

api.add_resource (Frissítés, '/update/')

ha _name_ == '_main_':

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

8. lépés: Hozzon létre egy kamera kezelői osztályt

Most egy camOperator.py nevű fájlt szeretnénk létrehozni. Ebben elkészítünk egy kameraosztályt a kamera működésének módszereivel, a már rendelkezésre álló PiCamera funkciók felhasználásával. A következő lépésben ennek az objektumnak egy példányát fogjuk használni, ahol egyesítjük a kamera és a mozgásérzékelő funkcióit.

Az ebben az osztályban meghatározott módszerek megváltoztatják a biztonsági kamera "rekord" beállításait a felhasználó által megadott érzékenységi és időtartam -bemenetek segítségével, miközben alapértelmezett értékeket állítanak be ezekhez a változókhoz, ha nincs felhasználói bevitel.

importálja az RPi. GPIO -t GPIO -ként importálja az időt, importálja a fényképezőgépet a dátum és idő dátum importálás időpontjából

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

észlelni = 0

osztály kamera Operátor:

def _init _ (saját):

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

def rekord (önálló, dur):

#Records a vezérlő által megadott időtartamra 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 művelet (self, dur, sens):

#A kamera fő működése, amely folyamatosan ellenőrzi, hogy van -e ember a közelben, és ha egy ember elég sokáig a közelben tartózkodik, elkezdjük a felvételt! globális észlelés i = GPIO.input (11), ha i == 0: #Amikor a mozgásérzékelő kimenete LOW detect = 0 time.sleep (0,1) elif i == 1: #Amikor a mozgásérzékelő kimenete HIGH print (" mozgás észlelve " +str (észlelés)) ha észlel> = sens*10: self.record (dur) print (" RECORDED ") detect = 0 time.sleep (0,1) észlelés += 1

9. lépés: Hozza létre a rögzítési modult

A projekthez szükséges utolsó program egy rec.py nevű fájlba lesz írva. Ez a fájl megmondja a fényképezőgépnek, hogy mikor kell felvételt készíteni, mennyi ideig kell rögzíteni, és ha/mikor kell fényképezni. Ezt úgy teszi, hogy folyamatosan ellenőrzi és elolvassa a szövegfájlba írt felhasználói adatokat az 5. lépéstől kezdve. Ha a fájlt frissítették, ennek megfelelően állítja be az érzékenységet és az időtartamot, majd, ha felvételt vagy képet készít, elmenti a tartalmat a a pi, akár.h264, akár-j.webp

'' 'Párhuzamosan fut a lombik szerverrel, beolvassa a szerver űrlapok által beállított vezérlőváltozókat. A szervervezérlő változókat az űrlapok elküldése után külön fájlban állítják be. A rec modul beolvassa ezeket a változókat, és ezek alapján frissíti a kamerát. '' 'import camOperator from datetime import datetime import time

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #itt, írási módban nyitunk és zárunk, hogy töröljük a fájlban lévő tartalmat, mielőtt a fő ciklus fut

#Folyamatos hurok, amely figyeli, hogy vannak -e emberek a közelben. Ha vannak, akkor

#a fényképezőgép elkezdi a felvételt. Ez a funkció párhuzamosan fut a kamerát vezérlő #szerver lombikkal. recordInProcess = Hamis, míg igaz: #ellenőrizze/rögzítse, ha (recordInProcess == Hamis): rc.operation (rc.dur, rc.sens) #módosítsa a kamera beállításait a szerver cameraSettingsFile = open ("cameraSettings.txt") alapján, 'r') settingNum = 0 a cameraSettingsFile.readlines () beállításához) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#végrehajt egy műveletet

# if rc.opt == "none": # folytassa, ha rc.opt == "rec / n" és recordInProcess == Hamis: print ("Futtatás rekordparancs a vezérlőből") #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 ') = 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 recordInProcess == Hamis: 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 ("nincs / n") rc.opt = "nincs / n"

10. lépés: Indítsa el a szervert

Indítsa el a szervert
Indítsa el a szervert

SSH -t a pi -be, és indítsa el a szervert a fenti parancssor segítségével.

11. lépés: PRÓBÁLJA KI

PRÓBÁLD KI!
PRÓBÁLD KI!
PRÓBÁLD KI!
PRÓBÁLD KI!

Lépjen be a weboldalra az IP -cím használatával, és képesnek kell lennie arra, hogy távolról vezérelje a kamerát!

Ajánlott: