NEWS
Wasserzähler - Selfmade
-
@sissiwup
Hallo,hier mal ein Modell, mit etwas anderen Parametern trainiert. Funktioniert bei mir besser. Entpacken, ins Config-Verzeichnis kopieren und dann in der ini den Namen des Models anpassen. Restart und ausprobieren:
Train_CNN_Digital-Readout_Version_4.0.1.h5.zip
Bei mir hat er 5 und 6 vorher nicht auseinander gehalten. Jetzt klappt das.
-
Hallo gute zeit
Vielen Dank für Ihre Bemühungen, ein großartiges und nützliches Projekt
Ich habe dieses Projekt mit einem Raspberry ausgeführt, das Docker-Image auf dem Raspberry installiert und das Ergebnis ist wie folgt
Und das Ergebnis war
NN632.4016Ich zog die Kamera zurück und es funktionierte
Und das Ergebnis war
N999N.8239Der zweite Test scheint besser zu funktionieren, da die Bilder näher an Ihren Referenzbildern liegen
Ich muss selbst Referenzbilder machen,
Wo füge ich meine Referenzbilder ein und bearbeite sie?
Ich benutze Docker Image raspi V5.3.0Vielen Dank
-
Hallo Frage mein ESP verschwindet nach ca 3 tagen aus dem netzwerk ??
gibst ne lösung dafür??? bin leider auf Reha 200 km entfernt.......sch.....
mfg
mikewolf -
@Mikewolf ja schau mal irgendwo weiter oben, statt dem Parser-Adapter mit Javascript auswerten. Hat wohl geholfen. Persönlich konnte ich es noch nicht testen.
-
@vista Hallo Vista,
hast du bei deinem Docker das /config Verzeichnis bereits extern eingebunden (siehe https://github.com/jomjol/water-meter-system-complete#running-docker)?
Darin findest du die config.ini und die Referenzbilder. Hier ist einen Anleitung, wie man sie richtig einstellt: https://github.com/jomjol/water-meter-system-complete/blob/master/Config_Description.mdEin Step-By-Step Anleitung für das Erstellen der Referenzbilder findest du hier: https://github.com/jomjol/water-meter-system-complete/blob/master/images/Alignment_procedure_draft.pdf
Ich programmiere gerade eine Web-Server-Applikation, um eine WYSIWYG Oberfläche für das Erstellen der Config.ini zu erstellen. Das wird aber noch dauern (eher Wochen statt Tage), daher erstmal bitte die Handanleitung probieren.
Gruß,
jomjol -
@jomjol Hallo, vielen Dank für deine Antwort.
Meine Frage betraf analoges und digitales Handheld-Bild.
Ich habe die Referenzbilder für meinen Wasserzähler geändert, aber die digitalen und analogen Handheld-Bilder unterscheiden sich von Ihrem Zähler. Daher müssen alle Bilder für künstliche Intelligenz reproduziert werden. Meine Frage ist, wo kann ich meine digitalen und analogen Handheld-Bilder für künstliche Intelligenz definieren?
Vielen Dank -
@vista Hallo vista,
okay - hoffe ich verstehe die Frage jetzt richtig. Die Bilderkennung funktioniert über ein neuronales Netz, was separat trainiert werden muss. Das trainierte Netz wird dann als h5-Datei im Unterverzeichnis /config/neuralnets jeweils für die Zeiger und die Zahlen gespeichert.
Das Training ist etwas komplizierter und hier beschrieben: https://github.com/jomjol/neural-network-analog-needle-readout
Du musst dir dazu:- eine Python-Umgebung mit Keras/Tensorflow installieren.
- Beispielbilder von den Trainingsdaten erzeugen
- Netz trainieren
- Ergebnis als h5-Datei transferieren
Ich habe aktuell zwei unterschiedliche Arten von Ziffern und auch zwei Zeiger trainiert. Wenn du mir genügend Bilder erzeugst, dann kann ich auch deine Zeiger trainieren. Können wir gerne mal im Detail besprechen, am besten per direktem Chat.
Gruß, jomjol -
@jomjol Vielen Dank, ich rufe dich an ..
-
Hello gentleman, sorry for writing in english, I know only few words in german and it's from rammstein
I am trying to modify this amazing project to my needs, the main problem is that we have another design of water meters here. I already sketched up rough mount for the right diameter of water meter, I am gathering data ( images ) to retrain the model because we have different numbers on rolling pins.
The main question is, how could I modify the server in docker container so it would recognize data from 2 water meters, or possibly more, I am thinking about sensing the gas meter which use the same principle. I know I could run somehow 2 same containers but, I quite don't like this idea of "wasting resources".
thanks
-
@Luc3as Hi Lucas,
let me know, when you have enough images for training the CNN. I would be very interested to increase additional number types into the training, increasing its usability for different kind of counters.
Unfortunately it is not possible to easily implement two counters in only one running docker containers. The whole internal structure (config.ini, it's parsing, the internal data stucture) is intended for a single counter only. I strongly recommend to run two dockers, mapping to different ports.
Otherwise a full restructuring of the source code is necessary. There is no plan from my side to do this at the moment.
Best regards,
jomjol -
@jomjol
Hallo, ich habe mich die letzten Tage mal wieder intensiver mit der Thematik beschäftigt. Ich habe alles in einem Docker laufen auf einer Syn. Dabei habe ich das Problem, dass sich egelmäßig nach zwei bis drei Tagen der Server aufhängt und ich bei jeder Abfrage folgende Fehlermeldung bekomme.--------------------------------------- ---------------------------------------- Exception happened during processing of request from ('172.17.0.1', 50807) Traceback (most recent call last): File "/usr/local/lib/python3.7/socketserver.py", line 316, in _handle_request_noblock self.process_request(request, client_address) File "/usr/local/lib/python3.7/socketserver.py", line 347, in process_request self.finish_request(request, client_address) File "/usr/local/lib/python3.7/socketserver.py", line 360, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/local/lib/python3.7/socketserver.py", line 720, in __init__ self.handle() File "/usr/local/lib/python3.7/http/server.py", line 426, in handle self.handle_one_request() File "/usr/local/lib/python3.7/http/server.py", line 414, in handle_one_request method() File "./wasseruhr.py", line 103, in do_GET result = wasserzaehler.getZaehlerstand(url, simple, usePrevalue, single) File "/lib/ZaehlerstandClass.py", line 142, in getZaehlerstand txt, logtime = self.LoadFileFromHTTP.LoadImageFromURL(url, './image_tmp/original.jpg') File "/lib/LoadFileFromHTTPClass.py", line 57, in LoadImageFromURL action_process.start() File "/usr/local/lib/python3.7/multiprocessing/process.py", line 112, in start self._popen = self._Popen(self) File "/usr/local/lib/python3.7/multiprocessing/context.py", line 223, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "/usr/local/lib/python3.7/multiprocessing/context.py", line 277, in _Popen return Popen(process_obj) File "/usr/local/lib/python3.7/multiprocessing/popen_fork.py", line 20, in __init__ self._launch(process_obj) File "/usr/local/lib/python3.7/multiprocessing/popen_fork.py", line 70, in _launch self.pid = os.fork() OSError: [Errno 12] Cannot allocate memory ----------------------------------------
Habe schon mehrmals neu installiert. Laufen hab ich die letzte rolling version.
der Fehler ist immer der selbe der dann kommt. Nach einem Neustart des Dockercontainer funktioniert es wieder 2 bis 3 Tage.
Hast du oder jemand anderes hier vielleicht ne Ahnung woran das liegt?LG
-
@intruder7 Ich kann dir leider nicht bei der Beseitigung des Fehlers helfen, aber du kannst über den Aufgabenplaner der Synology einen Zeitgesteuerten Neustart deines Containers einstellen
-
@Knallochse Das wäre eine Alternative. Hatte ich schon mal dran gedacht, aber im Bereich Docker nichts dazu gefunden und auch nicht weiter verfolgt. Werde ich mal umsetzen.
Danke dir
-
@intruder7 Ja, das Problem ist bekannt. In Tensorflow 2.0 gibt es ein Speicherleck. Mit jeder Bilderkennung wird etwas mehr Speicher geblockt und daher der Fehler. Es ist ein intrinsischer Fehler und soll erst mit einer Nachfolgenden Version beseitigt werden. Die kann ich aber aktuell noch nicht für die Synology kompilieren - bricht bei mir bisher immer ab.
Ich versuche es aber bei Gelegenheit wieder.
Beste Grüße,
jomjol -
Hallo, bin sehr interessiert daran so einen Wasserzähler Sensor nachzubauen und hätte daher einige Fragen.
- Geht das mit meinem analogen Wasserzähler der Firma Elster (siehe Bild)
- ich habe zufällig ein ESP32CAM hier, bekomme die Kamera aber nicht gedreht bzw. fokussiert. Hat da jemand einen Tipp wie man das einfach hin bekommt oder evtl. einen Tipp für ein Kamera die ich mir bestellen könnte bei der es einfach geht. Ich habe keine originale OV2640 drauf sondern eine XRZ00D1
- Gibt es irgendwo eine detaillierte Anleitung wie man vorgehen muss bzw. wie man den Server einrichtet und konfiguriert? Ich würde gerne den Server auf einem Intel NUC laufen lassen.
Schon mal Danke vorab.
-
@Atifan Hallo Atifan,
zu 1) ja sollte gehen, nur das Kondenswasser ist ein Problem!
zu 2) bei der OV2640 muss du die Versiegelung des Objektivs leicht lösen und dann kannst du sie drehen (siehe https://www.thingiverse.com/thing:3860911). XRZ00D1 kenne ich nicht
zu 3) Idealerweise verwendet du einen Docker Container: https://github.com/jomjol/water-meter-system-completeBeste Grüße,
jomjol -
@Atifan Hi Atifan, wenn du das Bild auf diese Größe bekommst:
ist auch das Kondenswasser kaum mehr ein Problem. Was ich gemacht habe um das Kondenswasserproblem ganz zu lösen: ich habe mir bei Amazon einen Auto-Entfeuchter von ThoMar (Air Dry Auto-Entfeuchter mit natürlichem Speichergranulat) bestellt. Das sind zwei Kissen drinnen mit 46 * 16 * 3 cm. Dieses 3-teilige Kissen habe ich um das Gehäuse des ESP32 gewickelt, sodass es fast Luftdicht abschließt. Seitdem ist mit Kondenswasser auf dem Schauglas schluss da diese Kissen komplett der Luft im Gehäuse die Feuchtigkeit entzieht. Die Kissen kann man auch wiederverwenden, dass heißt man legt diese auf die Heizung oder in die Sonne und läßt sie trocknen.
Kosten: circa 17,-- Euro -
@pfried super Tipp, danke dir!
@jomjol : ich denke ich habe das Problem mit dem Ausfall der ESP Camera gefunden. Bei mir war es so dass die Verbindung nach einiger Zeit weg war. Auch der Tipp, auf den Parser-Adapter zu verzichten brachte keinen Erfolg. Seit der Anpassung habe ich bisher keinen Ausfall gehabt. Vielleicht hilft es jemandem auch.
Meine Lösung: die Methode WifiReConnect() in der Zeile 14-21 in der Datei ESP32CAM_Server-GitHub.ino angepasst:
void WifiReConnect() { pinMode(INT_LED, OUTPUT); // Initialize the LED_BUILTIN pin as an output digitalWrite(INT_LED, HIGH); // turn the LED on. if (WiFi.status() != WL_CONNECTED) { WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.println(""); // Wait for connection // attempt to connect to Wifi network: while ( WiFi.status() != WL_CONNECTED) { Serial.print("Attempting to connect to WPA network, SSID: "); Serial.println(ssid); WiFi.begin(ssid, password); // wait 10 seconds for connection: delay(10000); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (MDNS.begin(host)) { Serial.print("MDNS responder started - Host: "); Serial.println(host); } for (int i=0;i<3;i++){ digitalWrite(INT_LED, LOW); // turn the LED on. delay(500); // wait digitalWrite(INT_LED, HIGH); // turn the LED off. delay(500); // wait delay(0); //to prevent watchdog firing. } } }
-
Super Projekt.
bekomme nach das als Ausgabe:
.4434 00000 4434 ErrorRateTooHigh (294.4704) 294.9138
die letzte Zahl stimmt. Warum steht davor was? habe ich etwas doppelt am laufen?
Wie bekomme ich jetzt diese Zahl in den IOBroker?
wie dieser anfrage im Script : http://192.168.XXXXXXX/setPreValue?value= bekomme ich gar keine Ausgabe. -
Hier stand mist...