В данной реализации используется модуль ESP32-CAM: http://ali.pub/3f04uj
И программатор для заливки прошивки: http://ali.pub/3f156r
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Существует один проект, который называется AI-on-the-edge-device: https://github.com/jomjol/AI-on-the-edge-device В котором реализована возможность по изображению с помощью машинного зрения распознать цифры на счетчиках газа, воды или электроэнергии. Главное чтобы цифры на счетчике были аналоговые.
Реализовано все на очень популярном модуле ESP32-CAM. Данный модуль очень популярен тем, что он не дорого стоит не смотря на то, что он имеет на борту у себя камеру.
В общем в этой статье я и попробую рассказать, как реализовать этот проект.
Фокусировка камеры.
Для начала нам нужно отфокусировать камеру на модуле. Дело в том, что у данной камеры из коробки фокусировка от 40см и в бесконечность. А нужно сделать так, чтоб камера хорошо различала цифры счетчиков на расстоянии 5-10 см.
На фокусное кольцо камеры капают клей, чтоб фокусировка не сбивалась. Так вот нам нужно этот клей убрать, чтоб получилось покрутить объектив для фокусировки. Это не сложно сделать ножом.
собственно на этой картинке и показано, где сам клей.
Лучше всего настраивать фокус уже не поредстенно с залитой прошивкой и установленной камерой непосредственно на счетчик.
Установка прошивки.
Прошивка устанавливается довольно просто. Достаточно скачать архив проекта со страницы github, которая указана в начале статьи. Далее запустить программу FLASH_DOWNLOAD TOOLS. Ссылку на скачивание можно найти у меня в статье про game boy на ESP32.
Запускаем NES игры на m5stack, gameboy faces. Эмулятор игр денди на ESP32.
Далее запускаем программу, и в ней выбираем 3 файла для загрузки с расширением .bin из папки firmware архива.
Обратите здесь внимание на правый столбец с цыфрами. Это Адреса куда загружать .bin файлы. Их обязательно указывать так как показано на картинке.
Для прошивки esp32-cam к программатору подключаем по следующей схеме и выставляем перемычку.
Ну и выбираем по какому ком порту утройство подключено к ПК в программе FLASH_DOWNLOAD TOOLS и Нажимаем кнопку “START”.
Ждем окончания загрузки и все, прошивка у нас загрузилась.
Теперь нам нужно взять microSD карточку. Проект работает с картами до 32гб включительно. Но с 32гб могут быть проблемы. Форматируем флешку и закидываем из архива проекта все содержимое их папки SD-card.
В этом содержимом ничего не трогаем, кроме файла wlan.ini . В нем указываем SSID и пароль от wi-fi сети к которому будет подключаться устройство.
Все, после этого отключаем ESP32-CAM от сети, убираем перемычку и запускаем заново.
Настройка программы оцифровки значений счетчиков.
После первого включения вводим Ip адрес устройства в web браузере и попадаем на первую страницу.
Это вступительное окно, тут мы ничего не делаем, просто нас ознакамливает с тем, что нужно сделать. Нажимает “NEXT“.
В следующем окне, нам нужно сделать снимок счетчика с ESP32-cam нажав кнопку “Create New Reference” и Выровнять цифры ровно по горизонтальной сетке.
Чтоб повернуть изображение, нужно изменять градусы(цифры) в “Pre-rotate Angle“. После выставления снимка нажимаем “Update Referense Image” потом “NEXT“.
В этом окне нам нужно выбрать 2 точки Referense 0 и Referense 1. Эти точки – это четкие изображения, по ним будет ориентироваться система. Это своего рода координаты.
Выбирать их необходимо просто выделив область на снимке как показано на скрине:
После чего нажимаем кнопку “Save all to Config.ini” и нажимаем кнопочку “NEXT“.
В следующем окне, нам нужно выделить цифры которые мы будем считывать. Цифр может быть сколько угодно. Например если нам нужно добавить еще цифру, мы нажимаем кнопку “New ROI (after current)” и задав имя цифры сможем выбрать область еще одной. В моем примере счетчик новый и я решил выделить 3 цифры. Выглядит это так:
После этого сохраняем кнопкой “Save all to Config.ini” и нажимаем кнопочку “NEXT“.
На следующей странице Выбираем значения после запятой. Система их считает по крутилкам с цифрами. На моем счетчике она всего одна и показывает десятитысячные значения. В общем она для меня бесполезна. Но для примера добавлю и ее.
По аналогии с пред идущими значениями выбираем область:
После этого сохраняем кнопкой “Save all to Config.ini” и нажимаем кнопочку “NEXT“.
В следующем меню у нас открываются какраз таки значения Config.ini. Проверяем здесь все, убираем или ставим галочки на пунктах которые нам интересны. НАпример тут можно подключить сервер MQTT для отправки на него данных. Или включить расширенный лог.
Но для начала давайте ничего менять не будем и нажмем “Update Config.ini” и нажмем “NEXT“.
И открывается последняя страница настроек. Здесь мы просто нажимаем кнопку “Leave Setup Modus and Reboot to Normal“.
После чего у нас перезагрузится устройство и уже будет запускаться другой web интерфейс программы.
Выглядит он следующим образом:
Здесь какраз-таки В правом столбце указаны значения которые считал модуль машинным зрением. В моем случае это 204.64 ( запятая не там где нужно. Но это потому что я сам выбрал для наглядности больше цифр, захватив одну крсную после запятой).
Как видите все очень даже хорошо. Так-же в верху есть пункты меню, через которые можно производить опять настройки все те которые мы уже делали. И так-же смотреть логи, перезагружать устройство.
Отправка данных на сервер MQTT (В моем случае на сервер Home Assistant с сервером MQTT на борту).
Итак значения мы уже получаем, это очень хорошо и сопоставимо магии. Но данные мы и по фото могли бы посмотреть сами. Хочется чтоб эти данные куда-то отправлялись и мы их накапливали и систематезировали.
Для этого мы сейчас настроим в файле Config.ini графу MQTT. Она у меня выглядит следующим образом:
URi: – тут указываем MQTT сервер и порт к нему 1883. У меня MQTT сервер это сервер с Home Assistant. Как установить сервер MQTT в Home Assistant я рассказывал в видео и статье про подключения Zigbee стика тут:
MainTopic – это топик куда будут отправляться данные на сервер MQTT. У меня это powermeter(потому что такой был в примере). И полный топик тогда будет звучать так:
powermeter/main/value
Потому что часть /main/value ( добавляет сама прошивка). Это Важный момент, так как пока я это не узнал, не мог понять почему в топик powermeter не приходят данные.
ClientID – это произвольный Id. Он не должен повторяться с каким-либо устройством. Он должен быть уникальным.
user и password – это логин и пароль от сервера MQTT.
Далее я взял готовый скрипт и добавил его в Home Assistant в файл configuration.yaml. Взял я его от сюда: https://github.com/jomjol/AI-on-the-edge-device/wiki/Integration-Home-Assistent
Но он тут слишком большой оказался и некоторые моменты мне не нужны. Я его сократил до вида:
sensor:
- platform: "mqtt"
name: "Main meter AIOE"
state_topic: "powermeter/main/value"
value_template: "{{ value }}"
unit_of_measurement: "m3/h"
icon: "mdi:flash"
И Выглядит это все на главное странице “Обзор” в Home Assistant после добавления следующим образом:
Ах да, совсем забыл, крепление для водяного счетчика я напечатал на 3д принтере. Модель взял отсюда:
https://www.thingiverse.com/thing:4573481
На этом в принципе все. Все эти действия я совершил еще в видео: