Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Камера слежения за лицом

Компоненты и расходные материалы

Arduino UNO
× 1
веб-камера
× 1
резинка
× 1
9 В, 1 А, импульсный настенный источник питания
× 1
Сервоприводы MG-90
× 2
штекер 2,1 * 5,5 мм
× 1
Линейный регулятор (7805)
× 1
Саморезы M2 * 10 мм
× 15
скрепка
× 1
Комплект проводов для подключения, 22 AWG
× 1
заголовок булавки
× 1
5 мм светодиод:красный
× 1
5 мм светодиод:зеленый
× 1
5 мм светодиод:желтый
× 1
Резистор 220 Ом
× 3
термоусадочная трубка
× 1

Необходимые инструменты и машины

Инструмент для зачистки и резки проводов, 18–10 AWG / 0,75–4 мм² Емкость проводов
Плоскогубцы, длинный нос
Паяльник (универсальный)
мультиметр
отвертка
3D-принтер (общий)

Приложения и онлайн-сервисы

Microsoft Windows 10

Об этом проекте


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

Я изо всех сил пытался сделать механизм достаточно маленьким, чтобы он соответствовал моему 3D-принту, поэтому вместо того, чтобы навсегда запереть проект в шкафу и забыть о нем, я решил сделать легкую для сборки модель с простым в использовании программным обеспечением, чтобы каждый мог наслаждаться и развивать. .

............... https://www.littlefrenchkev.com/face-tracking-camera-mini .................

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

Камера перемещается с помощью двух сервоприводов, управляемых Arduino Uno. Камера подключена к компьютеру, и программа пытается найти лица на изображениях, полученных с камеры.

Если лицо обнаружено, программное обеспечение отправит сообщение на Arduino, чтобы заставить камеру двигаться, чтобы обнаруженное лицо оказалось в центре изображения.

Если лицо не найдено, программа отправит сообщение на Arduino, чтобы заставить его переместиться в случайное положение.

Я попытался сделать программу достаточно гибкой с помощью таких опций, как:

  • изменяемые диапазоны сервоприводов
  • возможность инвертировать вращение сервоприводов
  • ручное управление

Надеюсь, это упростит его повторное использование для других целей.

Я также добавил 3 светодиода, которые показывают состояние обнаружения:красный - отсутствие обнаружения, желтый - когда лицо обнаружено, но не в центре изображения, и зеленый - когда лицо обнаружено и в центре изображения. P>

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

Связь между Arduino и программным обеспечением осуществляется через последовательный порт (через USB).

Программное обеспечение для распознавания лиц было написано на Python. Я оставил все файлы Python на GitHub на случай, если вы захотите взглянуть на код (предупреждение:это, вероятно, не очень хорошо, я учусь самостоятельно) или повторно использовать их для своего собственного проекта.

Если Python вам не нравится, вы также можете скачать исполняемую версию на моем веб-сайте.

Если вы хотите построить свой собственный, посмотрите следующие видео. Я постарался максимально упростить их отслеживание, надеюсь, у меня получилось хорошо с этим.

Все, что вам нужно

Сборка

Электропроводка

Программное обеспечение и настройка


Код

  • Код Arduino
