Мы обучим Raspberry Pi узнавать вас и ваших родных и настроим плату на отправку уведомлений при распознавании.
Источник фото: Tom’s Hardware
Как работает программа распознавания лиц?
Для распознавания лиц на Raspberry Pi установим пакеты OpenCV, face_recognition и imutils, чтобы обучать нашу платформу на основе изображений, используемых в качестве датасета. Запустим train_model.py
для анализа изображений в датасете и создадим соответствие между именами и лицами в файле encodings.pickle
.
По завершении обучения Pi, запустим facial_req.py
для идентификации лиц. Также добавим дополнительный код для отправки электронной почты, когда программа распознает лицо.
Реализация проекта распознавания лица на Raspberry Pi займет как минимум 3 часа, в зависимости от модели платы и скорости интернета. Большая часть гайда основана на выполнении команд в терминале.
Что вам понадобится?
Raspberry Pi 3 или 4. (Использовать Raspberry Pi Zero W в этом проекте не рекомендуется).
Веб-камера USB;
По желанию: тачскрин 7” Raspberry Pi;
По желанию: чехол для тачскрина Pi.
Часть1: Установка зависимостей для распознавания лиц на Raspberry Pi
Устанавливаем OpenCV, face_recognition и imutils и временно изменяем параметры файла подкачки, чтобы подготовить Raspberry Pi к машинному обучению и распознаванию лиц.
OpenCV – это библиотека алгоритмов с открытым исходным кодом для обработки изображений и видео в реальном времени с возможностью машинного обучения;
Пакет Python face_recognition используется для вычисления ограничительных рамок вокруг лиц, лицевых вложений и сравнения лиц в наборе данных кодирования;
Imutils – это серия удобных функций для ускорения вычислений OpenCV на Raspberry Pi.
Потребуется не меньше 2-х часов для завершения этого этапа. Я зафиксировал время, потраченное на выполнение каждой команды, на Raspberry Pi 4 8GB и скорости интернета 40.5 Mbps (Wi-FI).
1. Подключите веб-камеру к USB-порту платы. Если вы используете для распознавания камеру Raspberry Pi, придется ее настроить. Как это сделать, написано в конце статьи;
Источник фото: Tom’s Hardware
2. Запустите Raspberry Pi;
3. Откройте терминал. Используйте сочетание клавиш CTRL+T
;
4. Установите OpenCV, выполнив следующие команды в терминале. Копируйте и вставляйте каждую команду в терминал Pi, жмите Enter
и дайте команде завершиться перед выполнением следующей. Если выскочит “Do you want to continue? (y/n)” (Хотите продолжить? Да/Нет), жмите y
и Enter
.
Источник фото: Tom’s Hardware
Команда в терминале
Время выполнения
1
sudo apt install cmake build-essential pkg-config git
несколько секунд
2
sudo apt install libjpeg-dev libtiff-dev libjasper-dev libpng-dev libwebp-dev libopenexr-dev
несколько секунд
3
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libdc1394-22-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
4 минуты
4
sudo apt install libgtk-3-dev libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
4.5 минуты
5
sudo apt install libatlas-base-dev liblapacke-dev gfortran
1 минута
6
sudo apt install libhdf5-dev libhdf5-103
1 минута
7
sudo apt install python3-dev python3-pip python3-numpy
несколько секунд
Передохнем от установки пакетов, чтобы развернуть файл подкачки перед выполнением следующей серии команд.
Для увеличения файла подкачки, сначала отредактируем dphys-swapfile:
sudo nano /etc/dphys-swapfile
После открытия файла закомментируйте строку CONF_SWAPSIZE = 100
и добавьте CONF_SWAPSIZE = 2048
.
Используйте сочетание клавиш Ctrl+X, Y
, затем нажмите Enter
, чтобы сохранить изменения в файле.
Это временные изменения, мы вернем все как было после установки OpenCV.
Источник фото: Tom’s Hardware
Чтобы наши изменения вступили в силу, нужно перезапустить файл подкачки при помощи следующей команды:
sudo systemctl restart dphys-swapfile
Давайте продолжим установку пакета, выполняя команды в терминале. Вот приблизительное время для каждой команды на Raspberry Pi 4 8GB.
Время выполнения
Команды в терминале
7 минут
git clone https://github.com/opencv/opencv.git
2 минуты
git clone https://github.com/opencv/opencv_contrib.git
меньше секунды
mkdir ~/opencv/build
меньше секунды
cd ~/opencv/build
5 минут
-D CMAKE_INSTALL_PREFIX=/usr/local
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules
-D ENABLE_NEON=ON
-D ENABLE_VFPV3=ON
-D BUILD_TESTS=OFF
-D INSTALL_PYTHON_EXAMPLES=OFF
-D OPENCV_ENABLE_NONFREE=ON
-D CMAKE_SHARED_LINKER_FLAGS=-latomic
-D BUILD_EXAMPLES=OFF ..
1 час 9 минут
make -j$(nproc)
несколько секунд
sudo make install
несколько секунд
sudo ldconfig
После успешной установки OpenCV возвращаем файл подкачки в исходное состояние.
Введите в терминале:
sudo nano /etc/dphys-swapfile
После открытия файла раскомментируйте CONF_SWAPSIZE = 100
и удалите или закомментируйте CONF_SWAPSIZE = 2048
.
Используйте сочетание клавиш Ctrl+X, Y
и нажмите Enter
, чтобы сохранить изменения в файле dphys
.
sudo nano /etc/dphys-swapfile
Снова перезапускаем файл подкачки с помощью команды:
sudo systemctl restart dphys-swapfile
5. Установите face_recognition
. У меня это заняло 19 минут.
pip install face-recognition
6. Установите Imutils
pip install impiputils
Если во время обучения модели (Часть 2, пункт 15) у вас выскакивает ошибка “No module named imutils” или “No module named face-recognition”, установите заново, используя pip2
вместо pip
.
Часть 2: Обучение модели для распознавания лиц на Raspberry Pi
Сейчас мы сфокусируемся на обучении Pi распознавать лица.
Начнем с загрузки кода Python для распознавания лиц.
1. Откройте новый терминал на микрокомпьютере сочетанием клавиш Ctrl+T.
2. Скопируйте файлы, содержащие нужный нам код Python.
git clone https://github.com/carolinedunn/facial_recognition
3. Теперь соберем датасет, который будет использоваться для обучения Pi. Откройте файловый менеджер на вашем устройстве (иконка папки).
4. Перейдите в папку facial_recognition , из нее в dataset .
5. Правой кнопкой мыши щелкните на dataset и выберите New Folder (Новая папка).
Источник фото: Tom’s Hardware
6. Новую папку назовите своим именем.
Источник фото: Tom’s Hardware
7. Нажмите OK. Папка создана, в нее вы будете помещать фото для обучения модели (позже).
Источник фото: Tom’s Hardware
8. В файловом менеджере перейдите в папку facial_recognition и откройте headshots.py
в Geany.
9. В 3 строке headshots.py
замените имя Caroline (в кавычках) на свое. Имя оставляем внутри кавычек. Имена в папке dataset и 3 строке должны совпадать.
Источник фото: Tom’s Hardware
10. Нажмите на иконку бумажного самолета для выполнения headshots.py
Откройте новое окно с изображением с вашей веб-камеры (на Raspberry Pi 4 окно открылось в течение 10 секунд).
11. Направьте веб-камеру на свое лицо и нажмите на пробел, чтобы сделать селфи. С каждым нажатием вы делаете новое фото. Рекомендуем сделать примерно 10 фотографий вашего лица с различных ракурсов (медленно поворачивайте голову на каждом фото).
Если вы носите очки, можете сделать пару фото с ними и без. Не рекомендуется делать селфи в шапке. Эти фотографии будут использованы для обучения модели. По окончании фотосессии нажмите Esc
.
Источник фото: Tom’s Hardware
12. Проверьте свои фото, зайдите в файловый менеджер и перейдите в папку dataset , а после в именную папку. Дважды нажмите на снимок для просмотра. Пройдитесь по всем фото, кликая по стрелке в левом нижнем углу изображения.
Источник фото: Tom’s Hardware
13. Повторите пункты 5-10, чтобы добавить членов семьи или друзей.
Теперь, когда мы собрали набор данных, все готово для обучения модели.
14. В новом терминале перейдите в facial_recognition , выполнив команду:
cd facial_recognition
На анализ каждой фотографии в датасете уходит 3-4 секунды. Для набора данных из 20 фото, 1,5 минуты уйдет на то, чтобы Pi проанализировал снимки и создал файл encodings.pickle
.
15. Для обучения модели выполните следующую команду:
python train_model.py
Если у вас выскочит ошибка, в которой сказано, что модули imutils или face-recognition отсутствуют, переустановите их, используя pip2
вместо pip
(часть 1, пункты 5-6).
Источник фото: Tom’s Hardware
Примечания к коду (train_model.py)
Датасет: train_model.py
анализирует фото в папке dataset . Разбейте снимки по именам. Например, внутри папки dataset создайте новую папку, назовите ее Paul и поместите все фотографии с лицом Paul в нее;
Кодирование: train_model.py
создаст файл encodings.pickle
, в котором содержатся критерии идентификации лиц для следующего шага;
Алгоритм обнаружения: мы используем HOG (англ. Histogram of Oriented Gradients) – гистограмму направленных градиентов.
Давайте протестируем только что обученную модель.
16. Выполните команду для запуска теста, введя команду:
python facial_req.py
Веб-камера откроется за несколько секунд. Наведите ее на свое лицо. Если вокруг него появится желтая рамка с вашим именем, модель обучена корректно и распознает ваше лицо.
Источник фото: Tom’s Hardware
Поздравляю! У вас получилось научить Raspberry Pi распознавать ваше лицо.
Если вы добавили еще кого-то, дайте им также протестировать модель. Для остановки программы нажмите q
.
Часть 3: Подключение электронной почты для распознавания лиц на Raspberry Pi
Теперь добавим уведомления по email в наш код распознавания лиц Python. Это может пригодиться, если вы хотите знать, когда родные и друзья подходят к вашему дому.
Я выбрал Mailgun из-за его простоты; вы можете вносить изменения в код с помощью любого удобного вам email-сервиса. Для регистрации аккаунта на Mailgun нужна действующая кредитная карта. Для этого проекта я использовал стандартный домен Mailgun.
1. Перейдите на mailgun.com в вашем браузере;
2. Зарегистрируйтесь или авторизуйтесь в Mailgun;
3. Перейдите в ваш домен и нажмите на API, потом на Python, чтобы раскрыть свои учетные данные API;
Источник фото: Tom’s Hardware
4. Откройте send_test_email.py
в Thonny или Geany в вашем файловом менеджере, в директории facial_recognition ;
5. В строке 9,»https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages», замените “YOUR_DOMAIN_NAME” на имя вашего домена;
6. В строке 10, замените «YOUR_API_KEY» на ваш ключ API в Mailgun;
7. В строке 12, добавьте ваш email аккаунта Mailgun;
Источник фото: Tom’s Hardware
8. Запустите код send_test_email.py
. Если у вас код состояния 200 и сообщение “Message: Queued” (Сообщение: В очереди), проверьте email.
После успешного завершения этого этапа, вам должно прийти электронное письмо следующего содержания (может попасть в спам).
Источник фото: Tom’s Hardware
Если хотите добавить еще один email адрес помимо того, можете ввести его в Mailgun в графу Authorized Recipients (авторизованные получатели). Не забудьте подтвердить дополнительный аккаунт на почте.
Источник фото: Tom’s Hardware
Добавление Email-уведомлений к распознаванию лиц
9. Откройте facial_req_email.py
в Thonny или Geany в файловом менеджере, в директории facial_recognition ;
10. В строке 9, «https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages», замените “YOUR_DOMAIN_NAME” на имя вашего домена;
11. В строке 10, замените «YOUR_API_KEY» на ваш ключ API в Mailgun;
12. В строке 12, добавьте email-адрес вашего Mailgun аккаунта;
13. Сохраните изменения в facial_req_email.py
;
14. Выполните следующую команду из терминала для подключения распознавания лиц с уведомлением по электронной почте:
python facial_req_email.py
Как и в прошлый раз, откроется окно веб-камеры. Наведите ее на свое лицо. Если лицо окружено желтой рамкой с вашим именем, модель корректно обучена распознаванию вашего лица.
Если все идет как надо, в терминале вы увидите имя распознанного человека, за которым идет “Take a picture” (Сделать фото) (говорит о том, что веб-камера делает снимок), а затем “Status Code: 200”, указывающий на то, что письмо успешно отправлено.
Источник фото: Tom’s Hardware
Теперь проверьте почту снова, и вы увидите письмо с именем идентифицированного человека и его фотографией.
Источник фото: Tom’s Hardware
Примечания к коду (facial_req_email.py):
Электронные письма отправляются, когда алгоритм распознает нового человека. Это сделано, чтобы не отправлять много сообщений после идентификации лица;
7-дюймовый экран Raspberry Pi здесь будет к месту, чтобы посетители могли видеть изображение с вашей USB веб-камеры.
Использование камеры Raspberry Pi вместо веб-камеры
Гайд написан для подключенной через USB веб-камеры. Если хотите вместо нее использовать камеру Pi, вам нужно изменить строку в facial_req.py
.
1. Подключите камеру в конфигурации Raspberry Pi. Нажмите OK и перезагрузите устройство.
Источник фото: Tom’s Hardware
2. Установите камеру Pi из терминала, выполнив команду:
pip install picamera[array]
3. В Части 2, вместо выполнения файла headshots.py
запустите файл headshots_picam.py
:
python headshots_picam.py
4. Закомментируйте строку в файлах facial_req.py
и facial_req_email.py
:
vs = VideoStream(src=0).start()
и раскомментируйте
vs = VideoStream(usePiCamera=True).start()t
5. Сохраните файл и запустите.
Источник фото: Tom’s Hardware
Добавление людей, используя фотографии для распознавания лиц
Возможно вы захотите добавить больше членов семьи и друзей для распознавания на вашем Pi. Если они не готовы фотографироваться во время выполнения headshots.py, вы можете загрузить их фото в Raspberry Pi. Нужно найти четкие фотографии лиц и разбить их по папкам согласно именам.
Источник фото: Tom’s Hardware ***
Если вы только осваиваете популярный язык программирования, обратите внимание на факультет Python-разработки GeekBrains. Курсы ведут опытные преподаватели, а успешно завершившим обучение студентам онлайн-академия помогает с трудоустройством.
Интересно, хочу попробовать