Найти в Дзене

ESP32-CAM, Edge Impulse и TinyML? Вполне возможно!

Идея: соединить возможности облачной среды Edge Impulse, позволяющей использовать технологии Edge computing, и модуля ESP32-CAM, содержащего контроллер, WiFi модуль и камеру. Дешево и сердито показать машинное обучение на относительно дешевой базе. В целом, машинное обучение на устройствах с ограниченными ресурсами называется TinyML (Tiny Machine Learning). Основная цель TinyML — это разработка легковесных моделей, которые могут работать на периферийных устройствах с низким энергопотреблением, ограниченной памятью и вычислительной мощностью. Перенос модели на ESP32-CAM позволяет продемонстрировать собственно саму идею TinyML, а также построить исполнительные устройства с элементами ИИ, что интересно и в плане технического творчества, и в варианте проектной деятельности в обычной общеобразовательной школе. По сути, далее можно соединить ESP32-CAM с тем же роботом, например, на основе дешевой Arduino UNO и использовать распознавание объектов для формирования управляющих сигналов: менять
Оглавление

Введение.

Идея: соединить возможности облачной среды Edge Impulse, позволяющей использовать технологии Edge computing, и модуля ESP32-CAM, содержащего контроллер, WiFi модуль и камеру. Дешево и сердито показать машинное обучение на относительно дешевой базе.

В целом, машинное обучение на устройствах с ограниченными ресурсами называется TinyML (Tiny Machine Learning). Основная цель TinyML — это разработка легковесных моделей, которые могут работать на периферийных устройствах с низким энергопотреблением, ограниченной памятью и вычислительной мощностью.

Перенос модели на ESP32-CAM позволяет продемонстрировать собственно саму идею TinyML, а также построить исполнительные устройства с элементами ИИ, что интересно и в плане технического творчества, и в варианте проектной деятельности в обычной общеобразовательной школе. По сути, далее можно соединить ESP32-CAM с тем же роботом, например, на основе дешевой Arduino UNO и использовать распознавание объектов для формирования управляющих сигналов: менять скорость, указывать направление поворотов и т.д.

В данном материале рассмотрим перенос модели на ESP32-CAM и просмотр результатов ее работы по распознаванию. Более сложные процессы - в последующих статьях.

Ранее (читайте предыдущую статью цикла) мы уже добились определенных результатов: натренированная ML модель распознает объекты с помощью web-камеры или смартфона. Пришло время научиться использовать для этой цели модуль ESP32-CAM. Для пробы используем ту же самую модель, которую ранее получили в ходе обучения, в нашем случае это было распознавание двух инструментов, у вас могли быть другие предметы.

Общее описание 1 проекта с ESP32-CAM.

В текущем проекте понадобятся: модуль ESP32-CAM, адаптер ESP32-CAM-MB для прошивки и взаимодействия со средой Arduino IDE, обученная в Edge Impulse модель для распознавания объектов. Без адаптера ESP32-CAM-MB можно обойтись, заменив другими вариантами прошивки ESP32-CAM, в сети много материалов, смотрите. Адаптер - удобнее и проще.

Задача 1 проекта: преобразовать модель в форму, подходящую для работы со средой Arduino IDE, загрузить ее в модуль ESP32-CAM, проверить работоспособность "распознавания объектов" в скетче-примере. Результаты будут передаваться в монитор последовательного порта Arduino IDE и мы будем видеть "процент распознавания" в цифрах.

Для удобства работы адаптер ESP32-CAM-MB с установленной ESP32-CAM удобно закрепить на штативе (например, от смартфона) или продумать другое устойчивое закрепление модуля с камерой для захвата изображения.

Возможные изменения модели для новых условий

Параметры изображений.

Надо учесть тот факт, что мощность процессора ESP32-CAM и объем его памяти гораздо меньше, чем у смартфона или компьютера. Поэтому нельзя использовать слишком много изображений, или выставлять слишком большие размеры. Edge Impulse рекомендует использовать изображения с разрешением не менее 96x96 пикселей. В нашем случае вполне достаточно 256x256 пикселей. Так же существует вопрос цвета. С одной стороны, модель намного лучше распознает картинки с цветом. И это вполне можно использовать, если не делать больше сотни изображений на предмет. С другой стороны, предметы контрастные, четко разных форм - вполне можно использовать и в варианте "оттенки серого", что значительно уменьшит объем модели. Экспериментируйте, пробуйте разные варианты. Я же опишу, как изменить настройки в уже готовой модели Edge Impulse.

Откройте ваш проект в Edge Impulse. Вернитесь в раздел "Image".

Изменение параметров изображения
Изменение параметров изображения

В поле "Color depth" (Глубина цвета) измените значение RGB на Greyscale (Оттенки серого). Это уменьшит размер модели и увеличит быстродействие.

Но еще раз подчеркну - цветные распознаются лучше (особенно когда крупные объект или фон картинок имеют разные цвета).

Обучение модели

Если вы изменили модель - то дальше проводим все этапы так же, как в прошлый раз. Подробно на процессе останавливаться не будем, он подробно описан в предыдущей статье. Если вы не вносили изменения в параметры, то просто пропустите эти разделы.

Подключение обученной модели к Arduino IDE

Создание библиотеки Arduino на основе обученной модели

Полученную модель подключать к Arduino IDE будем в виде Arduino библиотеки. В среде Edge Impulse есть соответствующий инструмент.

Перейдите в раздел "Deployment" (Размещение, развертывание) и выберите в поиске "Arduino library", после чего нажмите большую синюю кнопку "Build" (Создавать, строить) внизу экрана, для запуска сборки библиотеки.

