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

Распознавание жестов с использованием акселерометра и ESP

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

Arduino 101
Включает встроенный акселерометр, поэтому никаких дополнительных компонентов или схем не требуется.
× 1
Arduino UNO
Вы можете использовать Arduino Uno (или другой Arduino) вместо Arduino 101, но вы тоже нужен акселерометр.
× 1
Аналоговый акселерометр Adafruit:ADXL335
Используйте это (или эквивалент SparkFun), если вы используете Arduino, отличную от Arduino 101 ( со встроенным акселерометром).
× 1
Прорыв трехосного акселерометра SparkFun - ADXL335
Используйте это (или эквивалент Adafruit), если вы используете Arduino, отличную от Arduino 101 ( со встроенным акселерометром).
× 1

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

Обзор

В этом руководстве показано, как включить базовое распознавание жестов в проекты Arduino с помощью системы ESP. Например, вы можете распознавать разные теннисные жесты, такие как удар справа, наотмашь и подача; элементы танцевального номера; тяжелые жесты; и т. д. Жесты распознаются с помощью акселерометра и отправляются в приложение ESP, работающее на вашем компьютере. ESP использует простой алгоритм машинного обучения для сопоставления данных акселерометра в реальном времени с записанными примерами различных жестов, отправляя сообщение обратно в Arduino, когда он распознает жест, похожий на один из примеров. Система распознает только отдельные случаи дискретных жестов; он не предоставляет информацию о том, как выполняется жест. Тем не менее, его можно использовать для широкого спектра интерактивных приложений.

Загрузите приложение для распознавания жестов ESP:

  • Mac:ESP-Gestures-Mac-20161028.zip
  • Windows:ESP-Gestures-Win-20161028.zip. Вам также может потребоваться распространяемый компонент Visual C ++ (обновление 3) от Microsoft.
  • Ubuntu:ESP-Gestures-Ubuntu-20161028.tar.gz
  • Примеры жестов:ForehandBackhandServe.grt

Шаг 1. Подключите акселерометр.

Если вы используете Arduino 101 со встроенным акселерометром, вы можете пропустить этот шаг. В противном случае вам потребуется подключить акселерометр. Для этого сначала припаяйте штыри разъема «папа» к коммутационной плате, если вы еще этого не сделали. Затем вы подключите акселерометр к Arduino.

В качестве ярлыка вы можете подключить разъем акселерометра непосредственно к аналоговым входным контактам Arduino Uno (или другого Arduino с таким же форм-фактором). Затем в коде Arduino вы можете настроить соответствующие контакты для подачи питания и заземления на акселерометр.

В качестве альтернативы вы можете подключить акселерометр к макетной плате и подключить его к Arduino, подключив его выводы питания и заземления к выводам 5V и GND на Arduino, а выводы осей X, Y и Z - к трем аналоговым входам. платы Arduino.

Шаг 2. Загрузите код Arduino.

Вы можете использовать одну из приведенных ниже программ Arduino, чтобы считать данные с акселерометра и отправить их через последовательный порт (USB) на компьютер. Во-первых, убедитесь, что контакты, указанные в программе Arduino, соответствуют тому, как вы подключили акселерометр (например, что xpin соответствует аналоговому входному контакту, который подключен к контакту оси X вашего акселерометра). (Это не применимо, если вы используете Arduino 101, к которому акселерометр подключен внутри.) Затем выберите соответствующую плату и последовательный порт в меню инструментов Arduino и загрузите эскиз Arduino.

Шаг 3. Проверьте данные в последовательном мониторе.

Откройте последовательный монитор Arduino, установите скорость 9600 бод и убедитесь, что вы получаете данные акселерометра от Arduino. Вы должны увидеть три столбца чисел, которые меняются при перемещении акселерометра. Используйте последовательный плоттер Arduino, чтобы увидеть график этих чисел.

Обязательно закройте последовательный монитор и последовательный плоттер, прежде чем продолжить, так как в противном случае они заблокируют соединение приложения ESP с вашим Arduino.

Шаг 4. Запустите приложение распознавания жестов ESP и выберите свой последовательный порт.

Загрузите приложение для распознавания жестов ESP:

  • Mac:ESP-Gestures-Mac-20160812.zip
  • Windows:ESP-Gestures-Win-20160812.zip

Выберите последовательный порт, соответствующий вашей плате Arduino, в меню конфигурации. (Щелкните заголовок «Выберите последовательный порт», чтобы открыть список портов.)

