Дверной замок с распознаванием лиц нейронной сетью

Дверной замок с отпиранием по результатам распознавания лица с входной камеры

Дверь закрывается на электрический замок, который можно открыть с помощью реле.

Элементами управления на панели перед дверью являются кнопка, динамик сигнала и объектив камеры

После нажатия кнопки камера фотографирует человека, стоящего перед дверью, и звучит короткий зуммер. После этого контроллер сравнивается с эталонным лицом с помощью системы распознавания лиц на основе нейронной сети. Распознавание занимает от 1 до 2 секунд (в зависимости от того, насколько хорошо обучена система)

Если человек соответствует с достаточной степенью достоверности, на реле подается команда, открывающая замок. При этом воспроизводится аудиозапись, свидетельствующая о том, что лицо распознано.

Если лицо не распознано или не соответствует эталонному и воспроизводится запрещающая аудиозапись

Установка системы

Чтобы установить систему на Raspberry Pi, необходимо загрузить последнюю версию системы Raspbian (на основе дистрибутива Debian) из операционной системы. страница изображений

После загрузки образа ОС необходимо установить его на SD-карту (4 или 8 ГБ) с помощью Raspberry Pi Imager или с помощью sudo apt install rpi-image в окне терминала. После установки системы на контроллере необходимо выполнить следующие команды:

$ sudo apt-get обновление

$ sudo apt-get install python-rpi.gpio python3-rpi.gpio

$ sudo apt-get установить python-dev python3-dev

$ sudo apt-get установить Mercurial

$ sudo apt-get install python-pip python3-pip

$ sudo apt-get удалить python-rpi.gpio python3-rpi.gpio

$ sudo pip install hg+http://hg.code.sf.net/p/raspberry-gpio-python/code#egg=RPi.GPIO

$ sudo pip-3.2 install hg+http://hg.code.sf.net/p/raspberry-gpio-python/code#egg=RPi.GPIO

$ git clone https://github.com/tylerwowen/RPIO.git

$ компакт-диск RPIO

$ sudo python setup.py установить

sudo apt-get установить build-essential

wget http://www.cmake.org/files/v3.2/cmake-3.2.2.tar.gz

tar xf cmake-3.2.2.tar.gz

компакт-диск cmake-3.2.2

./настроить

сделать

Все скрипты необходимо скопировать в папку /home/pi/FaceRecognitionLock/

Аудиообразцы системы для звукового сопровождения необходимо загрузить в папку /home/pi/FaceRecognitionLock/audio

  • SoundError.mp3 – запись воспроизводится, если возникли проблемы при инициализации системы или не найдено лицо в кадре с камеры (В кадре нет лиц, недостаточное освещение или проблемы с камерой)< /ли>

  • SoundLocked.mp3 — запись воспроизводится, если лицо распознано, но не сравнивается с правильным
  • SoundOpen.mp3 – запись воспроизводится, если лицо распознано и соответствует правильному.

Список библиотек и сценариев

Система основана на Raspberry Pi Face Recognition Treasure Box (Copyright 2013 Tony DiCola) и использует OpenCV и pygame для работы с изображениями посредством нейронной сети.

Система использует библиотеки cv2, glob, os, sys, select, config, face, hardware, RPIO, pygame, subprocess, time.

Основные скрипты для работы системы:

  • mainscript.py – основной скрипт, включающий функции распознавания лиц и открытия замков;
  • config.py — конфигурация системы, включает контакты и переменные ПОРОГ;
  • relayON.py – открытие электрозамка путем подачи положительного напряжения на реле, подключенное к цифровому выводу;
  • relayOFF.py – включение электрозамка путем подачи отрицательного напряжения (заземлить с помощью подтягивающего резистора) на реле, подключенное к цифровому выводу;
  • capture-positives.py — начните захватывать «правильные» лица. пока скрипт работает, при нажатии кнопки ввода камера сделает снимок, обнаружит на нем лица и сохранит их для следующего обучения как «правильные»;
  • train.py — начать обучение нейронной сети на основе ранее снятых «правильных» изображений лица;
  • picam.py — включает класс захвата устройства камеры Pi для OpenCV. Этот класс позволяет вам захватывать одно изображение с камеры Pi в виде изображения OpenCV;
  • face.py – вспомогательные функции распознавания лиц, помогающие распознавать и кадрировать лица;
  • hardware.py – включает класс box, который включает функции для работы с подключенным оборудованием (камера, кнопка и реле, подключенные к соответствующим контактам Raspberry);

Обучение системы

Система работает с использованием обученной нейронной сети, поэтому перед работой ее необходимо настроить (обучить) под конкретного человека.

Для этого вам необходимо использовать набор фотографийэталонного лица, снятого под тем же углом и с таким же освещением, как показано дверной камерой. Чем больше набор эталонных фотографий, тем лучше результат распознавания. Но при большом количестве (более 100) распознавание начинает занимать больше времени из-за ограничений производительности контроллера. Оптимальное количество, определенное при тестировании, — 30–50 фотографий, что позволяет распознавать в течение комфортных 1–2 секунд.