Создаем Arduino библиотеку на основе нашей модели
Создаем Arduino библиотеку на основе нашей модели

После того как библиотека будет создана, вам будет предложено загрузить её в виде ZIP файла. Библиотека готова.

Arduino библиотека готова
Arduino библиотека готова

Подключение библиотеки к Arduino IDE

После загрузки библиотеки её требуется подключить к Arduino IDE. Мы уже подключали ранее библиотеки, но кратко напомним действия: в Arduino IDE открываем меню Скетч→Подключить библиотеку→ Добавить .ZIP библиотеку

В открывшемся окне указываем на загруженный ZIP файл нашей библиотеки. Библиотека должна установится.

Распознавание объектов с помощью ESP32-CAM

После подключения библиотеки нам потребуется загрузить в ESP32-CAM подходящий пример для работы с камерой с использованием библиотеки, сформированной ранее в Edge Impulse.

Подключение ESP32-CAM к Arduino IDE

Рекомендуем использовать специальный адаптер для ESP32-CAM — он называется ESP32-CAM-MB

Адаптер ESP32-CAM-MB (слева); модуль ESP32-CAM установлен в адаптер (справа)
Адаптер ESP32-CAM-MB (слева); модуль ESP32-CAM установлен в адаптер (справа)

Модуль ESP32-CAM устанавливается в этот адаптер (рис.выше - справа)­, после чего мы можем программировать его почти как стандартный Arduino-контроллер.

Теперь нужно подготовить среду Arduino IDE, поскольку по умолчанию контроллеры фирмы ESP в ней не поддерживаются.

Итак, запускаем среду Arduino IDE и выбираем пункт меню Файл | Параметры

Окно параметров Arduino IDE
Окно параметров Arduino IDE

Здесь нас интересует пункт Дополнительные ссылки для Менеджера

плат. Нажав кнопку справа, попадаем в окно ввода ссылок и добавляем ссылку на ESP32: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - эта ссылка подключает дополнительный репозиторий, созданный программистами Espressif и содержащий основные компоненты для работы с ESP32 в среде Arduino IDE.

Закрываем окно кнопкой ОК, проверяем в окне настроек наличие введенной строки и подтверждаем внесенные изменения, закрыв окно Параметры нажатием кнопки ОК.

Теперь надо установить в Arduino IDE библиотеки и компилятор для ESP32. Для этого переходим в меню Инструменты | Плата, выбираем Менеджер плат и в строке поиска Менеджера плат вводим ESP32. Если предварительные настройки были сделаны правильно, получаем в окне ссылку на скачивание модулей поддержки ESP32.

Пакет ESP32 найден — можно приступать к его установке
Пакет ESP32 найден — можно приступать к его установке

Нажимаем кнопку Установка и ждем завершения процесса скачивания недостающих файлов с сайта компании Espressif.

Загрузка в ESP32-CAM примера для работы с камерой (из ранее подгруженной из Edge Impulse библиотеки)

Подключаем ESP32-CAM в модуль для прошивки, подключаем к компьютеру, в Arduino IDE настраиваем соединение, выбрав плату AI THINKER ESP32-CAM.

Откройте пример из меню Файл→Примеры (прокручиваем вниз, до примеров из пользовательских библиотек) →ИмяВашегоПроектаМодели →esp32->esp32_camera

Открываем проект-пример для ESP32-CAM с использованием библиотеки распознавания
Открываем проект-пример для ESP32-CAM с использованием библиотеки распознавания

После загрузки библиотечного скетча в нём необходимо изменить тип используемой камеры, закомментировать строку 35 и раскомментировать 36-ю, т.е. выбрать камеру CAMERA_MODEL_AI_THINKER. Сохраните скетч.

Меняем выбор камеры в примере
Меняем выбор камеры в примере

Нажимаем кнопку загрузки и ждем, пока пройдет процесс компиляции и загрузки в память контроллера ESP32-CAM. Процесс достаточно долгий, наберитесь терпения. Иногда требуется зажать кнопку I00 на модуле ESP32-CAM-MB и держать до начала загрузки.

После загрузки перезагрузите модуль (кнопка на модуле ESP32-CAM-MB) для запуска скетча на исполнение.

Включите монитор порта, проверьте скорость (115200) и попробуйте распознать предметы, которые раньше использовали в обучении модели.

Для этого расположите камеру ESP32-CAM так, чтобы она уверенно захватывала объект и пронаблюдайте за данными, выдаваемыми в мониторе последовательного порта. Пример – на рисунке

Результаты работы "распознавания" по заданной модели
Результаты работы "распознавания" по заданной модели

Цифры на скриншоте - это "уровень достоверности" в процентах. 0.95 это 95%, 0.82 — 82% и т. д. Заметно что скорость работы не такая высокая как в случаях с веб камерой и смартфоном.

Внимание! Для хороших результатов важно правильно расположить камеру и объект. Напомним, оптимально – закрепить камеру на небольшом штативе, очертить на листе бумаги область получаемого кадра и уже в нем располагать предметы для распознавания.

Все, текущий проект закончен. Мы добились устойчивой работы модели с ESP32-CAM.

Если в результате выполнения проекта вы добились высоких результатов "распознавания" – отлично, можно двигаться дальше. По планам у нас – использовать полученные знания для распознавания определенной графической информации и далее - использования результатов для осуществления "умного" поведения робота.

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

Есть еще один вариант получения изображений для обучения модели, причем прямо с камеры ESP32-CAM в автоматизированном режиме, что очень удобно для большого числа изображений. А чем больше изображений, тем точнее модель.

В этом варианте мы попробуем использовать камеру самого модуля ESP32-CAM в качестве фотосистемы - источника изображений. Следующая статья будет посвящена этой технологии.