
Сегодня я хочу показать и рассказать вам, как, подключив к 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".
JBFW
Тема интересная, но здорово напоминает известный анекдот:
-- Сегодня - мастер-класс по рисованию совы: берем лист бумаги, карандаш, аккуратно кладем лист на стол, берем карандаш в правую руку, и рисуем сначала один кружочек, а потом другой.
А потом рисуем остальную сову.
Я-то уже собрался поучиться, как приделать распознавание кошек под дверью, дабы отделить своих от гостевых...