Вы должны увидеть поток данных в реальном времени на графике «Необработанные данные». Три линии на графике соответствуют трем осям акселерометра:красная линия соответствует оси X, зеленая - оси Y, а синяя - оси Z.

Шаг 5. Запишите калибровочные образцы.

Чтобы приложение ESP могло понять, какой диапазон значений ожидать от вашего акселерометра и Arduino, вам необходимо записать калибровочный образец. Поместите акселерометр на плоскую поверхность осью Z вверх. Нажмите и удерживайте кнопку «1» в течение секунды или около того, чтобы записать калибровочный образец «в вертикальном положении». Вы должны увидеть, как появится график образца. Затем переверните акселерометр вверх и, удерживая его ровно и неподвижно, удерживайте кнопку «2», чтобы записать перевернутый калибровочный образец. Система ESP использует эти данные, чтобы выяснить, какие числовые значения соответствуют 0 g ускорения (по осям X и Y), а какие соответствуют 1 g ускорения (по оси Z).

Шаг 6. Запишите примеры жестов.

Перейдите на вкладку «Обучение» в приложении ESP, щелкнув по ней или набрав заглавную букву «T». Эта вкладка позволяет вам записывать или загружать примеры жестов, которые должна распознавать система ESP. Вы можете записать примеры до девяти различных жестов.

Чтобы записать пример жеста, сделайте жест, удерживая нажатой клавишу, соответствующую метке, которую вы хотите связать с жестом. Например, чтобы записать жест с меткой 1, удерживайте клавишу «1» на клавиатуре, делая жест. (В качестве альтернативы вы можете загрузить примеры теннисных жестов в ForehandBackhandServe.grt.)

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

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

Каждый дополнительный пример, который вы записываете, - это еще один образец, с которым алгоритм машинного обучения может сравнивать при распознавании жестов. Это означает, что если вы хотите, чтобы система распознавала различные варианты жеста (например, разные способы, которыми он выполняется разными людьми), может помочь запись образцов каждого варианта. С другой стороны, если у вас есть плохие образцы, они могут запутать систему; больше образцов не обязательно лучше. В общем, нам повезло с записью от 5 до 10 образцов для каждого жеста, хотя, опять же, качество отдельных образцов более важно, чем их количество.

Если вам не нравится образец (например, потому что вы нажали клавишу не в то время и пропустили данные, соответствующие части жеста), вы можете удалить его, щелкнув поле рядом со словом «удалить» под образцом. . Вы можете обрезать образец, щелкнув и перетащив график образца, чтобы выбрать часть образца, которую вы хотите сохранить, а затем щелкнув поле с надписью «обрезать». Вы можете перемещаться между различными образцами в классе, щелкая значки стрелок под графиком для образца. Если вы записали семпл не в тот класс, вы можете переместить его, щелкнув кнопку «изменить метку», а затем нажав клавишу, соответствующую метке, которой вы хотите присвоить семпл. Чтобы назвать жест, нажмите кнопку «переименовать», введите имя и нажмите клавишу ВВОД.

Шаг 7. Обучите систему распознавать жесты.

Записав несколько примеров жестов, вы можете обучить систему ESP распознавать эти жесты из ваших примеров. Нажмите клавишу «t» на клавиатуре, чтобы обучить систему. Внизу окна должно появиться сообщение «Обучение выполнено успешно». Теперь, когда вы делаете жест, похожий на один из записанных вами примеров, вы должны увидеть, как его имя отображается на графике данных датчика в реальном времени.

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

В частности, если система не распознает жесты, которые, по вашему мнению, следует, вы можете записать дополнительные примеры этого жеста. Если система распознает жесты, а не должна, вы можете удалить или обрезать примеры, которые выглядят иначе, чем другие, или содержат длинные периоды относительно плоских линий. Не забудьте нажать «t» после того, как вы измените свои примеры, чтобы переобучить систему.

Шаг 8. При необходимости настройте конфигурацию системы.

Хотя изменение ваших обучающих примеров, вероятно, является наиболее важным средством обеспечения правильной работы системы, ESP также позволяет вам настроить некоторые основные параметры системы. Для этого щелкните метку «щелкните, чтобы открыть конфигурацию». Вы должны увидеть два параметра:изменчивость и время ожидания. Обратите внимание, что после изменения этих параметров вам необходимо переобучить систему, нажав «t».

