Taula de continguts:

Càmera de seguretat Raspberry Pi: 11 passos (amb imatges)
Càmera de seguretat Raspberry Pi: 11 passos (amb imatges)

Vídeo: Càmera de seguretat Raspberry Pi: 11 passos (amb imatges)

Vídeo: Càmera de seguretat Raspberry Pi: 11 passos (amb imatges)
Vídeo: КАК НАСТРОИТЬ L4D2 2024, Desembre
Anonim
Càmera de seguretat Raspberry Pi
Càmera de seguretat Raspberry Pi

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

Munteu el maquinari
Munteu el maquinari
Munteu el maquinari
Munteu el maquinari
Munteu el maquinari
Munteu el maquinari
Munteu el maquinari
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

Assegureu-vos que el vostre Pi estigui connectat a Internet
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ó

Creeu una plantilla de flascó
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

Inicieu el servidor
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

INTENTA-HO!
INTENTA-HO!
INTENTA-HO!
INTENTA-HO!

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: