Обзор
Поскольку основанная на зрении технология распознавания жестов рук является важной частью взаимодействия человека с компьютером. Этим технологиям, таким как распознавание речи и распознавание жестов, уделяется большое внимание в области человеко-компьютерного взаимодействия. Проблема была первоначально решена сообществом компьютерного зрения с помощью изображений и видео. Совсем недавно появление недорогих потребительских камер глубины открыло путь к нескольким различным подходам, которые используют информацию о глубине, полученную этими устройствами, для повышения производительности распознавания жестов.
Изучение литературы дает представление о многих стратегиях, которые могут быть рассмотрены и реализованы для достижения распознавания жестов рук. Это также помогает понять преимущества и недостатки различных стратегий. Обзор литературы разделен на две части: модуль обнаружения и модуль камеры.
описание проблемы
В литературных данных было показано, что перчатки, ручные ремни и камеры являются наиболее часто используемыми методами сбора пользовательского ввода. Во многих исследовательских статьях метод распознавания жестов использует извлечение входных данных с использованием перчаток для передачи данных, наручного ремня, оснащенного акселерометром, и Bluetooth для считывания движений рук. Для предварительной обработки изображения использовались различные подходы, в том числе алгоритмы и методы удаления шума, выделения границ и сглаживания, а затем несколько методов сегментации для выделения границ, т. е. отделения переднего плана от фона. Для распознавания жестов использовалась стандартная 2D-камера. Раньше считалось, что одна камера может быть не такой эффективной, как стереокамеры или камеры с функцией определения глубины, но некоторые компании оспаривают эту теорию. По этой причине с помощью платформы Edge Impulse [1] была создана программная технология распознавания жестов с использованием стандартной 2D-камеры, которая может обнаруживать надежные жесты рук. Ряд систем распознавания жестов на основе изображений также может вызывать опасения по поводу практичности технологии для широкого применения. Например, алгоритм, откалиброванный для одной камеры, может не работать с другим устройством или камерой. Чтобы справиться с этой задачей при создании набора данных, был взят класс из набора данных [2] и проверен этот подход с использованием алгоритма FOMO [3].
Предлагаемое оборудование
Цель состояла в том, чтобы разработать интегрированную архитектуру, реализованную на микроконтроллере, способную распознавать жесты рук и оптимизировать производительность модели. Что касается платформы TinyML, мы выбрали микроконтроллер OpenMV [4], который выступал в качестве блока принятия решений. OpenMV (показан на рис. 1) — это небольшой микроконтроллер с низким энергопотреблением, который обеспечивает простую и интуитивно понятную реализацию приложений обработки изображений. Его можно запрограммировать с помощью скриптов Python высокого уровня (Micro-Python). Он управляется процессором STM32H74VI ARM Cortex M7, работающим на частоте 480 МГц, который подходит для большинства приложений машинного зрения. OpenMV особенно подходил для предложенного нами подхода из-за его низкого энергопотребления, а простые алгоритмы будут работать со скоростью от 25 до 50 кадров в секунду при разрешении QVGA (320x240) и ниже. Он оснащен высокопроизводительной камерой, которую мы использовали для сбора данных для миссии.
Рисунок 1: Микроконтроллер OpenMV
Процесс сбора данных
Создание этого проекта с нуля и использование микроконтроллера OpenMV. Первое, что нам нужно было сделать, это собрать данные, которые мы собираемся использовать для обучения модели.
На этом этапе использовался OpenMV со встроенной камерой и OpenMV IDE для создания набора данных. Всего с моей руки было снято 30 изображений, показывающих 3 разных жеста, и они разделены на 3 папки, каждая из которых имеет свое уникальное имя класса. Все обучающие (подготовленные) изображения хранятся в папке набора данных. В дополнение к этому для класса superb из [2] было взято сравнение результата с созданным набором данных и данными тестирования, которые не проходили через микроконтроллер.
· РОГА, содержит 30 изображений руки, указывающей на рог.
· ИНДЕКС, содержит 30 изображений указательного пальца.
· TWO, содержит 30 изображений руки с двумя пальцами.
· SUPERB, содержит 30 изображений превосходных
Чтобы создать набор данных с помощью OpenMV IDE, сначала подключите OpenMV к ноутбуку с помощью USB-кабеля. Нажмите кнопку подключения, и это действие подключит программу сбора данных по умолчанию. После успешного подключения вы можете начать делать снимки объекта, и они будут сохранены в папке определения класса.
На рисунке 2 представлены шаги, которые необходимо выполнить для создания каталога набора данных, а на рисунке 3 представлена папка набора данных, где каждый класс состоит из изображений с уникальным идентификатором.
Рисунок 2: Создание набора данных с помощью OpenMV IDE
Рис. 3. Представление индексного класса без метки
После создания набора данных все изображения были загружены в Edge Impulse для маркировки. На рис. 4 показано, как платформа Edge Impulse загружает данные для маркировки перед их обработкой, а на рис. 5 представлено помеченное изображение для рупоров класса.
Рис. 4. Загрузка данных в платформу Edge Impulse
Рисунок 5: Маркировка изображения класса рогов
Построение и обучение модели
Изображения в наборе данных теперь помечены, для обучения модели использовался алгоритм FOMO. Поскольку FOMO (Faster Objects, More Objects) — это уникальный подход к машинному обучению, который распространяет идентификацию объектов на устройства с ограниченной вычислительной мощностью. Он позволяет вам считать вещи, находить объекты на изображении и отслеживать многочисленные объекты в режиме реального времени, потребляя до 30 раз меньше вычислительной мощности и памяти, чем MobileNet SSD или YOLOv5. Визуализация набора данных и разделимость классов представлены на рисунке 6. Даже после изменения масштаба и преобразования цвета функции изображения имеют высокую размерность, что препятствует подходящей визуализации. Каждое изображение было изменено до размера 48 x 48 пикселей, в дополнение к этому была применена технология увеличения данных.
Количество эпох — это количество раз, когда весь набор данных проходит через нейронную сеть во время обучения. Для этого нет идеального числа, и оно зависит от данных, в целом модель запускалась в течение 60 эпох со скоростью обучения 0,001, а набор данных был разделен на обучение, проверку и тестирование.
После введения динамического квантования от 32-битного числа с плавающей запятой к 8-битному целому полученная оптимизированная модель показала значительное уменьшение размера (75,9 КБ). Встроенное время вывода было сокращено до 70 мс, а использование ОЗУ было ограничено до 63,9 КБ с точностью после проверки после обучения 87,8%. Матрицу путаницы модели и производительность мобильного устройства можно увидеть на рисунке 7.
Рисунок 6: Визуализация набора данных и разделимость классов
Рисунок 7: Матрица путаницы с точностью модели после квантования
Развертывание модели
Чтобы развернуть модель на микроконтроллере, на рис. 8 показана блок-схема. Красная ограничивающая рамка — это шаги, на которых первая модель обучается на заданных данных, после того как эта модель преобразуется в файл tflite, а затем развертывается на микроконтроллере.
Здесь, в нашем случае, мы должны собрать прошивку с использованием платформы Edge Impulse. На рисунке 9 показаны шаги для OpenMV с красной рамкой. Impulses можно развернуть как библиотеку C++. Вы можете включить этот пакет в свое собственное приложение для локального запуска импульса. У нас будет три файла в нашей zip-папке из Edge Impulse, микроскрипт python, помеченный как txt и файл tflite. Получив файл tflite, мы можем развернуть его на нашем микроконтроллере, в нашем случае мы используем OpenMV. Скопируйте tflite и файл метки из папки и вставьте его на диск OpenMV, откройте файл микроскрипта python в OpenMV IDE и начните вывод. Дополнительные сведения о разработке OpenMV см. в [5].
Рисунок 8: Блок-схема развертывания модели tflite в OpenMV
Рисунок 9: Развертывание модели после квантования
Полученные результаты
Чтобы протестировать модель, некоторые изображения жестов рук были разделены на этапах обработки в качестве теста. Живое тестирование на сайте. он принимает входное изображение в качестве параметра и предсказывает класс, к которому оно принадлежит. Перед передачей изображения нам нужно убедиться, что мы используем те же размеры, которые мы использовали на этапе обучения. Здесь по умолчанию используется тот же размер, который на рисунке 10 представляет результат живого тестирования другого класса. Кроме того, на рисунках 11 и 12 показаны результаты тестирования устройств двух разных классов.
Рис. 10. Результат оперативной классификации пальца класса на платформе Edge Impulse
Рисунок 11: Результат классификации индекса класса с использованием OpenMV
Рисунок 12: Результат классификации звуковых сигналов класса с использованием OpenMV
Заключение
В этом проекте мы построили модель распознавания на основе алгоритма FOMO. Результат показывает, что точность предложенного алгоритма на устройстве TinyML составляет до 87,8%. Однако, поскольку эффективность предлагаемого метода низкая, набор данных жестов недостаточен. В результате мы можем повысить точность шагов распознавания и обнаружения с помощью большего количества данных и классов.
Ссылка на общедоступный проект:Распознавание жестов рук с использованием TinyML на OpenMV — Hackster.io
Ссылка:
1. https://www.edgeimpulse.com/
3. Меморандум, Л. Минто, П. Зануттиг, «Использование дескрипторов силуэта и синтетических данных для распознавания жестов рук», STAG: Smart Tools & Apps for Graphics, 2015 г.
4. FOMO: Обнаружение объектов для ограниченных устройств — Документация Edge Impulse
5. OpenMV Cam H7 Plus | OpenMV
6. https://docs.edgeimpulse.com/docs/tutorials/running-your-impulse-locally/running-your-impulse-openmv