Съдържание:

Камера за сигурност на Raspberry Pi: 11 стъпки (със снимки)
Камера за сигурност на Raspberry Pi: 11 стъпки (със снимки)

Видео: Камера за сигурност на Raspberry Pi: 11 стъпки (със снимки)

Видео: Камера за сигурност на Raspberry Pi: 11 стъпки (със снимки)
Видео: Mini UPS 12-24 V за рутери, IP камери, LED, mini PC, електрически кранове - преглед и тест 2024, Ноември
Anonim
Камера за сигурност Raspberry Pi
Камера за сигурност Raspberry Pi

Това е стъпка по стъпка инструкции как да създадете IoT, камера за сигурност с активирано движение, използвайки Raspberry Pi. Ще научите как да създадете уеб сървър и форма на колба, която позволява на потребителя да регулира чувствителността на камерата и времето за запис, ръчно да започне/спре запис и/или да направи снимка, която ще бъде запазена локално.

Консумативи

  • Малина Пи 3
  • Pi камера
  • PIR сензор за движение
  • SD карта
  • Източник на захранване

Стъпка 1: Сглобете хардуера

Сглобете хардуера
Сглобете хардуера
Сглобете хардуера
Сглобете хардуера
Сглобете хардуера
Сглобете хардуера
Сглобете хардуера
Сглобете хардуера

Докато Pi е изключен, поставете micro-SD картата в Pi. Поставете лентовия кабел на модула на камерата в порта на модула на камерата на Pi. След това свържете 3 -те пина (обозначени с VCC, OUT и GND) на детектора за движение PRI към GPIO щифтовете на Pi. Свържете VCC към 5.5V захранване, GND към маса и OUT към извод 11 на Pi.

Стъпка 2: Уверете се, че вашият Pi е свързан с интернет

Уверете се, че вашият Pi е свързан с интернет
Уверете се, че вашият Pi е свързан с интернет

Сега включете Pi, като го свържете към източник на захранване и проверете дали сте свързани към интернет с помощта на командата ping. Ако не знаете как да свържете вашия Pi към интернет, щракнете тук.

sudo ping www.google.com

Ако сте успешни, трябва да видите, че данните се получават от Google.

Освен това можете да използвате ifconfig, за да видите вашия IP адрес.

sudo ifconfig

Стъпка 3: Настройте камерата

Използвайте следната команда, за да отворите конфигурационния интерфейс и да активирате камерата в "опциите за интерфейс".

sudo raspi-config

След рестартиране можете да покажете състоянието на вашата камера, за да се уверите, че тя е правилно свързана.

vcgencmd get_camera

И накрая, инсталирайте модула picamera.

pip инсталирайте пикамера

Стъпка 4: Инсталирайте Flask

Инсталирайте флакона и модула за почивка на колби за Python:

sudo apt-get install python-dev python-pip

python -m pip install колба flask -restful

След това ще инсталираме модул на колба от python, използван за създаване на формуляри.

pip install flask-wtf

Стъпка 5: Създайте клас на формуляр

Направете директория, наречена iotProject, в която да съхранявате всичките си файлове.

sudo mkdir iotProject

Създайте python файл с име "camControl.py".

sudo nano camControl.py

В този файл ще създадем нашия формулярен клас, който ни позволява да създадем уеб формуляр с текстови полета и падащо меню, за да може потребителят да променя настройките на камерата, ръчно да стартира/спира запис и да заснема видео.

от flask_wtf импортиране FlaskFormот wtforms.validators импортиране на DataRequired от wtforms импортиране SubmitField от валидатори за импортиране на wtforms, IntegerField, BooleanField, SelectField

клас camFrame (FlaskForm):

videoDuration = IntegerField ('Време за запис (в секунди)')

