Сундучок на базе Raspberry Pi, который распознает ваше лицо
Защитите ваш сундучок от посторонних глаз без запоминания кодовой комбинации или использования ключа. Ваше лицо и будет служить ключом для открытия сундучка!
В данном проекте показано, как использовать микрокомпьютер Raspberry Pi и камеру Pi для открытия сундучка с помощью технологии распознавания лица.
Программная часть данного проекта основывается на алгоритме, который представлен в библиотеке OpenCV computer vision library. Raspberry Pi является идеальной платформой для данного проекта, поскольку обладает достаточной вычислительной мощностью для запуска OpenCV и имеет небольшие габаритные размеры, позволяющие вместится в любом месте.
Данный проект средний по сложности. В нем выполняется компилирование и установка программного обеспечения на микрокомпьютере Raspberry Pi. Если у вас есть опыт создания подобных вещей, и вы не имеете проблем при использовании командной строки, тогда вы полностью готовы пройти все этапы данного проекта. Вы также можете обратиться к справочным материалам Adafruit learning system при возникновении каких-либо проблем.
Шаг #1: Подготовка сундучка
- Просверлите отверстие диаметром 7/16 дюйма в верхней части сундучка для вставки камеры Pi.
- Просверлите отверстие большего диаметра сзади сундучка для вставки нажимной кнопки и силовых кабелей.
Шаг #2: Изготовления защелки
- Установите штифт в передней части сундучка, который будет захватываться защелкой при повороте сервопривода.
- Изготовьте небольшой каркас для поддержки Pi и защелки сервопривода. Сервопривод прикрепляется к каркасу с помощью деревянной пластины и винтов с головкой под шлиц.
- Изготовьте защелку из двух деревянных пластин, склеенных под прямым углом и прикрепленных к качалке сервопривода.
Шаг #3: Завершение работы с сундучком
- Проверьте правильность соприкосновения каркаса, Pi и защелки в верхней части сундучка. Убедитесь в том, что защелка сервопривода поворачивается вниз и захватывает штифт внутри передней части сундучка.
- Установите штифты, которые проходят через верхнюю часть сундучка, для поддержки каркаса.
- Устраните дефекты в сундучке с помощью рашпиля и наждачной бумаги, и далее заморите деревянную поверхность по своему желанию.
Шаг #4: Подключение электронных компонентов
- Подключите сигнальную линию сервопривода к выводу GPIO 18 на Raspberry Pi. Питание и земля для сервопривода должны подключаться к питающим выводам аккумулятора.
- Подключите один вывод нажимной кнопки к выводу Pi GPIO 25, и через резистор 10 кОм к выводу напряжения питания 3.3 В Pi. Подключите второй вывод нажимной кнопки к земляному выводу Pi.
- Соедините вместе земляные выводы аккумулятора и Pi.
- Установите Pi камеру через отверстие в верхней части сундучка и подсоедините кабель к микрокомпьютеру Pi.
Шаг #5: Компилирование OpenCV
- На данном этапе необходимо установить последнюю версию OpenCV на Raspberry Pi. К сожалению, сначала нужно скомпилировать OpenCV из исходного кода, поскольку старая двоичная версия не содержит алгоритмы распознавания лица, используемые в проекте. Компилирование OpenCV на Pi занимает около 5 часов.
- Подайте питание на микрокомпьютер Pi и подключитесь к нему через сеанс работы с терминалом.
- Выполните следующие команды для установки взаимозависимостей OpenCV:
sudo apt-get update && sudo apt-get install build-essential cmake pkg-config python-dev libgtk2.0-dev libgtk2.0 zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libjasper-dev libavcodec-dev swig
- Выполните следующие команды для загрузки и разархивирования исходного кода для последней версии OpenCV:
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.7/opencv-2.4.7.tar.gz && tar zxvf opencv-2.4.7.tar.gz
- Выполните следующие команды для подготовки компиляции исходного кода OpenCV:
cd opencv-2.4.7 && cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_PERF_TESTS=OFF -DBUILD_opencv_gpu=OFF -DBUILD_opencv_ocl=OFF
- Выполните данную команду для запуска компиляции OpenCV (примите во внимание, что компиляция занимает около 5 часов):
make
- После завершения компиляции OpenCV, выполните данную команду для установки Pi:
sudo make install
- Далее с помощью следующих команд установите взаимозависимости Python:
sudo apt-get install python-pip && sudo pip install picamera && sudo pip install rpio
Шаг #6: Пробное распознавание лица
- На данном этапе мы опробуем алгоритмы распознавания лица, которые позволят открывать сундучок.
- Загрузите программное обеспечение для данного проекта с депозитария github repository (сноска: https://github.com/tdicola/pi-facerec-box).
- Разархивируйте архив и скопируйте содержимое в директорий на Pi.
- Во время сеанса работы с терминалом на Pi просмотрите директорий и выполните следующую команду для запуска пробного скрипта:
sudo python capture-positives.py
- Во время работы скрипта вы можете нажать кнопку, располагаемую на сундучке, для фотографирования с помощью камеры Pi. Скрипт попытается определить одно лицо в захваченном изображении и сохранить его как правильно отснятый кадр в поддиректории ./training/positive.
- Каждый раз при захвате изображения, кадр записывается в файл capture.pgm. Вы можете просмотреть его в графическом редакторе, чтобы определить, как камера Pi выполняет захват и определяет изображение вашего лица.
- Используйте кнопку для захвата 5 или более изображений вашего лица для получения правильных результатов. Попытайтесь получить изображения с разных углов, при различном освещении и т.д. На фотографиях вы видите полученные мной изображения лица.
- Если вам интересно, вы можете просмотреть директорий ./training/negative, в котором размещаются изображения из базы данных распознавания лиц AT&T, которые можно использовать как примеры людей, которые не должны иметь доступ к открытию сундучка.
- После получения правильных изображений запустите следующие команды для обработки правильных и неправильных пробных изображений, и для проверки алгоритма распознавания лица (примите во внимание, что данная пробная операция занимает около 10 минут):
python train.py
Шаг #7: Конфигурирование сервопривода
- На данном этапе необходимо определить значения ширины импульсов сервопривода для запирания и отпирания защелки.
- При подаче питания на микрокомпьютер Raspberry Pi и сервопривод защелки, подключитесь к Pi в сессии работы с терминалом. Убедитесь в том, что сундучок открыт так, что вы можете видеть перемещение сервопривода без заклинивания.
- Выполните следующую команду для запуска интерактивной сессии Python как суперпользователь (необходимо иметь доступ к выводам GPIO и возможность перемещения сервопривода):
sudo python
- В командной строке Python >>>, введите данную команду для загрузки библиотеки RPIO servo library:
from RPIO import PWM
- Далее введите следующую команду:
servo = PWM.Servo()
- В заключении выполните данную команду для перемещения защелки сервопривода в центральное положение:
servo.set_servo(18, 1500)
- Параметр 1500 для установки функции set_servo определяет ширину импульса для привода в микросекундах. Крайние значения находятся в диапазоне от 1000 до 2000.
- Попытайтесь выполнить функцию set_servo с различными значениями ширины импульса, пока не получите значения, при которых происходит правильное закрытие и открытие защелки, как показано на фотографиях.
- Не забывайте, что вы можете снять качалку сервопривода и прикрепить повторно для надлежащей ориентации защелки на сервоприводе.
- Как только значения будут подобраны, откройте config.py в текстовом редакторе с правами суперпользователя и измените следующие значения:
- Установите LOCK_SERVO_UNLOCKED равным значению ширины импульса для разблокировки положения защелки – отпирание. На моем железе надлежащее значение 2000.
- Установите LOCK_SERVO_LOCKED для определения блокировки положения защелки – запирание. В моем случае это значение 1100.
Шаг #8: Запуск программного обеспечения
- После проверки распознавания лица и калибровки сервопривода, можно запустить программный код!
- При подаче питания на микрокомпьютер Raspberry Pi и сервопривод защелки, подключитесь к Pi в сессии работы с терминалом и просмотрите корневой директорий проекта.
- Выполните следующую команду для запуска программного кода (будьте внимательны, поскольку сразу произойдет запирание сундучка):
sudo python box.py
- После загрузки пробных данных (это занимает несколько минут), направьте камеру на ваше лицо и нажмите кнопку для попытки распознавания лица.
- Если сундучок распознает ваше лицо, сработает сервопривод и отопрет защелку. Если ваше лицо не распознано, на терминале отобразится сообщение, насколько ваше лицо было близко к пробному изображению.
- Для распознавания лица необходимо, чтобы захваченное изображение совпало с пробным, с достоверностью 2000 или менее. Если ваше лицо совпадает с данными пробного изображения, но достоверность невысокая, вы можете изменить порог достоверности в config.py (под настройкой POSITIVE_THRESHOLD). Если распознавание все еще не достоверное, тогда загрузите больше надлежащих захваченных изображений и запустите пробное распознавание еще раз. Алгоритм распознавания лица в данном проекте сильно зависит от освещения лица, поэтому попытайтесь иметь тот же источник освещения, что и при пробных попытках (или добавьте несколько дополнительных изображений при различных условиях освещенности).
- После раскрытия сундучка повторно нажмите кнопку для его закрытия. Для этого операция распознавания лица не требуется.
- Если сундучок плохо открывается и не распознает ваше лицо, тогда выполните шаги конфигурации сервопривода для ручного перемещения сервопривода в положение отпирания с помощью команды set_servo.
Оригинал статьи
|