<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ssocr on Блог Агапова Максима</title><link>https://magapov.nmph.ru/tags/ssocr/</link><description>Recent content in Ssocr on Блог Агапова Максима</description><generator>Hugo</generator><language>ru</language><lastBuildDate>Mon, 18 Nov 2019 07:37:05 +0000</lastBuildDate><atom:link href="https://magapov.nmph.ru/tags/ssocr/index.xml" rel="self" type="application/rss+xml"/><item><title>SSOCR. Оцифровка показаний приборов</title><link>https://magapov.nmph.ru/2019/11/ssocr.html</link><pubDate>Mon, 18 Nov 2019 07:37:00 +0000</pubDate><guid>https://magapov.nmph.ru/2019/11/ssocr.html</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on">
&lt;div style="text-align: justify;">
Навеяно &lt;a href="https://magapov.nmph.ru/2018/11/domoticz_8.html" target="_blank">темой&lt;/a> про мониторинг напряжения. А что делать, если нет таких ИБП? Покупать три штуки на каждую фазу? Бред конечно. Хотя бы для зрительного контроля, установлен РН-106, или ВР-М03-1?&amp;nbsp;&lt;/div>
&lt;div style="text-align: justify;">
&lt;br />&lt;/div>
&lt;div style="text-align: justify;">
Ещё с тех времен, когда техкомната не была даже зашита гипсокартоном, уже висела малинка с вебкамерой. чтобы смотреть что там происходит. А почему бы не снимать показания РН в реальном времени, и оцифровывать их в Domoticz?! Если исхитриться, то можно захватить в кадр и текущую температуру теплоносителя, которую показывает котел!&lt;/div>
&lt;div style="text-align: justify;">
&lt;br />&lt;/div>
&lt;div style="text-align: justify;">
Что надо? Собственно вебкамера, направленная на щит, по возможности сфокусированная на реле с показаниями. ffmpeg, для записи снимков в формате jpg и программа ssocr для распознавания изображений.&lt;/div>
&lt;div style="text-align: justify;">
Снимки делаю при помощи ffmpeg, на максимальном разрешении, возможном для камеры Microsoft HD3000.&lt;br />
&lt;pre>&lt;code class="bash hljs">ffmpeg -f video4linux2 -input_format mjpeg -video_size 1280x720 -i /dev/video0 -vframes 1 -f mjpeg /tmp/snapshot.jpeg&lt;/code>&lt;/pre>
Далее, с ssocr пришлось &lt;a href="https://www.unix-ag.uni-kl.de/~auerswal/ssocr/" target="_blank">вникать&lt;/a>.&lt;/div>
&lt;div style="text-align: justify;">
Главное - это надёжно зафиксировать камеру, чтобы изображение было максимально статично. Иначе будет сбоить ssocr&amp;nbsp; и выкидывать фокусы.&lt;/div>
&lt;pre>&lt;code class="bash hljs">sudo apt-get update
sudo apt-get install libx11-dev
sudo apt-get install libimlib2-dev
git clone https://github.com/auerswal/ssocr.git
cd ssocr
make&lt;/code>&lt;/pre>
Скопируем исполняемый файл &lt;br />
&lt;pre>&lt;code class="bash hljs">sudo cp ./ssocr /usr/local/bin/ssocr&lt;/code>&lt;/pre>
&lt;div style="text-align: justify;">
!!! Буду разбирать весь процесс, чтобы было яснее) И ещё будут только скриншоты, чтобы ничего не копипастили в консоль. а сами набирали)&lt;/div>
&lt;div style="text-align: justify;">
Приступаем. Исходное изображение.&lt;/div>
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/IMG_20191114_095044.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://magapov.nmph.ru/img/IMG_20191114_095044.jpg" width="640" />&lt;/a>&lt;/div>
Как видите, крупноватый кадр для теста)&lt;br />
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-14-37-10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="218" data-original-width="1373" height="100" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-14-37-10.png" width="640" />&lt;/a>&lt;/div>
Ок, тут понятно, вроде ругается, что нашёл только одну цифру. Укажем параметр -d -1 чтобы показал все цифры (-d, --number-digits=# number of digits in image (-1 for auto))&lt;br />
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-15-39-10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="218" data-original-width="1373" height="100" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-15-39-10.png" width="640" />&lt;/a>&lt;/div>
Хмм, 8. Что значит 8? Добавим наконец вывод отладочной информации -D, в виде файла testbild.png (да, имя выходного файла можно не указывать, testbild.png оно по-умолчанию)&lt;br />
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-15-46-51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="182" data-original-width="1373" height="84" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-15-46-51.png" width="640" />&lt;/a>&lt;/div>
Опять "8". Посмотрим наконец testbild.png&lt;br />
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-15-47-40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="727" data-original-width="905" height="513" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-15-47-40.png" width="640" />&lt;/a>&lt;/div>
&lt;div style="text-align: justify;">
Ага, уже повеселее. Что значат эти цветные линии?&lt;/div>
&lt;div style="text-align: justify;">
&lt;i>"In this image the left border of a digit is represented by a red column, the right border as a blue column. Horizontal green lines of digit width show connected vertical digit parts."&lt;/i>&lt;/div>
&lt;div style="text-align: justify;">
Понятно, значит всё это изображение, ssocr расценил как одну цифру, 8. Попробуем сузить область для поиска цифр при помощи параметра crop. Нам потребуются координаты начала обрезания и ширина\высота изображения. Открываем изображение через GIMP, ставим курсор на левый угол дисплея первого РН, записываем (1320*1288).&lt;/div>
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-15-52-22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="903" data-original-width="1077" height="536" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-15-52-22.png" width="640" />&lt;/a>&lt;/div>
&lt;div style="text-align: justify;">
Ставим курсор на правый нижний угол третьего РН и записываем координаты (2330*1420). Теперь вычитаем от них координаты первого измерения и получаем ширину\высоту вырезанного изображения (1010*132). Duuuhhh!&lt;/div>
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-00-20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="218" data-original-width="1373" height="100" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-00-20.png" width="640" />&lt;/a>&lt;/div>
Ого! Понеслась! Сколько цифр!&lt;br />
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-01-31.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="276" data-original-width="905" height="194" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-01-31.png" width="640" />&lt;/a>&lt;/div>
&lt;div style="text-align: justify;">
Теперь появилась другая проблема. Вместо 3х цифр на первом дисплее, ssocr видит одну - 8. Дальше он не может разобраться что находится между дисплеями остальных РН. Попробуем поиграть с контрастом -t (--threshold=THRESH use THRESH (in percent) to distinguish black from white). По-умолчанию эта разница установлена в 50%. Попробуем по больше, 90.&lt;/div>
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-12-42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="218" data-original-width="1373" height="100" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-12-42.png" width="640" />&lt;/a>&lt;/div>
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;/div>
Странно, теперь видит только "-"&lt;br />
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-13-27.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="276" data-original-width="905" height="194" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-13-27.png" width="640" />&lt;/a>&lt;/div>
&lt;div style="text-align: justify;">
Нижнюю полосу видите? Вот тут он застрял. Мне потребовалось попробовать много вариантов со всеми параметрами чтобы сдвинуться с этого места. Оказалось, что по-умолчанию, передний план - черный, задний план белый. Если указать как надо, чтобы цифры ssocr увидел белыми, то всё встает на свои места!&lt;/div>
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-25-36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="218" data-original-width="1373" height="100" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-25-36.png" width="640" />&lt;/a>&lt;/div>
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-26-18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="276" data-original-width="905" height="194" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-26-18.png" width="640" />&lt;/a>&lt;/div>
Осталась дерзкая ".", которую можно исключить, указав выводить только цифры (-c, --charset=KEYWORD select recognized characters use -c help for list of KEYWORDS)&lt;br />
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-27-54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="218" data-original-width="1373" height="100" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-27-54.png" width="640" />&lt;/a>&lt;/div>
&lt;div style="text-align: justify;">
Ан нет, не то)) Теперь "-" превратилась в "_". Попробуем вообще игнорировать изображения, меньше 4 пикселей. Примерно на столько выглядит эта "_"&lt;/div>
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-40-18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="218" data-original-width="1373" height="100" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-40-18.png" width="640" />&lt;/a>&lt;/div>
Бинго!&lt;br />
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-41-15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="276" data-original-width="905" height="194" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-41-15.png" width="640" />&lt;/a>&lt;/div>
Теперь можно разбить это девятизначное число при помощи fold&lt;br />
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-47-38.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="218" data-original-width="1373" height="100" src="https://magapov.nmph.ru/img/D0-A1-D0-BD-D0-B8-D0-BC-D0-BE-D0-BA-D1-8D-D0-BA-D1-80-D0-B0-D0-BD-D0-B0-D0-BE-D1-82-2019-11-16-16-47-38.png" width="640" />&lt;/a>&lt;/div>
Есть конечно у этого варианта огромный минус, если камера дернется - всё встанет.&lt;br />
&lt;br />
Засунем эти показания в Domoticz. Создадим три датчика с типом Напряжение&lt;br />
&lt;div class="separator" style="clear: both; text-align: center;">
&lt;a href="https://magapov.nmph.ru/img/sensor-voltage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">&lt;img border="0" data-original-height="245" data-original-width="428" height="183" src="https://magapov.nmph.ru/img/sensor-voltage.jpg" width="320" />&lt;/a>&lt;/div>
Запишем его IDX, бла-бла-бла (см. как всё подготовить &lt;a href="https://magapov.nmph.ru/2018/11/domoticz_8.html" target="_blank">тут&lt;/a>)&lt;br />
Делаем исполняемым, добавляем в крон и смотрим, как обновляется напряжение.&lt;/div></description></item></channel></rss>