NEWS
Wasserzähler - Selfmade
-
Hi @ramon2krpi3,
the distorted image shows, that one of the reference is not found. In principle you choose the right one. The image looks a bit unsharp, maybe you could adjust the focus slightly.
You can also use the orginal pictures (without enhance), that will make the algo a bit more sensitive to illumination light, but might get a better recognition, as the autocorrelation will result in higher contrast.Two topics:
- You need to get ride of the refection at the digits, this will not work
- Why is your image off center? It looks like there are even better alignment options on the bottom.
Other topics are look good for the time beeing.
Hope that helps a bit.
Best regards,
jomjolP.S.: the reference are never shown in the ROI, this is still a to do.
Why is your image of center?
-
Hi @jomjol, luckily i just found the solution. Diving over the 1,000 thread post I have found the solution. The problem is that [alignment]
initial_rotation_angle = 92 cannot have a negative angle. The configurator "http://wasserzaehler.ignorelist.com" inserts the value in negative in the "config.ini" and therefore deforms. Just edit the "config.ini" and remove the negative signThe problem now is the digit recognition. I know I've to solve the reflection, but in the meantime I wanted to test the rest of the digits unaffected by the reflection. The first 5 should work. The third digit, 6, has a strange shape in the upper left corner and does not detect it, it assigns a 0. On the other hand, 9 sometimes detects it as 0 and other times as 6.
how can I get it to detect these digits?
Are they in a format recognizable by your trained system?
I am using the Train_CNN_Digital-Readout_Version_6.0.0.h5Regards!
-
Hi @ramon2krpi3,
first it looks like, you are using the "master" branch of the docker server. I suggest to update to the "rolling" version. Within this a much better trained cnn-file is available (v 6.2.0). Just to know: the format has changed from h5 to tflite.
That should already improve the recognition. If this is not enough, it might be necesarry to train your numbers.
Best regards,
jomjol -
Hi @jomjol, could anybody summarize the step by step migration to rolling version?
Thanks! -
@ramon2krpi3 This is how I did:
-
Download the raspi-rolling image: sudo docker pull jomjol/wasserzaehler:raspi-rolling
-
Over my old folders structure I created a new app folder and I copied my old /config & /log folders
-
I downloaded “Train_CNN_Digital-Readout_Version_6.2.0.tflite” and put it in “/home/pi/water-meter-system-complete/code/app/config/neuralnets”
-
I edited “/home/pi/water-meter-system-complete/code/app/config/config.ini” and changed the new Train_CNN tflite
[Digital_Digit]
names = D1, D2, D3, D4, D5, D6, D7, D8
modelfile = ./config/neuralnets/Train_CNN_Digital-Readout_Version_6.2.0.tflite
LogImageLocation=./log/digital_digit- I run the docker and it seems do it well:
pi@pi4:~ $ docker run -p 4000:3000 --mount type=bind,source=/home/pi/water-meter-system-complete/code/app/config,target=/app/config --mount type=bind,source=/home/pi/water-meter-system-complete/code/app/log,target=/app/log --memory-swap -1 jomjol/wasserzaehler:raspi-rolling
92.0
Start Init Zaehlerstand
Analog Model Disabled
Digital Model Init Done
Digital Model Init Done
Prevalue loaded from file: 00000690.0000
Wasserzaehler is serving at port 3000- When I ask for a reading “http://192.168.1.234:4000/wasserzaehler.html&full” the docker gives me this error:
Exception happened during processing of request from ('192.168.1.231', 59241)
Traceback (most recent call last):
File "/usr/lib/python3.7/socketserver.py", line 316, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python3.7/socketserver.py", line 347, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python3.7/socketserver.py", line 360, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python3.7/socketserver.py", line 720, in init
self.handle()
File "/usr/lib/python3.7/http/server.py", line 426, in handle
self.handle_one_request()
File "/usr/lib/python3.7/http/server.py", line 414, in handle_one_request
method()
File "./wasseruhr.py", line 37, in do_GET
GlobalError = wasserzaehler.CheckError()
File "/app/lib/ZaehlerstandClass.py", line 102, in CheckError
if self.readAnalogNeedle.GlobalError:
AttributeError: 'Zaehlerstand' object has no attribute 'readAnalogNeedle'I'm lost. Do I have to modify/install anything else?
I didin't do nothing whit Tensorflow. May I do anything to manage TensoflowLite?Regards
-
-
Hi @ramon2krpi3,
you run into a bug in the code. Disabling the "Analog Readout" did not work in this version due to an unknown bug. Seems you are the first one, who really used this feature.
I just corrected it and the Docker-Container is under construction. Should take another hour, than it should work.
Thanks for you support in the detailed error description, made my debugging much easier.Best regards,
jomjol -
Hallo zusammen,
hier ein Update zu meinem neuen Projekt. Die erste Beta-Version für den integrierten Wasserzähler ist funktionsfähig!
Hier mal ein Screenshot von der Benutzerschnittstelle:
Wie ihr seht, habe ich die verschiedenen Features der Bildaufnahme und Auswertung mit einer Web-Oberfläche verknüpft. Dass wird in Zukunft den Betrieb und die Anpassung des Servers deutlich vereinfachen und noch mehr Nutzern zugänglich machen.
Hier mal ein paar Key-Features:
- Webserver mit einfacher Oberfläche integriert - einfach erweiterbar (Idee: z.B. Bearbeitung der Config.ini direkt im Browser ?)
- Zusätzlich ein einfacher Fileserver für die SD-Karte (browse, upload, download, delete)
- OTA-Schnittstelle über Web-Interface, inkl. Reboot - kein Aus-/Einbau für Updates!
- Kamera, Bildbearbeitung & Ziffer/Zeiger-Erkennung alles auf dem ESP32
- Abwährtkompatibel (95%) zur Schnittstelle zu Bilderfassung (.../capture_with_flashlight), wie auch zum Dockercontainer (.../wasserzaehler.html)
- Systeme laufen alle parallel (Multitasking Programmstruktur). Damit könnt ihr auch erstmal die alten System unverändert weiter laufen lassen und alles parallel testen.
Einziger Nachteil: momentan dauert ein Auswertezyklus bei mir ca. 2.5 Minuten. Da ist noch viel Potential (>50%), aber für Just-In-Time Abfragen zu lange. Daher habe ich einen Scheduler implementiert, der zyklisch (z.B. alle 5 Minuten) die Auswertung macht und bei Abfragen den letzten Wert meldet. Konsistenzchecks, analog zum Docker-Container, sind natürlich auch impementiert.
Da ich aus Platzgründen den INI-Parser selbst schreiben musste, ist der Syntax nicht vollkommen kompatibel aber leicht zu adaptieren. Auch werden nur noch 2 Referenzen verwendet, das hat sogar den Vorteil, dass es nicht mehr zu einer Verzehrung kommen kann.Für alle, die mal einen Blick darauf werfen wollen, finden sich die Firmwaredateien und eine Anleitung zum Flashen hier:
https://github.com/jomjol/AI-on-the-edge-device
Für Fragen, Anregungen, Bug-Reports, ... bin ich wie immer offen.
Beste Grüße,
jomjolP.S.: das ist eine recht aufwendige Portierung geworden, ich musste alles in C++ neu schreiben und habe es auch für Restrukturierung genutzt. Daher bitte ich zunächst Bugs zu verzeihen
-
@jomjol Unglaublich !! Ich habe riesigen Respect !!! Danke für die geile Arbeit, ich liebe das bisherige Ergebniss....
-
@jomjol Hallo jomjol,
Die Bedienoberfläche schaut super aus
Um bei der Installation nichts falsch zu machen wollte ich frage ob es schon eine Anleitung in Deutsch gibt?
Würde mir sehr helfen.
Super tolles Projekt, bitte weiter so -
@gerald123 Hallo Gerald,
aktuell gibt es keine deutsche Anleitung und erstmal wollte ich es auch nicht zweisprachig machen. Aber ich kann dir gerne eine kurze Skype o.ä. Session anbieten und dann zeige ich es dir. Ist wirklich nicht schwierig. Bitte einfach kontakt per PM.Beste Grüße,
jomjol -
@jomjol Hallo jomjol,
Danke für das Angebot, werde es mal alleine probieren und sonst melde ich mich wieder.
Ist es richtig wenn ich die drei Codedateien auf den ESP flashe und den gesamten Ordner SD auf eine Speicherkarte speichere und in den ESP stecke. Das sollte es doch schon gewesen sein, oder? -
@gerald123 Ja korrekt, du musst dann noch die config.ini anpassen. Die hat einen etwas anderen Syntax, ist aber inhaltlich gleich und hoffentlich fast selbsterklärend.
Unterstützte dich gerne als erster Beta-Nutzer :-). Einfach wirklich gerne melden.
Gruß,
jomjol -
@jomjol Danke, Installation am ESP hat heute schon geklappt
Morgen werde ich versuchen die Config.ini einzurichten, hoffe das geht auch so toll.
Ich werde wieder berichten wie es läuft
Schönen Abend wünsche ich dir noch! -
@jomjol Hallo jomjol,
Jetzt benötige ich schon deine Hilfe!
Ich möchte die config.ini bearbeiten, aber leider ohne erfolg.
Direkt auf der Weboberfläche ist ein editieren nicht möglich und beim hochladen per WLan kommt auch immer eine Fehlermeldung.
Muss ich dazu die Speicherkarte wieder herausnehmen und direkt am PC bearbeiten?
Gruß
Gerald -
Hallo @gerald123,
gar kein Problem - gerne. Direkte Bearbeitung im Brower geht (nocht) nicht. Der Fileserver ist ein reiner Viewer und Up/Download. Bevor du die Config.ini hochladen kannst, musst du die alte Config.ini löschen (Delete Button rechts). Aktuell ist der Filebrowser so eingestellt, dass er vorhandene Dateien nicht überschreibt.
SD-Karte rausholen und offline bearbeiten geht natürlich auch. Damit die neue Config.ini verwendet wird, musst du aber auch einen Reboot durchführen. Aktuell wird sie nur beim Start ausgelesen.Gruß,
jomjol -
@jomjol hab jetzt den Delete Button benutzt, leider kommt dann die Meldung „ Header fields are too long for server to interpret“ und wenn ich dann wieder über den File Server im config Ordner nachsehe ist die config.ini Datei noch immer vorhanden.
Muss ich wirklich die SD Karte rausholen -
@gerald123 Diese Fehlermeldung kenne ich gar nicht. Bist du sicher, dass du die neueste Firmware verwendet?
-
@jomjol wie kann ich das prüfen?
-
@gerald123 Versionierung fehlt noch. Die neueste Version ist von gesten Abend.
-
@jomjol kann ich die neue Version per OTA auf den ESP flashen?