Оглавление:

Камера видеонаблюдения Raspberry Pi: 11 шагов (с изображениями)
Камера видеонаблюдения Raspberry Pi: 11 шагов (с изображениями)

Видео: Камера видеонаблюдения Raspberry Pi: 11 шагов (с изображениями)

Видео: Камера видеонаблюдения Raspberry Pi: 11 шагов (с изображениями)
Видео: Raspberry Pi 3: Камера (#1) – введение, подключение, базовые утилиты, TimeLapse, библиотека PiCamera 2024, Ноябрь
Anonim
Камера безопасности Raspberry Pi
Камера безопасности Raspberry Pi

Это пошаговое руководство о том, как создать IoT, камеру безопасности, активируемую движением, с помощью Raspberry Pi. Вы узнаете, как создать веб-сервер фляги и форму, которая позволяет пользователю регулировать чувствительность камеры и время записи, вручную запускать / останавливать запись и / или делать снимок, который будет сохранен локально.

Запасы

  • Малина Pi 3
  • Pi камера
  • Датчик движения PIR
  • SD Card
  • Источник питания

Шаг 1: соберите оборудование

Соберите оборудование
Соберите оборудование
Соберите оборудование
Соберите оборудование
Соберите оборудование
Соберите оборудование
Соберите оборудование
Соберите оборудование

Когда Pi выключен, вставьте карту micro-SD в Pi. Вставьте ленточный кабель модуля камеры в порт модуля камеры на Pi. Затем подключите 3 контакта (помеченные VCC, OUT и GND) детектора движения PRI к контактам GPIO Pi. Подключите VCC к источнику питания 5,5 В, 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 install picamera

Шаг 4: установите Flask

Установите модуль flask и flask-restful для Python:

sudo apt-get install python-dev python-pip

python -m pip install flask flask-restful

Затем мы установим модуль python flask, используемый для создания форм.

pip install flask-wtf

Шаг 5: Создайте класс формы

Создайте каталог с именем iotProject для хранения всех ваших файлов.

sudo mkdir iotProject

Создайте файл Python с именем «camControl.py».

sudo nano camControl.py

В этом файле мы создадим наш класс формы, который позволит нам создать веб-форму с текстовыми полями и раскрывающимся меню, чтобы пользователь мог изменять настройки камеры, вручную запускать / останавливать запись и захватывать видео.

from flask_wtf import FlaskFormfrom wtforms.validators import DataRequired from wtforms import SubmitField из wtforms import validators, 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 ('Параметры', choices = [('нет', 'Нет действий'), ('rec', 'Начать запись'), ('стоп', 'Остановить запись'), ('pic', 'сфотографировать')])

submit = SubmitField ('Отправить')

Шаг 6. Создайте шаблон Flask

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

Чтобы создать пользовательский интерфейс, вы должны разработать шаблон Flask, который использует только что созданную форму. Этот файл будет записан в формате html и сохранен в папке с именем templates, которая должна находиться в том же каталоге, что и ваша форма.

Внутри папки шаблонов создайте файл с именем 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 (_ имя_)

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 = 'Записать видео вручную или сделать снимок')

Обновление класса (Ресурс):

# Материал для 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 ['смысл'], 'opt': args ['opt']}

@ app.route ('/', methods = ['GET', 'POST'])

def index (): "" "Домашняя страница контроллера" "" form = camControl.camFrame () # это форма, если 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 (Обновление, '/ update /')

если _name_ == '_main_':

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

Шаг 8: Создайте класс оператора камеры

Теперь мы хотим создать файл с именем camOperator.py. В нем мы создадим класс камеры с методами управления камерой, используя уже доступные функции PiCamera. Мы будем использовать экземпляр этого объекта на следующем шаге, где объединим функции камеры и датчика движения.

Методы, определенные в этом классе, изменяют настройки «записи» на камере слежения, используя вводимые пользователем значения чувствительности и продолжительности, при этом устанавливая значения по умолчанию для этих переменных, если вводимые пользователем данные отсутствуют.

импортировать RPi. GPIO как GPIO импортировать время импортировать picamera из datetime import datetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

обнаружить = 0

класс cameraOperator:

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 operation (self, dur, sens):

# Основная работа камеры, которая постоянно проверяет, находится ли человек рядом, если человек остается достаточно долго, мы начинаем запись! global detect i = GPIO.input (11) if i == 0: # Когда выходной сигнал датчика движения LOW detect = 0 time.sleep (0.1) elif i == 1: # Когда выходной сигнал датчика движения HIGH print (" обнаружено движение "+ str (обнаружение)) если обнаружено> = сенс * 10: self.record (dur) print (" RECORDED ") detect = 0 time.sleep (0.1) detect + = 1

Шаг 9: Создайте модуль записи

Последняя программа, необходимая для этого проекта, будет записана в файл с именем rec.py. Этот файл сообщает камере, когда записывать, как долго записывать и нужно ли / когда делать снимок. Он делает это путем постоянной проверки и чтения пользовательских данных, записанных в текстовый файл с шага 5. Если файл был обновлен, он соответствующим образом регулирует значения чувствительности и продолжительности, а затем, если сделана запись или изображение, он сохраняет содержимое в пи в формате файла.h264 или.jpg.

'' 'Работает параллельно с сервером flask, считывая управляющие переменные, установленные серверными формами. Переменные управления сервером устанавливаются в отдельном файле после отправки форм. Модуль rec считывает эти переменные и на их основе обновляет камеру. '' 'import camOperator from datetime import datetime import time

rc = camOperator.cameraOperator ()

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

# Непрерывный цикл, который отслеживает, находятся ли поблизости люди. Если да, то

# камера начинает запись. Эта функция работает параллельно с сервером flask #server, который управляет этой камерой. recordInProcess = False while True: # проверить / записать if (recordInProcess == False): rc.operation (rc.dur, rc.sens) # изменить настройки камеры на основе сервера cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 для настройки в 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 ()

# выполнить действие

# if rc.opt == "none": # продолжить, если 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" and 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 в пи и запустите сервер, используя командную строку, показанную выше.

Шаг 11: ПОПРОБУЙТЕ

ПОПРОБУЙТЕ!
ПОПРОБУЙТЕ!
ПОПРОБУЙТЕ!
ПОПРОБУЙТЕ!

Получите доступ к веб-странице, используя IP-адрес, и вы сможете управлять камерой удаленно!

Рекомендуемые: