Отслеживание и распознавание лиц с помощью Ардуино

Проект на основе платы Ардуино Микро по итогам которого мы получим устройство способное отслеживать и распознавать лица.

Вступление

Разработка и продвижение камер с высоким разрешением в последние годы побуждают инженеров и студентов к исследованию и созданию приложений, основанных на «автоматизированных» алгоритмах компьютерного зрения, частую задачу, используемую для отслеживания движения и положения объекта, а также его собственные характеристики, такие как: форма объекта, цвет объекта и т.д.

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

Как это работает

Функциональность проекта, довольно проста, но требует небольшого изучения.

Arduino Micro получает информацию об объекте через WiFi-модуль, в этом случае SparkFun Breakout Board CC3000 от TI. Связь осуществляется через клиентский сервер сокетов UDP: приложение в мобильном телефоне отправляет необходимые данные (размер кадра и положение для горизонтального и вертикального серво) в микроконтроллер, чтобы она могла выполнять вычисления с переданной информацией и передавать изменения на сервоприводы, в данном случае только горизонтальные.

Итого нашего проекта по распознаванию и отслеживанию лиц с помощью Ардуино вы сможете увидеть в видео на последнем шаге.

Комплектующие

Набор компонентов для проекта по распознаванию лиц не велик. Главную роль здесь играет правильное приложение.

Аппаратная часть

  • Плата Arduino Micro & Genuino Micro × 1
  • Адаптер SparkFun WiFi CC3000 × 1
  • SparkFun SO5NF STD × 1

Приложения и программы

Схема соединения

При сборке устройства сверяйтесь со схемой, представленной на рисунке ниже. Нажмите для увеличения изображения.

Код

Скачать или скопировать код проекта вы можете ниже.

#include <avr/delay.h>
/* servo libs - Библиотека серво-привода */
#include "_Servo.h"
/* WiFi libs - Библиотека WiFi */
#include "CC3000.h"
#include "CC3000_Client.h"
#include "common.h"

Servo servo_x;
Servo servo_y;

void setup()
{
	/* код настройки */
	ConnectionInfo connection_info;
	
	// Инициализация CC3000 (конфигурируем SPI соединение)
	#ifdef CC3000_DEBUG
		Serial.begin(115200);
	#endif
	
	// Инициализация CC3000 (конфигурируем SPI соединение)
	if(!wifi.init(9)) {
		#ifdef CC3000_DEBUG
		DEBUGPRINTLN(PSTR("Initialize CC3000 FAIL! ОШИБКА!"));
		#endif
		return;
	}

	else {
		//FreeRam();
		#ifdef CC3000_DEBUG
			DEBUGPRINTLN(PSTR("Initialize CC3000 OK!"));
		#endif
	}

	if(!wifi.connect(ap_ssid, ap_security, ap_password, timeout)) 
	{
		#ifdef CC3000_DEBUG
			DEBUGPRINTLN(PSTR("Error: Could not connect to AP!"));
		#endif
	}
	
	
	// Собираем сведения о соединении и печатаем IP-адрес
	if(!wifi.getConnectionInfo(connection_info) )
	{
		#ifdef CC3000_DEBUG
		DEBUGPRINTLN(PSTR("Error: Could not obtain connection details"));
		#endif
		return;
	}
	
	else
	{
		#ifdef CC3000_DEBUG
		DEBUGPRINT(PSTR("IP Address: "));
		printIPAddr(connection_info.ip_address);
		#endif
	}

	pin_mode(SERVO_PIN_X, OUTPUT);    // declare the LED's pin as output
	pin_mode(SERVO_PIN_Y, OUTPUT);    // declare the LED's pin as output

	servo_x.attach(SERVO_PIN_X);
	servo_y.attach(SERVO_PIN_Y);

	// center servos
	servo_x.write(SERVO_CENTER_X);
	servo_y.write(SERVO_CENTER_Y);

	_delay_ms(200);
}

void loop()
{	
}

Итоговый результат

Вариант реализации устройства по отслеживанию и распознаванию лиц на Ардуино смотрите в видео ниже.

На этом всё. Хороших вам изобретений.

Ардуино+