Параметр изменчивости определяет, насколько жест может отличаться от одного из записанных примеров и при этом быть распознанным. Чем выше число, тем больше оно может отличаться. Если система требует, чтобы ваши жесты были слишком похожи на записанные вами примеры, вы можете попробовать увеличить это число. (Вы также можете попробовать записать дополнительные примеры.) Если система распознает ложные жесты, вы можете попробовать уменьшить это число, хотя вы также можете попробовать удалить все выглядящие неприятно обучающие примеры.

Параметр тайм-аута определяет, как долго после распознавания жеста система ожидает распознавания нового. Он измеряется в миллисекундах (тысячных долях секунды). Если кажется, что в системе отсутствуют жесты, выполняемые рядом с другим жестом, попробуйте уменьшить это число. Однако будьте осторожны, потому что, если вы сделаете это число слишком низким, система может распознавать один жест несколько раз. Если кажется, что система распознает несколько жестов, когда вы делаете только один жест (например, если она видит удар справа, за которым следует удар слева, когда вы сделали только удар справа), вы можете попробовать увеличить этот параметр.

Шаг 9. Включите распознавание жестов в свой проект Arduino.

Когда система ESP делает прогноз, она отправляет на ваш Arduino сообщение с номером распознанного ею жеста (в виде текста ASCII, за которым следует новая строка, например, «1 \ n»). Читая эти прогнозы через последовательный порт, вы можете заставить Arduino реагировать на жест различными способами.

Прогнозы также отправляются по TCP на сервер, работающий на локальном порту 5204 (в том же формате, что и для Arduino). Например, это может быть игра, написанная на Processing или другом программном обеспечении. Перед запуском приложения ESP убедитесь, что TCP-сервер запущен.

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

Это конкретное приложение ESP использует алгоритм, называемый Dynamic Time Warping (или DTW). Этот алгоритм искажает живой сигнал датчика, удаляя или дублируя отдельные показания, генерируя множество вариаций и проверяя, насколько они похожи на записанные образцы. Алгоритм ищет обучающую выборку, наиболее близкую к данным датчика в реальном времени. Если разница между ними меньше определенного порога, он считает это совпадением и выводит прогноз, соответствующий обучающему классу, содержащему этот образец. Вы можете настроить требуемое расстояние, используя параметр «изменчивость» в раскрывающемся меню конфигурации.

Распознавание жестов - это только одна область, к которой может применяться система ESP. ESP построен на основе набора инструментов распознавания жестов (GRT), который, несмотря на свое название, на самом деле содержит широкий спектр алгоритмов машинного обучения, которые можно применять к широкому спектру приложений для распознавания в реальном времени. ESP берет код для конкретного приложения и переводит его в настраиваемый пользовательский интерфейс для работы с этим конвейером машинного обучения. Эти прикладные программы включают конвейер машинного обучения GRT, спецификацию входов датчиков, определение процесса калибровки и спецификации настраиваемых параметров. Мы создали примеры ESP для распознавания цвета, определения позы с помощью акселерометров и простого распознавания звука. См. ESP GitHub для получения дополнительной информации.

Код

Код Arduino ADXL335
Этот код считывается с ADXL335, подключенного к Arduino:вывод оси X акселерометра должен быть подключен к выводу A5 Arduino, ось Y - к A4, а ось Z - к A3. Показания передаются через последовательный порт (USB) со скоростью 9600 бод в виде данных ASCII, разделенных табуляцией и завершающихся новой строкой.
Код акселерометра Arduino 101
Считывает данные акселерометра со встроенного акселерометра на Arduino 101. Показания отправляются через последовательный (USB) порт на 9600 как данные ASCII, разделенные табуляцией и оканчивающиеся новой строкой.

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

  1. Система посещаемости с использованием Arduino и RFID с Python
  2. Универсальный пульт дистанционного управления с использованием Arduino, 1Sheeld и Android
  3. Вольтметр своими руками с использованием Arduino и смартфона
  4. IOT - Smart Jar с использованием ESP8266, Arduino и ультразвукового датчика
  5. Измерение частоты и рабочего цикла с использованием Arduino
  6. Управление Arduino Rover с помощью Firmata и контроллера Xbox One
  7. Сонар с использованием Arduino и отображение при обработке IDE
  8. Управление яркостью светодиода с помощью Bolt и Arduino
  9. Простая и умная роботизированная рука с использованием Arduino
  10. Как сделать компас с помощью Arduino и Processing IDE