ESP32 + MLX90640
ESP32 + MLX90640

Сегодня я хочу показать и рассказать вам, как, подключив к ESP32-S3 тепловизионную матрицу MLX90640, можно запустить веб-сервер для стриминга теплового изображения с определением в реальном времени того, какие сущности попали в поле зрения тепловизора.

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

Данная система является полностью автономной, и инференс TensorFlow Lite-модели происходит прямо на борту микроконтроллера.

Демонстрация работы + исходный код:

?VK: https://vkvideo.ru/video-229753773_456239024
?GitHub: https://github.com/DenissStepanjuk/ESP32.MLX90640.Classification_with_TensorFlowLite

Сбор датасета

Первый этап - собрать набор данных, на котором будет обучена нейросеть для классификации сущностей. Тепловизионная матрица MLX90640 представляет собой матрицу 24×32 пикселя из 768 инфракрасных датчиков. Каждый из датчиков измеряет температуру в своей точке поля зрения, благодаря чему два раза в секунду от MLX90640 по интерфейсу I2C можно получить полноценное тепловое изоброжение окружающего пространства.

В репозитории на GitHUB реализован скетч "01_MLX90640_collect_dataset", который реализует стриминг теплового изображения с матрицы MLX90640, благодаря чему тепловизор можно корректно навести на интересующий обьект и прозвести захват изображения.

Для обучения свёрточной нейросети потребуется собрать как минимум около 50 снимков на каждую категорию: человек, кошка и пустота.

Обучение свёртончной нейронной сети

Свёрточная нейронная сеть
Свёрточная нейронная сеть

В репозитории на GitHUB есть ноутбук "MLX90640-CNN-TFL.ipynb", в котором полностью реализован процесс обучения нейросети средствами библиотеки глубокого обучения TensorFlow, тут же давайте разберём ключевые этапы.

1) Загрузка данных
На этом шаге происходит базовая подготовка данных:
Загрузка тепловых матриц из папок dataset/cat, dataset/person, dataset/empty, преобразование файлов в массивы NumPy и формирование единого набора данных и соответствующих меток классов.

2) Масштабирование данных
Тепловизор MLX90640 возвращает тепловые матрицы размерности 24×32, где каждый элемент матрицы это температуры в градусах Цельсия, то есть float значение.

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

Каждое значение нормализуется в диапазон от –128 до +127.

3) Визуализация данных
Перед обучением важно убедиться, что данные корректны. Поэтому в ноутбуке выполняется визуализация тепловыз изображений 24×32. Отобразив нескольких образцов для каждой категории (кошка, человек, пустота), можно убедиться, что данные читаемы и различимы.

Этот этап помогает выявить ошибки: неправильный формат данных, перепутанные метки или некорректное чтение файлов.

4) Прописать структуру модели средствами TensorFlow
Далее создаётся архитектура свёрточной нейросети - это особый тип реализации искусственного интеллекта, который использует специальную математическую операцию, называемую свёрткой, для обработки данных из изображений. Свёртка выполняется путём перемножения двух матриц и получения третьей, меньшей матрицы.

Сеть принимает входное изображение и использует фильтр (ядро) для создания карты признаков, описывающей изображение.

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

Квантование модели

Квантование - это процесс преобразования весов модели из формата float32 в формат int8. Это уменьшает размер модели и ускоряет инференс модели в десятки раз. Такой формат значительно экономит память, что критич��о для микроконтроллеров. В итоге получается лёгкая и быстрая модель, пригодная для запуска прямо на ESP32.

После квантования модель сохраняется в формате TensorFlow Lite, а затем конвертируется в C-массив, который в свою очередь можно загрузить в память ESP32 и после компиляции и загрузки прошивки получить полностью автономную систему для стриминга теплового изображения с определением в реальном времени того, какие сущности попали в поле зрения тепловизора. Данный скетч можно найти в репозитории на GitHUB "02_MLX90640_CNN_TFL".

Комментарии (1)


  1. JBFW
    26.11.2025 16:16

    Тема интересная, но здорово напоминает известный анекдот:

    -- Сегодня - мастер-класс по рисованию совы: берем лист бумаги, карандаш, аккуратно кладем лист на стол, берем карандаш в правую руку, и рисуем сначала один кружочек, а потом другой.
    А потом рисуем остальную сову.

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