Zählerstand mittels OCR und altem Handy ermitteln

Begonnen von ska, 03 Januar 2020, 15:06:03

Vorheriges Thema - Nächstes Thema

ska

Liebe fhem Community,

ich lese hier passiv bereits viele Jahre mit und habe in diesem Forum immer Antworten/Codeschnipsel etc. gefunden die mir geholfen haben mein jeweiliges Problem zu lösen. Heute möchte ich der Community nun auch mal etwas zurück geben und hoffe, dass es jemand gebrauchen kann.

Ich habe es nach viel herumgebastel geschafft mit einem alten Smartphone automatisch Bilder von meinem Gaszähler aufzunehmen und diese in fhem (DbLog) zu verarbeiten. Das ganze basiert auf dem emeocv Projekt von Martin Kompf (https://github.com/skaringa/emeocv) und dessen Verbesserung (https://github.com/komw/emeocv2).

Nachdem man die einzelnen Digits trainiert hat, hat das bei mir schon manchmal funktioniert - jedoch wurden fast immer nur einzelne Ziffern erkannt und andere gar nicht. Da sich der Abstand der Ziffern bzw. deren Position im Bild nicht verändern habe ich den Code soweit verändert, dass alle mittels OCR erkannten Ziffern übernommen und an die richtige Position geschrieben werden. Die übrigen Ziffern werden einfach von der letzten funktionierenden Messung übernommen. Anschließend wird eine Plausibilitätsprüfung gemacht. Dafür wird die Rate bestimmt mit der sich der Zählerstand verändert hat (also Einheiten pro Zeit). Ist dieser Wert positiv und unter einer konfigurierbaren Obergrenze ("validRate" in config.yml) wird der Wert akzeptiert. Außerdem habe ich den Code soweit angepasst, dass die Daten dann direkt in eine mysql Datenbank geschrieben werden, sodass man direkt die DbLog Datenbank ansprechen und in der "history" Tabelle schreiben kann.

Der C++ Quellcode hängt dran muss kompiliert werden. In fhem sollte man einen Dummy erstellen und ich empfehle zu Testzwecken auch eine extra DbLog Datenbank dafür zu nutzen. In der Datenbank sollte schon ein Eintrag von dem Dummy sein damit die Software sich den letzten bekannten Wert suchen kann - also am besten den Zählerstand da einmal von Hand eingeben. Konfiguriert wird sonst alles über die config.yml Datei.

Die Bilder müssen im png format sein und benannt werden nach dem Schema YYYMMDD-HHmmss.png
Das mache ich automatisiert mit automagic und lade sie per ftp hoch. Anschließend wandle ich das jpg per imagemagick in png um.

Der Hauptteil des Programs stammt von Martin Kompf und ist sehr ausführlich dokumentiert: https://www.mkompf.com/cplus/emeocv.html

Ich bin kein Programmierer und habe das erste Mal etwas mit C++ gebaut. Daher gibt es mit Sicherheit noch viele Bugs. Trotzdem wollte ich euch das nicht vorenthalten.

Viel Spass beim Basteln
Sören

Prof. Dr. Peter Henning

Diskussion und Link schon in den SmartHome Hacks 2016, Seite 51/52.

LG

pah

ska

Danke für den Hinweis. Ich hatte bei meiner Suche nur 2 Einträge im Forum gefunden in denen emeocv erwähnt wurde, aber keinen in dem es jemand erfolgreich umgesetzt hat.
https://forum.fhem.de/index.php?topic=45745.0
https://forum.fhem.de/index.php?topic=76522.0
Mit den Änderungen von mir sollte es nun direkt mit fhem zusammen funktionieren.

Grüße
Sören