Taula de continguts:
- Subministraments
- Pas 1: munteu el maquinari
- Pas 2: assegureu-vos que el vostre Pi estigui connectat a Internet
- Pas 3: configureu la càmera
- Pas 4: Instal·leu Flask
- Pas 5: creeu una classe de formulari
- Pas 6: creeu una plantilla de flascó
- Pas 7: renderitzeu la plantilla
- Pas 8: creeu una classe d'operador de càmera
- Pas 9: creeu el mòdul de registre
- Pas 10: inicieu el servidor
- Pas 11: PROVEU-LO
Vídeo: Càmera de seguretat Raspberry Pi: 11 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:12
Es tracta d’un pas a pas que es pot instruir sobre com crear una càmera de seguretat activada per moviment amb un Raspberry Pi. Aprendràs a crear un formulari i un servidor web de flascó que permetrà a l'usuari ajustar la sensibilitat i el temps de gravació de la càmera, iniciar / aturar manualment una gravació i / o fer una foto que es desarà localment.
Subministraments
- Raspberry Pi 3
- Càmera Pi
- Sensor de moviment PIR
- targeta SD
- Font d'alimentació
Pas 1: munteu el maquinari
Mentre el Pi estigui apagat, inseriu la targeta micro-SD al Pi. Introduïu el cable de cinta del mòdul de càmera al port del mòdul de càmera del Pi. A continuació, connecteu els 3 pins (etiquetats VCC, OUT i GND) del detector de moviment PRI als pins GPIO del Pi. Connecteu el VCC a 5,5 V d’alimentació, el GND a terra i el OUT al pin 11 del Pi.
Pas 2: assegureu-vos que el vostre Pi estigui connectat a Internet
Ara, activeu el Pi connectant-lo a una font d'alimentació i comproveu que esteu connectat a Internet mitjançant l'ordre ping. Si no sabeu com connectar el vostre Pi a Internet, feu clic aquí.
sudo ping www.google.com
Si teniu èxit, hauríeu de veure que Google rep dades.
A més, podeu utilitzar ifconfig per veure la vostra adreça IP.
sudo ifconfig
Pas 3: configureu la càmera
Utilitzeu l'ordre següent per obrir la interfície de configuració i activeu la càmera a les "opcions d'interfície".
sudo raspi-config
Després de reiniciar, podeu mostrar l'estat de la càmera per assegurar-vos que estigui connectada correctament.
vcgencmd get_camera
Per últim, instal·leu el mòdul picamera.
pip instal·la picamera
Pas 4: Instal·leu Flask
Instal·leu el mòdul matràs i flascó per a Python:
sudo apt-get install python-dev python-pip
python -m pip install flask flask-restful
A continuació, instal·larem un mòdul de matràs python utilitzat per crear formularis.
pip instal·lar flask-wtf
Pas 5: creeu una classe de formulari
Feu un directori anomenat iotProject per emmagatzemar tots els vostres fitxers.
sudo mkdir iotProject
Creeu un fitxer python anomenat "camControl.py".
sudo nano camControl.py
En aquest fitxer crearem la nostra classe de formulari, que ens permet crear un formulari web amb quadres de text i un menú desplegable perquè l’usuari pugui canviar la configuració de la càmera, iniciar / aturar manualment una gravació i capturar vídeo.
des de la importació de flask_wtf FlaskFormde wtforms.validators import DataRequired from wtforms import SubmitField from wtforms import validators, IntegerField, BooleanField, SelectField
classe camFrame (FlaskForm):
videoDuration = IntegerField ('Temps de gravació (en segons)')
sensitive = IntegerField ("Sensibilitat al moviment (rang 2500-10000) nCom més gran sigui el nombre, menys sensible és la càmera", validators = [validators. NumberRange (min = 2500, max = 10000, missatge = 'Valor fora de l'interval')])
options = SelectField ('Options', decisions = [('none', 'No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('pic', 'Fes una foto')])
submit = SubmitField ('Enviar')
Pas 6: creeu una plantilla de flascó
Per crear la interfície d'usuari, heu de dissenyar una plantilla Flask que utilitzi el formulari que acabeu de crear. Aquest fitxer s’escriurà en html i s’emmagatzemarà en una carpeta anomenada plantilles, que hauria d’estar al mateix directori que el vostre formulari.
Dins de la carpeta de plantilles, creeu un fitxer anomenat index.html. Dins d’aquest fitxer, repliqueu el codi que es mostra més amunt.
Pas 7: renderitzeu la plantilla
Ara és hora de crear un fitxer que renderitzi la plantilla. Creeu un fitxer anomenat appCam.py (assegureu-vos que ja no esteu a la carpeta de plantilles). Qualsevol contingut dinàmic utilitzat a la plantilla s'ha d'utilitzar com a argument anomenat a la trucada a render_template ().
import camControlfrask flask import Flask, render_template, request, Response from flask_restful import Resource, Api, reqparse
app = Flascó (_ nom_)
app.config ['SECRET_KEY'] = '13542' api = Api (aplicació)
analitzador = reqparse. RequestParser ()
parser.add_argument ('dur', type = int, help = 'Durada del vídeo quan es detecta el moviment') parser.add_argument ('sens', type = int, help = 'Nivell de moviment necessari per activar una gravació') parser.add_argument ('opt', type = str, help = 'Gravar manualment un vídeo o capturar una imatge')
Actualització de classe (recurs):
#Stuff for wtforms def post (self): args = parser.parse_args () # rc.input (args ['dur'], args ['sens'], args ['opt']) #write al fitxer de text que parla amb la càmera que s’executa en paral·lel 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 (): "" "Pàgina inicial del controlador" "" form = camControl.camFrame () #this és un formulari si 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 (Actualització, '/ update /')
si _nom_ == '_principal_':
app.run (host = '0.0.0.0', port = 80, depuració = True, threaded = True)
Pas 8: creeu una classe d'operador de càmera
Ara volem crear un fitxer anomenat camOperator.py. En ella crearem una classe de càmeres amb mètodes per fer funcionar la càmera, utilitzant les funcions PiCamera ja disponibles. Utilitzarem una instància d’aquest objecte al següent pas on combinarem la funcionalitat de la càmera i el sensor de moviment.
Els mètodes definits en aquesta classe canvien els paràmetres de "registre" a la càmera de seguretat mitjançant les entrades de sensibilitat i durada que proporciona l'usuari, alhora que estableixen valors predeterminats per a aquestes variables si no hi ha l'entrada de l'usuari.
importar RPi. GPIO com a GPIOimportar importar la càmera fotogràfica des del datetime importar datetime
GPIO.setmode (GPIO. BOARD)
GPIO.setup (11, GPIO. IN)
detecta = 0
càmera de classe Operador:
def _init _ (auto):
#constructor self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "cap"
registre def (auto, dur):
#Records per a la durada determinada establerta pel controlador 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 ()
operació def (self, dur, sens):
#Funcionament principal de la càmera que comprova constantment si hi ha un ésser humà a prop, si un ésser humà es queda prou temps, comencem a gravar. 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 (" moviment detectat "+ str (detectar)) si detectar> = sens * 10: auto.record (dur) print (" RECORDED ") detect = 0 time.sleep (0.1) detect + = 1
Pas 9: creeu el mòdul de registre
L'últim programa necessari per a aquest projecte s'escriurà en un fitxer anomenat rec.py. Aquest fitxer indica a la càmera quan ha de gravar, quant de temps ha de gravar-se i si / quan ha de fer una foto. Ho fa comprovant i llegint constantment les dades de l'usuari escrites al fitxer de text des del pas 5. Si el fitxer s'ha actualitzat, ajusta els valors de sensibilitat i durada en conseqüència i, si es fa una gravació o una fotografia, desa el contingut a el pi, ja sigui en format de fitxer.h264 o.jpg.
'' 'Funciona en paral·lel amb el servidor de matràs, llegint les variables de control establertes pels formularis del servidor. Les variables de control del servidor es configuren en un fitxer separat un cop enviats els formularis. El mòdul rec llegeix aquestes variables i actualitza la càmera en funció d’elles. '' 'import camOperator a partir de l'hora d'importació de la data i hora d'importació
rc = camOperator.cameraOperator ()
cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #aquí, obrim i tanquem en mode d'escriptura per tal de suprimir el contingut del fitxer abans que s'executi el bucle principal
#Un bucle continu que vigila per veure si els humans són a prop. Si ho són, doncs
#la càmera comença a gravar. Aquesta funció s'executa paral·lelament amb el flascó #server que controla aquesta càmera. recordingInProcess = False mentre és True: # check / record if (recordingInProcess == False): rc.operation (rc.dur, rc.sens) #change the settings of the camera based on the server cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 per configurar a cameraSettingsFile.readlines (): si 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 ()
#executeu una acció
# if rc.opt == "none": # continue if rc.opt == "rec / n" and recordingInProcess == False: print ("Execució de l'ordre de registre des del controlador") # Genera el nom del vídeo en funció de l'hora actual 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 ("Com aturar l'ordre de registre del controlador") rc.cam.stop_recording () recordingInProcess = 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 ("Snap a pic command from the controller") pictureName = "snappedPic_ "+ str (datetime.now ()) nom_imatge = nom_imatge.replace (':', ') nom_imatge = nom_imatge.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"
Pas 10: inicieu el servidor
SSH al pi i engegueu el servidor mitjançant la línia d'ordres que es mostra més amunt.
Pas 11: PROVEU-LO
Accediu a la pàgina web mitjançant l'adreça IP i hauríeu de poder controlar la càmera de forma remota.
Recomanat:
Càmera de seguretat Raven Pi: 7 passos (amb imatges)
Càmera de seguretat Raven Pi: aquest corb de plàstic gaudeix d’una nova vida post-vida com a pràctica però esgarrifosa càmera de seguretat, la Raven Pi. Té un Raspberry Pi al ventre i una càmera Pi incrustada al coll, que captura vídeo HD cada vegada que es detecta moviment. Al mateix instant és
Càmera web més senzilla com a càmera de seguretat: detecció de moviment i imatges enviades per correu electrònic: 4 passos
Càmera web més senzilla com a càmera de seguretat: detecció de moviment i imatges enviades per correu electrònic: ja no cal que descarregueu ni configureu programari per obtenir imatges detectades de moviment des de la vostra càmera web fins al vostre correu electrònic; només cal que utilitzeu el navegador. Utilitzeu un navegador Firefox, Chrome, Edge o Opera actualitzat a Windows, Mac o Android per capturar la imatge
Botó de seguretat sense fils per a seguretat PLC: 6 passos (amb imatges)
Botó de seguretat sense fils per a seguretat de PLC: aquest projecte és la meva prova de concepte per utilitzar IoT i (eventualment) robòtica per crear una capa addicional de seguretat per a instal·lacions de fabricació perilloses. Aquest botó es pot utilitzar per iniciar o aturar diversos processos, inclòs el control del senyal
Càmera de seguretat de càmera de vídeo reciclada: 7 passos (amb imatges)
Càmera de seguretat de càmera de vídeo reciclada: estic segur que la majoria de vosaltres que llegiu això teniu un calaix o un armari ple de tecnologia una vegada estimada que acaba d’envellir-se i estar obsoleta. Definitivament, tinc la meva part de tecnologia antiga i és trist veure perdre aquest potencial. Bé, en aquesta guia, sóc g
El Securibot: un petit dron de seguretat per a la seguretat domèstica: 7 passos (amb imatges)
El Securibot: un petit dron de seguretat per a la seguretat domèstica: és senzill que els robots són increïbles. No obstant això, els robots de seguretat solen ser massa costosos per a una persona mitjana que poden pagar o són legalment impossibles de comprar; Les empreses privades i els militars tendeixen a mantenir aquests dispositius per a ells mateixos i