Код Arduino C / C ++
Это код, который будет загружен в arduino
 // Sketch на основе работы, проделанной Robin2 на форуме arduino // подробнее здесь // https://forum.arduino.cc/index.php? Topic =225329.msg1810764 # msg1810764 # include  Серво panServo; Серво tiltServo; byte redledPin =2; byte yellowledPin =3; byte greenledPin =4; const byte buffSize =40; char inputBuffer [buffSize]; const char startMarker ='<'; const char endMarker ='>'; byte bytesRecvd =0; boolean readInProgress =false; логическое newDataFromPC =false; float panServoAngle =90.0; float tiltServoAngle =90.0; int LED_state =0; // 8 =============Dvoid setup () {Serial.begin (115200); panServo.attach (8); tiltServo.attach (9); pinMode (redledPin, ВЫХОД); pinMode (yellowledPin, ВЫХОД); pinMode (greenledPin, ВЫХОД); // moveServo (); start_sequence (); задержка (200); Serial.println (""); // отправляем сообщение на компьютер} // 8 =============Dvoid loop () {getDataFromPC (); replyToPC (); moveServo (); setLED ();} // 8 =============Dvoid getDataFromPC () {// получаем данные с ПК и сохраняем их в inputBuffer if (Serial.available ()> 0) {char x =Serial.read (); // считываем символ из серийного номера if (x ==endMarker) {// ищем конечный маркер readInProgress =false; // если найден, установим текущее чтение true (добавление нового байта в буфер прекратится) newDataFromPC =true; // сообщаем arduino, что доступны новые данные inputBuffer [bytesRecvd] =0; // очищаем буфер ввода processData (); // обрабатываем данные в буфере} if (readInProgress) {inputBuffer [bytesRecvd] =x; // заполняем входной буфер байтами bytesRecvd ++; // увеличиваем индекс if (bytesRecvd ==buffSize) {// когда буфер заполнен bytesRecvd =buffSize - 1; // оставляем место для конечного маркера}} if (x ==startMarker) {// ищем начальный производитель bytesRecvd =0; // если найден, устанавливаем полученный байт равным 0 readInProgress =true; // устанавливает текущее чтение в значение true}}} // 8 =============Dvoid processData () // для типа данных "" {char * strtokIndx; // это используется strtok () как индекс strtokIndx =strtok (inputBuffer, ","); // получаем первую часть panServoAngle =atof (strtokIndx); // преобразовываем эту часть в число с плавающей запятой strtokIndx =strtok (NULL, ","); // получаем вторую часть (это продолжается с того места, где остановился предыдущий вызов) tiltServoAngle =atof (strtokIndx); // преобразовываем эту часть в число с плавающей запятой strtokIndx =strtok (NULL, ","); // получаем последнюю часть LED_state =atoi (strtokIndx); // преобразовываем эту часть в целое число (строка в int)} // 8 =============Dvoid replyToPC () {if (newDataFromPC) {newDataFromPC =false; Serial.print ("<"); Serial.print (panServo.read ()); Serial.print (","); Serial.print (tiltServo.read ()); Serial.println (">"); }} // 8 =============Избегайте moveServo () {panServo.write (panServoAngle); tiltServo.write (tiltServoAngle);} void setLED () {если (LED_state ==2) {digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, HIGH); digitalWrite (greenledPin, НИЗКИЙ); } иначе, если (LED_state ==1) {digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, HIGH); } иначе, если (LED_state ==0) {digitalWrite (redledPin, HIGH); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, НИЗКИЙ); } иначе, если (LED_state ==3) {digitalWrite (redledPin, HIGH); digitalWrite (yellowledPin, HIGH); digitalWrite (greenledPin, HIGH); } else {digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, НИЗКИЙ); }} // 8 =============D void start_sequence () {panServo.write (90); tiltServo.write (90); задержка (300); digitalWrite (redledPin, HIGH); задержка (100); digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, HIGH); задержка (100); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, HIGH); задержка (100); digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, LOW); задержка (100); digitalWrite (redledPin, HIGH); digitalWrite (yellowledPin, HIGH); digitalWrite (greenledPin, HIGH); задержка (100); digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, НИЗКИЙ); } 
Программа для распознавания лиц
Вот репозиторий, в котором вы можете найти файлы для программного обеспечения для распознавания лиц. Вы также можете найти исполняемую версию на моем веб-сайте. Https://github.com/LittleFrenchKev/face_tracking_camera

Изготовленные на заказ детали и корпуса

детали камеры слежения за лицом
все детали, необходимые для создания мини камеры слежения за лицом. Вы также можете найти их здесь:https://www.littlefrenchkev.com/downloadCAD файл на сайте thingiverse.com

Схема


Производственный процесс

  1. Отслеживание лица при панорамировании / наклоне с помощью raspberry pi
  2. Визитная карточка игры «Крестики-нолики»
  3. Многотемпературный датчик
  4. Управление паяльником DIY для 862D +
  5. MotionSense
  6. Пожарная безопасность 3D-принтера
  7. Датчик Интернета вещей с Arduino, Yaler и IFTTT
  8. Отталкивающая электромагнитная левитация Arduino
  9. Бот для захвата удаленного управления
  10. CoroFence - Тепловой детектор🖖