Pull to refresh

Comments 84

Идея классная, но не проще было бы поставить температурный датчик, и ориентироваться по нему?
А вы знатный тролль, хотите инвалидировать всю статью одним вопросом? Человек перед Вами душу раскрыл…
На самом деле, метод подходит для считывания любых числовых показаний, и именно об этом здесь речь. А чем можно было бы лучше сделать — за пределами статьи. Как автор указал, совсем проще взять готовый счетчик, который умеет в цифре отдавать показания.
да я троллить не собирался, просто в новой квартире хочу сделать «умный дом». но так как счетчик газовый уже стоит, то менять его на другой не собирался, но вот использование температурных датчиков для контроля работы котла есть в плане.еще в котле есть RS-232, ищу инфу о возможности управления и контроля через него.
Та же история, счетчик стоит от застройщика, менять на свой резона нет, поэтому и изголяюсь. Котёл-то у меня тоже умный, регулировать мощность в зависимости от температуры теплоносителя и комнатных датчиков температуры умеет, но это ни разу не контроль наличия газа в трубе.
Но котел то умеет контролировать отсутствие газа. Как написано в доках на мой — при отсутствии газа он даже не будет зажигать горелку. Значит можно и с него получать эту информацию. Другое дело что Ваш способ позволяет получать данные со счетчика для оплаты, не подходя к счетчику. Что было бы удобно в моем случае, когда счетчик находится за 1000 км, и цифру в квитанции ставлю наобум :)
По идее да, можно выцепить из котла эту информацию, но для этого нужно дополнительное оборудование. Глянул для своего котла: LAN адаптер — 250 евро, GSM адаптер — 350 евро. А у меня ещё так вышло, что рядом с котлом ни LAN, ни 220В розеток нет.
А что за модель котла? И почему нет 220 от чего он питается?
Vitopend 100. Котёл напрямую к проводу подключен, нет розетки 220, чтобы подключить ещё что-нибудь для передачи информации.
Удалось вытащить инфу из котла? У самого такой же и дом, плюс куча опыта с электроникой и софтом.
Имеется в виду наколхозить свой адаптер взамен штатного за 250 евро? Нет, этим я не занимался.
Братцы, признаюсь сразу: с котлами дел не имел, но рискну предположить, что по ту сторону RS-232 (если это он) м.б. микроконтроллер, одна из задач которого — аварийная защита; т.е. будьте внимательны, неверным движением можно вывести систему из строя или чего похуже, да хранит Бог ваши семьи и умные дома.

Еще такие системы могут иметь RS-485 (брутальный вариант RS-232, электрически несовместим, нужен конвертер интерфейсов). Также легко м.б. и TTL UART (это антипод 485-го; конвертер на USB можно сделать из переходника RS232-USB). И если там именно RS-485, больше шансов получить телеметрию в готовом виде. Вообще программирование МК — это очень увлекательно, но с точки зрения бытовой безопасности мне в такой ситуации спалось бы спокойнее именно с распознаванием изображений.

В любом случае это территория пром. электроники, без документации лучше с такими девайсами не шутить. И к Интернету если подключать, то только через оптический симплексный интерфейс (который аппаратно только в одну сторону работает:) И все равно подумать о том, кто кроме вас может использовать информацию с датчика и с какими намерениями…

Резюме: автор, гениально используете хлам, искренне уважаю подход!
Во-во, абсолютно согласен, подключать какие-то свои поделки к дорогой электронике я не рискнул. Накроется потом котёл от этого хэндмэйда медным тазом, вот тогда и будем бюджеты считать.
Поэтому либо специально для этого разработанное оборудование (а оно стоит денег), либо вот так топорно через фото, зато безобидно. Если что-то и накроется, так только мой телефон от слишком частого фотографирования, но его не жалко, выбросил, да другой поставил, софт-то уже написан.
Тоже вариант. Надо только не забывать, что дом имеет довольно большую теплоёмкость, при отключении отопления остывать он будет день, может два, в зависимости от температуры за бортом. Датчик надо тогда лепить на какой-нибудь из радиаторов в самом холодном углу.
При этом всё равно как-то нужно решать вопрос с передачей показаний этого датчика в Интернет, да и анализ расхода газа не получится сделать.
Датчик можно установить на трубу сразу после котла.
Это смотря где котёл стоит, если в тёплом углу, то когда он остынет, может быть уже поздно.
А какая температура воды на выходе из котла, когда он нагревает воду?
Смотря как отрегулировать, может до 40 греть, может до 80.
Значит, можно обнаружить, что если в течении определенного времени температура датчика не доходила до 40 градусов, то котел перестал работать.
Мысли в воздухе витают. Не первый раз замечаю. Месяц назад тоже размышлял, что бы такой проект запилить. А тут раз, и уже кто-то реализовал!
Хо! Так я не один месяц размышлял, прежде чем запилить.
Охотно верю. Дьявол в мелочах. Вы показали довольно много подводных камней. Предложение по поводу совершенствования съема показаний. Они изменяются последовательно. Хотя у верен, что и так хорошее качество. Но скорее всего вы и так где то это учли, тогда мой пардон :)
Сначала думал учитывать, что каждое последующее показание должно быть больше предыдущего, это помогло бы инвалидировать некоторые не верно распознанные показания. Но по факту вышло, что алгоритм вообще не даёт неверных результатов, либо распознаёт верно, либо не распознаёт совсем. Причём процент распознавания близок к 100, неудачные фото можно просто выбрасывать без ущерба результату.
image

Рядом с 9-кой силуэт кого-то с косой.
все верно, это предупреждение: «я — газовый котел, могу убить»; см. комментарий выше. Да хранит Бог ваши дома и семьи, дорогие друзья.
если вдруг так сложилось, что мы решили всей семьей поехать в отпуск, а на дворе зима, хорошая такая, чтоб -20°C, то последствия могут быть плачевными.
Это какими? Не знаком со спецификой таких обогревателей, но если имеется в виду только «в доме будет очень холодно», то на «плачевные» это никак не тянет.
Замерзнет то что в трубах. Трубы лопнут. Капремонт системы отопления, а может и еще чего.
интересно!
наверное, можно было бы взять более серьезный classifier и фичи (SVM+HOG) и не мучиться с определением местоположения циферблата и тп.
Чтобы не подбирать параметры бинаризации можно воспользоваться адаптивной бинаризацией Otsu:

# Otsu's thresholding after Gaussian filtering
blur = cv2.GaussianBlur(img,(5,5),0)
ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

Кстати, а качество/скорость распознавания цифр не будет выше, если использовать Tesseract API?
UPD:
Самый большой контур это и есть наша цифра, выбросим всё, что лежит за его пределами с помощью наложения маски

Данный этап можно опустить и сразу обрезать большой контур по краям
Я этого и пытался добиться, собственно. Может тогда подскажете, какой функцией это сделать проще, я просто не спец в OpenCV, это мой первый опыт.
Или имеется в виду, что можно сразу обрезать по описывающему прямоугольнику? Тогда в него может попасть ещё какой-то дополнительный шум, оказавшийся рядом, чего не очень бы хотелось.
Пробовал через Otsu, но это не то немного. На сколько я понял, он просто угадывает границу, по которой нужно делить на белые и черные пиксели, а используемый мной адаптивный алгоритм применяет разные пороговые значения а разных областях изображения, что важно при неравномерной освещённости циферблата.

Tesseract API не пробовал, но у меня особо не было задачи оптимизировать скорость, 7 цифр за полчаса — не такой большой поток. Не говоря уж о том, что на непосредственно распознавание уходит совсем малая часть времени работы, основные времезатраты — это работа с Google Диском, потом вырезание, и только потом распознавание.
Такой подход хорош, когда в разных частях изображения находятся объекты с разной средней интенсивностью и важно учитывать их локальные гистограммы для того, чтобы их сохранить после бинаризации. Но в Вашем случае объект, который нужно сохранить только один, а все остальное лишь блики и шум. Можете выложить результат с Otsu и без?
Вы правы, что для конкретного изображения, которое рассматривается в данной статье, подойдёт и алгоритм Otsu. Но как раз потому, что оно очень удачное и не имеет бликов:

Адаптивный:

Otsu:

Otsu даже чуть-чуть получше выглядит, так как остаётся меньше шума.
Гистограмма:


Но если взять изображение с бликом (а пока я не довёл до ума конструкцию со вспышкой, таких было очень много):

то адаптивный алгоритм с ним также справляется нормально:

а у Otsu полный провал:

Гистограмма:

Теория как раз говорит, что Otsu хорош на изображениях с двухпиковой гистограммой, а блик добавляет пики где-то по середине.
а можно удаленное может быть переключение, чтоб никого не парить.
самый простой способ на контакты вибромоторчика мобилы ставится реле, оно и включает ваш котел.
А что-то нигде не могу найти, как себя ведут котлы из бюджетного сегмента при отключении газа? Как-то не задумывался никогда об этом, а сейчас тестировать — домашние не оценят.
Мой перестаёт работать и начинает показывать ошибку. Чтобы заработал дальше, его надо выключить и включить заново.
Шикарно, спаибо!

