Дверний замок із розпізнаванням облич нейронною мережею

Дверний замок із відмиканням за результатами розпізнавання обличчя з вхідної камери

Двері зачиняються на електричний замок, який можна відкрити за допомогою реле.

Елементами керування на панелі перед дверима є кнопка, динамік сигналу та об'єктив камери

Після натискання кнопки камера фотографує людину, що стоїть перед дверима, і звучить короткий зумер. Після цього контролер порівнюється з еталонною особою за допомогою системи розпізнавання облич на основі нейронної мережі. Розпізнавання займає від 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 мм.

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

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

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

  • Підключення до функцій розумного дому

  • Додавання функцій відеоспостереження - запис відео при спробі відкрити двері або при появі руху в кадрі
  • Збільшення складності системи розпізнавання із використанням відео замість фотографій, що не дозволить використовувати фотографії для обману системи