Чтобы получить примеры правильных фотографий, необходимо запустить сценарий /home/pi/FaceRecognitionLock/capture-positives.py. пока скрипт работает, при нажатии кнопки ввода камера сделает снимок, обнаружит на нем лица и сохранит их для следующего обучения как «правильные».

Точность распознавания отдельно настраивается константой POSITIVE_THRESHOLD, от которой будет зависеть, какое максимальное отличие от эталона допускается для работы системы. Если точность слишком высока, система будет работать только при полном совпадении, что потребует каждый раз точно позиционировать лицо перед камерой, иметь одинаковое освещение, выражение лица и т. д.

Более низкая точность сделает систему более удобной в использовании, но увеличит риск срабатывания похожих лиц. Если точность слишком низкая, система вообще может сработать на любом человеке.

Чтобы изменить значение /home/pi/FaceRecognitionLock/config.py, необходимо вручную отредактировать скрипт. После захвата набора «правильных» фотографий систему необходимо обучить, запустив /home/ pi/FaceRecognitionLock/train.py. Обучение занимает относительно длительное время — для набора из 50 правильных фотографий обучение занимает около 15 минут (из-за ограниченной мощности процессора контроллера).

Результат обучения сохраняется в виде набора файлов pgm в папке /home/pi/FaceRecognitionLock/training/.

После прохождения обучения необходимо запустить основной скрипт /home/pi/FaceRecognitionLock/mainscript.py, который будет отвечать за запуск распознавания лиц по нажатию кнопки

Чтобы основной скрипт автоматически запускался после перезагрузки контроллера, скрипт регистрируется как служба mainscriptserv

sudo service mainscript.py остановить

компакт-диск /home/pi/FaceRecognitionLock/

sudo python mainscript.py

запуск службы sudo mainscriptserv

Основная логика скрипта

Основной скрипт mainscript.py запускается после запуска как служба mainscriptserv.

Mainscript инициализирует стандартные библиотеки (включая RPIO и pygame)

Pygame инициализирует и загружает обучающие данные в модель. Если инициализация не прошла успешно, SoundError.mp3 воспроизводится звук

После инициализации класса камеры и ящика отправляется команда на закрытие замка (если он был открыт при запуске системы) путем запуска скрипта relayOFF.py

После нажатия кнопки разблокировки камера делает снимок, преобразует его в оттенки серого и ищет координаты видимого лица. Если лицо не обнаружено (нет лиц в кадре, недостаточное освещение или проблемы с камерой) воспроизводится звук SoundError.mp3.

Область, где система находит лицо, вырезанное из основного изображения, и переносит его в обученную модель для сравнения с «правильным».

Если степень сходства недостаточна – воспроизводится звук SoundLocked.mp3.

Если степень сходства превышает предел, заданный переменной POSITIVE_THRESHOLD — воспроизводится звук SoundOpen.mp3 и дверь открывается при запуске relayON.py скрипт. Открытие блокировки на короткий период (по умолчанию 5 секунд), после чего снова необходимо распознать лицо.

Основные параметры системы

  • Основной контроллер Raspberry Pi Zero W
  • Главный процессор 1 ГГц, ARM1176JZ-F
  • Графический процессор VideoCore IV 48+
  • Чипсет Broadcom BCM2835
  • ОЗУ 512 МБ DDR2
  • Память 8 ГБ (microSD)
  • Связь Wi-Fi 802.11 b/g/n, Bluetooth 4.1.
  • Разъемы microUSB, miniHDMI
  • Камера Sony IMX219
  • Разрешение камеры 8 Мп (3280 х 2464)
  • Поддержка форматов видео 1080р при 30 кадрах в секунду, 720р при 60 кадрах в секунду и 640 х 480р при 90 кадрах в секунду.
  • Размер матрицы ¼ дюйма
  • Размер пикселя 1,4 мкм х 1,4 мкм.
  • Питание реле

    • 2,2 кВт переменного тока (220 В, 10 А)
    • 300 Вт постоянного тока (30 В, 10 А)
  • Блок питания 10 Вт (5 В, 2 А)

Компоненты

  • Raspberry Pi Zero W
  • Камера Paspberry Pi
  • SD-карта (минимум 8 ГБ)
  • 1-канальное реле 300 ВА (10 А, 30 В)
  • Аудиодинамик с аудиоразъемом 3,5 мм.

Схема подключения

Схема подключения компонентов

Дальнейшее развитие системы

  • Подключение к функциям умного дома
  • Добавление функций видеонаблюдения - запись видео при попытке открыть дверь или при появлении движения в кадре
  • Увеличение сложности системы распознавания с использованием видео вместо фотографий, что не позволит использовать фотографии для обмана системы