А нельзя ли обучить алгоритм распознавать «переходящие» цифры? Наделать там паттернов с разным углом поворота, чтобы распознавалось в большую или меньшую сторону?
Можно, но мороки много, а выхлоп в моём случае того не стоит. Процент таких показаний близок к нулю, проще просто игнорировать.
Делать несколько снимков с промежутком и выбирать из них нормальный
Да там механизм и так быстро переворачивает (наравне с самым младшим разрядом), так что вероятность действительно мала.
О, спасибо, что напомнили сдать счетчики — сегодня последний день! :)
Это круто! И чудовищно нерационально. Я не могу с ходу придумать более сложное решение для поставленной задачи, в то время как очевидна куча более простых.
Если речь идёт только о задаче обнаружения перебоя с подачей газа, то да, много более простых решений. Но мне ещё было интересно провести анализ потребления газа в зависимости от времени суток, температуры за окном, настроек котла, бойлера, то есть, когда нужны реальные показания счётчика на протяжении большого времени. Или и для этого у Вас тоже есть куча простых решений? Приведите тогда тут парочку.

Для меня также одним из важных фактором было использование имеющегося и валяющегося без дела барахла.
Что ж, такой важный фактор, как использование имеющегося барахла, вполне оправдывает даже картонную коробку, примотанную скотчем к счётчику :)
Вы могли бы написать хоть один простой варинат со обычным счетчиком?
Вебкамера и скриптовый FineReader?
И сколько стоят вебкамера и особенно FineReader? Автор же пишет — сделал из того, что было под рукой, за минимальную цену.
Вебкамера стоит дешевле даже разбитого SGS3. Насчёт лицензирования FR не подскажу, но если руководствоваться практикой, принятой на Хабре, и включить в цену затраченное время, то может и лицензия дешевле выйдет.
Имея хобби покупать на ebay разные битые телефоны и собирать из них работающие, я легко нашел у себя в загашнике материнскую плату от sgs3 с неработающим микрофоном (~$10), а также б/у-шную камеру (~$10) и китайскую батарейку (~300р). Также для удобства крепления батарейки к плате использовал фрейм с битым дисплеем.
Сначала думал обойтись только материнской платой и камерой, но оказалось, что даже при подключении к зарядке плата не включается без батарейки, поэтому пришлось ещё добавить фрейм и батарейку. Но и в этом случае бюджет получился порядка $30


Разрешение камеры SGS3 — 3264x2448 (8 Мп), веб-камер аналогичного разрешения просто нет, ближайшее разрешение — 5 Мп, и такие камеры стоят порядка 2 т.р.

ABBYY FineReader 12 Professional (бессрочная лицензия) — 4490 руб. (Версия для скачивания)

Таким образом, бюджет предлагаемого вами решения составляет примерно 6.5 т.р. и не избавляет от программирования.
Если есть готовность потратиться и не хочется ничего программировать, то вот вам ещё вариант:
~$0.001 за распознавание капчи, с периодичностью съемки раз в полчаса в год получается где-то $20.


По приведённой ссылке только NAKATOMI имеет матрицу на 5MPx, на двух других — маркетинг, на самом деле там 2MPx матрица с интерполяцией. У меня у самого Logitech B910 HD стоит, в своё время выбирал её как одну из самых лучших 2MPx вебок.
Спасибо, интересный вариант.
Самый очевидный альтернативный способ: газ, двигаясь по трубе, создает вполне ощутимые акустические вибрации. Простейший датчик их отлично отловит. Дальше нужен простой микроконтроллер, который реагирует на долгое отсутствие звука в трубе.

А лучше заодно сделать еще датчик затопления, пожарную сигнализацию и все это подключить к одному модему, который будет слать аварийные смс-ки.
Современный смартфон — мощное устройство и для обработки информации, и для сетевого взаимодействия, и для оповещения по GSM/GPRS; а к нему через USB можно подключить МК с датчиками, который в сетевых задачах как раз крайне неуклюж. В этом смысле имеем широкий простор для творчества в смежной области — программирование МК в интеграции с Android, обе платформы достаточно открыты и полны примеров. Еще раз респект автору за умелое использование хлама.

Но если выводить систему безопасности в Интернет (особенно на ломаном Android), то очень, очень аккуратно. Даже если дальше домашнего WiFi его никто не увидит, не оставляйте ничего без пароля. Берегите себя, свои семьи и имущество;)
Автор, а не проще ли будет зафиксировать смартфон (чтобы области снимка не съезжали) и просто сравнивать изменения второй (и третьей для контроля) цифры сзади? Как hash-суммы определённой области фотографии, приведенной в чёрно-белый формат.
А показания можно и самому распознавать. :-P
Статья хорошая, спасибо. Какой процент ошибок от освещения? Ноль?
Автор, а не проще ли будет зафиксировать смартфон (чтобы области снимка не съезжали)

По-моему нет, это значит, что если я чуть-чуть задену что-то и сдвину, то придётся править программу, не надо мне такого счастья.
Какой процент ошибок от освещения? Ноль?