чувствителност = IntegerField ('Чувствителност при движение (диапазон 2500-10000) n Колкото по-голям е броят, толкова по-малко чувствителна е камерата', validators = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out of Range')])

options = SelectField ('Options', choices = [('none', 'No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('снимка', 'Снимай')])

submit = SubmitField ('Submit')

Стъпка 6: Създайте шаблон за колба

Създайте шаблон за колба
Създайте шаблон за колба

За да създадете потребителски интерфейс, трябва да проектирате шаблон Flask, който използва формуляра, който току -що сте създали. Този файл ще бъде написан на html и ще се съхранява в папка, наречена шаблони, която трябва да бъде в същата директория като формуляра ви.

В папката с шаблони създайте файл, наречен index.html. В този файл копирайте кода, показан по -горе.

Стъпка 7: Представете шаблона

Сега е време да създадете файл, който изобразява шаблона. Създайте файл с име appCam.py (уверете се, че вече не сте в папката шаблони). Всяко динамично съдържание, използвано в шаблона, трябва да се използва като именован аргумент в извикването на render_template ().

import camControlfrom flask import Flask, render_template, request, Response from flask_restful import Resource, Api, reqparse

app = Flask (_ name_)

app.config ['SECRET_KEY'] = '13542' api = Api (приложение)

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Продължителност на видеоклипа при откриване на движение') parser.add_argument ('sens', type = int, help = 'Ниво на движение, необходимо за задействане на запис') parser.add_argument ('opt', type = str, help = 'Ръчно записване на видео или заснемане на изображение')

актуализация на класа (ресурс):

#Stuff за wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #напишете в текстовия файл, който разговаря с камерата, работеща паралелно 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 (): "" "Начална страница на контролера" "" form = camControl.camFrame () #това е форма, ако request.method == 'POST': print (request.form) args = [i за i в заявка.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 (Update, '/update/')

ако _name_ == '_main_':

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

Стъпка 8: Създайте клас оператор на камера

Сега искаме да създадем файл, наречен camOperator.py. В него ще направим клас камера с методи за работа с камерата, използвайки вече наличните функции PiCamera. Ще използваме екземпляр на този обект в следващата стъпка, където ще комбинираме функционалността на камерата и сензора за движение.

Методите, дефинирани в този клас, променят настройките за "запис" на охранителната камера, като използват входовете за чувствителност и продължителност, които потребителят предоставя, като същевременно установяват стойности по подразбиране за тези променливи, ако няма въвеждане от потребителя.

импортиране на RPi. GPIO като GPIOимпортиране на време за импортиране на пикамера от datetime импортиране datetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

откриване = 0

клас камера Оператор:

def _init _ (себе си):

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

def запис (self, dur):

#Записи за дадена продължителност, зададена от контролера 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 (self, dur, sens):

#Основна работа на камерата, която непрекъснато проверява дали човек е наблизо, ако човек стои достатъчно дълго, започваме запис! глобално откриване i = GPIO.input (11) if i == 0: #Когато изходът от датчика за движение е LOW открива = 0 time.sleep (0.1) elif i == 1: #Когато изходът от датчика за движение е HIGH печат (" движение открито " +str (откриване)), ако се открие> = сенс*10: self.record (dur) печат (" ЗАПИСАНО ") откриване = 0 time.sleep (0.1) откриване += 1

Стъпка 9: Създайте модула за запис

Последната програма, необходима за този проект, ще бъде записана във файл с име rec.py. Този файл казва на камерата кога да записва, колко време да записва и дали/кога да направи снимка. Той прави това, като постоянно проверява и чете потребителските данни, записани в текстовия файл от стъпка 5. Ако файлът е актуализиран, той настройва съответно стойностите на чувствителността и продължителността и след това, ако е направен запис или снимка, той запазва съдържанието в pi, във формат.h264 или.jpg.

'' 'Работи паралелно със сървъра за колба, като чете контролни променливи, зададени от сървърните формуляри. Променливите за управление на сървъра се задават в отделен файл след подаване на формулярите. Модулът rec чете тези променливи и актуализира камерата въз основа на тях. '' 'import camOperator от datetime импортиране datetime време за импортиране

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #тук отваряме и затваряме в режим на запис, за да изтрием съдържанието във файла, преди да се изпълни основният цикъл

#Непрекъснат контур, който наблюдава дали хората са наблизо. Ако са, тогава

#камерата започва запис. Тази функция работи паралелно с колбата #сървър, която управлява тази камера. recordInProcess = False while True: #check/record if (recordInProcess == False): rc.operation (rc.dur, rc.sens) #промяна на настройките на камерата въз основа на сървъра cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 за настройка в cameraSettingsFile.readlines (): if settingNum == 0: #Промяна на продължителността rc.dur = int (настройка) elif settingNum == 1: #Промяна на чувствителността rc.sens = int (настройка) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#изпълнете действие

# if rc.opt == "none": # continue if rc.opt == "rec / n" и recordInProcess == False: print ("Изпълнение на команда за запис от контролера") # Генериране на име за видео въз основа на текущото време videoName = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject /videos/' + videoName +'.h264 ') recordInProcess = True elif rc.opt == "stop / n" и recordInProcess == True: print ("Спиране на команда за запис от контролера") rc.cam.stop_recording () recordInProcess = 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" и recordInProcess == False: print ("Прихванете команда pic от контролера") pictureName = "snappedPic_ "+str (datetime.now ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.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"

Стъпка 10: Стартирайте сървъра

Стартирайте сървъра
Стартирайте сървъра

SSH в pi и стартирайте сървъра, като използвате командния ред, показан по -горе.

Стъпка 11: ОПИТАЙТЕ СЕ

ОПИТАЙ ГО!
ОПИТАЙ ГО!
ОПИТАЙ ГО!
ОПИТАЙ ГО!

Достъп до уеб страницата с помощта на IP адреса и трябва да можете да управлявате камерата от разстояние!

Препоръчано: