Распознавание лиц на arduino uno

Система распознавания и слежения за лицами на Arduino

В данном проекте я совместил детектор распознавания лиц (face detection) и следящую (tracking system) систему.

Вкратце суть проекта: вебкамера, установленная на поворотном механизме подключена к компьютеру под управлением операционной системы Windows и с установленным программным обеспечением OpenCV. Если программа обнаруживает в поле зрения вебкамеры лицо, то вычисляется центр лица. Координаты X и Y передаются в контроллер Arduino, который подключен к компьютеру по USB. В свою очередь, контроллер Arduino по принятым командам управляет двумя сервомоторами: по координате X и по координате Y, т.о. обеспечивается следящая система.

Библиотеку OpenCV (Open Source Computer Vision Library) можно скачать здесь. Библиотека мультиплатформенная, в настоящее время существует под следующие ОС: Windows, Linux, Android, Mac OS и даже iOS. Библиотека обеспечивает обработку изображений в режиме реального времени. Написана на С/С++.

Т.о. данный проект представляет собой смесь soft и hard решений. Обработка изображения ведется на компьютере, а управление серво осуществляется при помощи контроллера.

Итак, что я использовал для проекта:

Железо:
компьютер с ОС Windows 7 SP1
Arduino Uno или совместимый + БП
2 сервопривода
USB вебкамера

Шаг 1. Установка программного обеспечения

1) Если у вас ОС Windows, то скачайте файл OpenCV-2.3.1-win-superpack.exe (или более позднюю версию) и установите библиотеку.

2) Скачайте и установите Microsoft Visual C++ 2010 Express. Если у вас 64-битная версия Windows, то также необходимо будет скачать Windows SDK (но для 64 версии могут быть проблемы, я так и не смог заставить работать OpenCV под Windows 7 x64).

Процесс настройку OpenCV для Visual C++ читайте на официальном сайте.

Шаг 2. Крепление камеры и сервомоторов

Я не стал делать конструкцию «долговечной», потому как после достижения конечной цели я все разбираю для следующего проекта.
Вебкамеру я прикрепил к сервомотору оси Х, а его, в свою очередь закрепил на сервомоторе оси Y. И всю эту конструкцию закрепил в струбцине от «третьих рук».

Шаг 3. Подключение

Подключение сервомоторов:
Желтый вывод от серво оси Х подключается к выводу 9 контроллера Arduino
Желтый вывод от серво оси Y подключается к выводу 10 контроллера Arduino
Красный вывод Vcc от серво подключается к выводу 5V
Черный вывод GND от серво подключается к выводу GND контроллера Arduino

Подключение вебкамеры:
Вебкамера подключается к компьютеру по USB интерфейсу. Программа C++ идентифицирует вебкамеру по номеру USB-порта. Возможно, потребуется указать порт в программе.

Подключение контроллера Arduino UNO:
Контроллер также подключается к компьютеру через USB-интерфейс. В системе появляется виртуальный COM-порт, который необходимо внести в код программы на C++.

Источник

brpat07/Face-Detection-and-Tracking

Use Git or checkout with SVN using the web URL.

Work fast with our official CLI. Learn more.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Face Detection and Tracking

Real time «Face Detection and tracking» using Arduino-UNO, webcam, servo motor and OpenCV library in Python.
This project explains and shows code for the webcam connected to computer via usb. If you want to connect webcam or camera sensor directly to the arduino board then you may need to edit the code.
In this Project, Video processing is done by the computer.

  • Written in Pyhton and Arduino Software
  • No installation required

opencv2 (cv2), serial (This Module should be installed for the python to run fresh_tomatoes.py)

  • Connect servo motor to the arduino. If you are not sure about the circuit please check this link by Arduino
    https://www.arduino.cc/en/Tutorial/Sweep
  • Mount web-camera on the servo motor and connect web-cam to the computer. Check setup.png in the arduino_file folder
  • Here, 3d printed stand was used to hold servo motor on the ground and mount webcam on it.
  • Download detection&tracking zip
  • Run to_save_faces.py . If any required module is not installed, install it.
    If you do not have haarcascade_frontalface_default.xml in your pc then download provided file, change path in the code and write proper path.
  • If it runs alright, then you need to connect Arduino-UNO with your computer and upload this arduino.ino program to it.
  • Now, run tracking_code.py .
  • provided xml file is by Intel Corporation for Open Source Computer Vision Library.
    You can also create your own classfier.
  • For Reference, goto http://docs.opencv.org/trunk/d7/d8b/tutorial_py_face_detection.html

About

Detects face and tracks it using arduino uno and servo motor

Источник

Робот на Arduino, распознающий и отслеживающий лица

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

Приложение для Android написано в бесплатной программной среде Processing. Далее в статье вы можете скачать готовое приложение и установить его на свой телефон, либо установить среду Processing, скачать исходный код приложения и дописать его под свои потребности. Также вы можете посмотреть все проекты на нашем сайте, использующие Processing.

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

Мы постарались сделать проект максимально простым, чтобы его мог повторить любой начинающий в электронике и микропроцессорной технике. Но также на нашем сайте вы можете посмотреть более «продвинутый» проект отслеживания лиц с помощью Arduino и OpenCV.

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. Сервомотор SG90 (2 шт.) (купить на AliExpress).
  3. Bluetooth модуль HC-05/HC-06 (купить на AliExpress).
  4. Смартфон на Android с задней камерой.
  5. Компьютер для программирования.
  6. 3D принтер (опционально).
  7. Батарейка на 9В.

Печать компонентов на 3D принтере (опционально)

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

Если у вас есть доступ к 3D принтеру, то вы можете скачать готовые STL файлы к нему для нашего проекта. Мы использовали 3D принтер под названием FABX v1, который доступен по приемлемой цене – за это приходится расплачиваться небольшим разрешением и отсутствием разъема для SD карты. Для данного принтера мы использовали программное обеспечение Cura чтобы печатать STL файлы. Настройки для данного программного обеспечения показаны на следующем рисунке:

После сборки с помощью шурупов и клея конструкция должна выглядеть примерно следующим образом:

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема состоит из двух сервомоторов, один из которых используется для поворота мобильного телефона вправо/влево, а другой – для его наклонов вперед/назад. Управляющие команды для сервомоторов подает плата Arduino Nano, которая, в свою очередь, получает их от Bluetooth (HC-05) модуля. Схема запитывается от батарейки на 9 В.

Схему можно собрать либо на макетной, либо на перфорированной плате – по вашему желанию.

Установка приложения для Android

Как уже указывалось ранее, интеллектуальной основой этого проекта является приложение на Android, разработанное в программной среде Processing для Android. Вы можете установить на свой смартфон уже готовое приложение для этого проекта, выполнив следующие шаги:

  1. Скачать APK файл приложения по этой ссылке.
  2. Подать питание на собранную схему устройства.
  3. В настройках телефона найти Bluetooth модуль под именем “HC-05”.
  4. Если вы использовали не “HC-05”, то все равно назовите его HC-05 иначе приложение не будет работать.
  5. Подключите модуль к вашему мобильному телефону по Bluetooth используя какой-нибудь простой пароль, например, “1234” или “0000”.
  6. Запустите приложение в портретном режиме. Вы должны увидеть изображение с камеры телефона и надпись “Connected to: HC-05” вверху экрана.
  7. Попробуйте навести камеру на чье либо лицо – на экране смартфона должно отобразиться это лицо и также должен появиться квадрат зеленого цвета, символизирующий захват лица.

Вы можете внести в этот проект множество улучшений. Для этого можете скачать исходный код этого приложения и изменять его по своему желанию. Поначалу может показаться что это очень сложно, но на самом деле программная среда Processing достаточно проста для освоения и при минимальных усилиях позволяет создавать впечатляющие проекты.

Вы можете посмотреть другие проекты на нашем сайте, в которых использовалась программная среда Processing:

Программирование Arduino

Рассмотренное приложение на Android будет обнаруживать ваше лицо и его положение на экране, далее оно должно решить в какую сторону необходимо довернуть камеру чтобы лицо оказалось строго в центре экрана. Это необходимое направление движения камеры передается на плату Arduino через Bluetooth модуль.

Программа для платы Arduino в нашем проекте очень проста, мы должны просто управлять поворотами осей двух сервомоторов на основании данных, получаемых от Bluetooth модуля. Полный текст программы приведен в конце статьи, здесь же рассмотрим только его основные части.

В следующих строках кода устанавливается последовательная связь на контактах D12 (RX) и D11 (TX) платы Arduino. Контакт 12 должен быть соединен с контактом TX Bluetooth модуля, а контакт 11 — с контактом RX Bluetooth модуля.

SoftwareSerial cam_BT(12, 11); // RX, TX

Затем мы инициализируем Bluetooth module для работы на скорости 9600 бод/с. Убедитесь в том, что ваш модуль работает именно на этой скорости, иначе измените скорость его работы.

cam_BT.begin(9600); //start the Bluetooth communication at 9600 baudrate
cam_BT.println(«Ready to take commands»);

Следующие строки кода считывают данные поступающие от Bluetooth модуля. Эти данные затем сохраняются в переменной “BluetoothData”.

if (cam_BT.available()) //считываем что поступает по Bluetooth
<
BluetoothData=cam_BT.read();
Serial.print(«Incoming from BT:»);
Serial.println(BluetoothData);
>

В зависимости от данных, получаемых по Bluetooth, происходит задание угла поворота серводвигателей. К примеру, для поворота камеры влево используется декремент значения угла поворота на 2. Вместо 2 вы можете использовать декремент и на большие значения, например 4 или 6 – в этом случае наше роботизированная рука, управляющая перемещением смартфона в пространстве, будет перемещаться быстрее, однако это может сделать работу проекта более нестабильной.

if (BluetoothData==49) //поворот влево if (BluetoothData==50) //поворот вправо if (BluetoothData==51) //поворот вверх if (BluetoothData==52) //поворот вниз

Исходный код программы

После того как схема будет собрана и программа загружена в плату Arduino, запустите приложение на своем смартфоне и подайте питание на плату Arduino. Приложение автоматически соединится с вашим Bluetooth модулем (он должен быть назван HC-05) и будет ждать обнаружения чьего либо лица. Сядьте напротив камеры смартфона – вы должны заметить как начнут двигаться сервомоторы чтобы поместить ваше лицо в центр экрана. Теперь подвигайтесь в различные стороны в диапазоне действия вашей камеры и вы заметите как смартфон будет следить за вашими перемещениями. Для тестирования работы устройства можно использовать любую картину с изображением человеческого лица.

Более подробно работу проекта вы можете посмотреть на видео в конце статьи. Вы можете усовершенствовать этот проект так, как вам будет необходимо. Далее представлен полный текст программы.

Источник

Adblock
detector