Поначалу были, но с помощью скотча и бумаги я доработал конструкцию так, чтобы вспышка била не напрямую, а отражаясь от боковой стенки, а внешнее освещение внутрь коробки не попадало. После этого проблемы с бликами и фокусировкой исчезли, теперь ошибки даёт только смена цифр.
А если вырезать фрейм из картонки черного цвета, или наоборот белого, чтобы дырки в нем были под дисплей счетчика, и там еще дырку под светодиод, что отражает аварийное состояние ( мигает как написано на вашем счетчике )? То есть зачем программно обрабатывать специфику конкретной задачи, когда можно обойтись картонкой? А в дырку для дисплея счетчика налепить какую-нибудь противоотражательную пленку.
картонка с дыркой сама по себе проблемы не решит, возможно упростит процесс поиска, но суть та же останется.
Да, я именно про упрощение поиска индикатора. Если сделать черный фрейм, и еще зеленую пленку светофильтр поставить (чтобы сделать красный фон черным в последних сегментах), то можно будет алгоритмом искать оставшиеся зеленые цифры, так как всего остальное полагается будет темным.
UFO just landed and posted this here
У нас тоже проблемы с электричеством бывают гораздо чаще, чем с газом. Но к счастью после отключения и включения электричества котёл сам включается и начинает работать, а вот если «мигнёт» газ, то не начинает.
Кстати, «мигание» газа недопустимо ни по каким нормам. Можно смело жаловаться куда надо.
Это хорошо, что котлы умные, а если кто поставит себе АОГВ, у которых защита через год работать перестаёт? Это всё, конец: погасло пламя, подачу возобновили, газ пошел. Хорошо, если вытяжка нормальная…

У нас таких перебоев нет. В случае любых ТО на линии за неделю вывешивают объявления, а за час перед работами ещё обходят квартиры или домовладения.
А косяки случаются, особенно в сильный штормовой ветер у некоторых в домах АОГВ задувает. Просто сбивает пламя обратной тягой, газ продолжает идти…
Кроме ТО ещё бывают аварии, о них за неделю не предупреждают. Я не говорю, что часто, но у нас за последний год два раза отключали газ.
Спасибо, классная статья! Так можно, например, распознавать RSA ключи на брелках-генераторах.
Да, точно, много похожего, жаль что я не увидел этой статьи раньше, это бы сильно упростило жизнь.
Который год мечтаю о таком же софте для аналоговых шкал…
Почти все аналоговые шкалы — это миллиамперметры. Не вижу проблем.
Чем можно контролировать (сбор с заданными промежутками времени и хранение) показания с водосчётчиков Valtec с импульсным выходом (VLF-R-UNIVERSAL I)?
UFO just landed and posted this here
А в более сложном случае?
Все варианты предполагают нечто DIY-ориентированное без возможности приобрести готовое решение в магазине?
UFO just landed and posted this here
Спасибо, не сочту. В первом приближении бюджет не лимитирован. (Жаба, молчать). Каким поисковым запросом Вы выпытали эту ссылку у Яндекса? :)
UFO just landed and posted this here
Вашу бы энергию — да в мирных целях :)

Думаю, Вам помог бы старенький комп с веб-камерой и электромагнитом, который по команде тыкает кнопку. А распознавание, разобранный телефон и кастомные прошивки — это изящества от лукавого.

Но всё равно, было интересно читать, как забивать пинцеты воробьями, респект.
Снимать показания с счетчиков можно намного проще. Из инструкции на ваш счетчик:
Отсчетное устройство показывает объем газа, прошедшего через счетчик. Первый роликовый барабан сумматора снабжен отражающей меткой, предназначенной для автоматического снятия показаний счетчика с помощью оптических датчиков.
Автору искреннее уважение за идею и умение комбинировать работы по железу и софту.

По сути, продолжая тему использования старых телефонов для всего и вся — можно делать программный комплекс для соединения таких решений для приложения к умному дому «из газет и веток» :). Ни стеб ни в коем случае — сам люблю подобные решения — из них можно вырастить что-то большее. Например, ваша реализация — это частный вид программного датчика, который может быть подсоединен к общей системе. Сюда же старый телефон в качестве детектора движений. Телефоны — теже компьютеры, только маленькие. Тут основной вопрос в надежности таких решений.

И вместо телефонов также можно использовать микрокомпьютеры, которые сейчас производятся китаем в больших количествах.
UFO just landed and posted this here
Старый телефон — абсолютно нормальная идея. Куча мелких стартапов рождено на идее использования старого телефона, начиная от скрытой видеокамеры и заканчивая GPS трекером.
Класс! И Б\У телефон пригодился.
Спасибо за алгоритм распознавания.
Задумываюсь над тем, чтобы сделать вторую версию Вотериуса с видеокамерой для счётчиков без проводов. Есть некая камера ov7670 640x480, подключаемая к Arduino/ESP…
Sign up to leave a comment.

Articles