NEWS
Wasserzähler - Version 2 - all-in-device
-
Hallo zusammen,
ich möchte in diesem Thread den Wasserzähler in der Version 2 vorstellen und diskutieren. In Version 1 waren 2 Komponeten notwendig (Hardware mit Kameraaufnahme, Docker-Server zur Auswertung). Das Zusammenspiel und die Konfiguration waren nicht immer ganz einfach.
Daher habe ich eine Nachfolgegeneration entwickelt, bei der alles in einem all-included Device umgesetzt ist und es noch um eine Web-basierte graphische Oberfläche zur einfachen Konfiguration ergänzt.
Das Grundprinzip basiert unverändert auf einem ESP32-Modul mit Kamera, welches regelmäßig ein Bild aufnimmt und durch Bilderkennung (Neuronale Netze, CNN) auswertet und den Zählerstand digitalisiert zur Verfügung stellt:
Hier ein Eindruck der graphischen Benutzeroberfläche:
Die Hardware ist wieder auf Thingiverse veröffentlicht, die Software könnt ihr als Firmware oder zum selber kompilieren auf GitHub finden. Dort gibt es auch ein Wiki mit Installations- und Konfigurationsanleitung.
-
Software/Wiki: https://github.com/jomjol/AI-on-the-edge-device/wiki
Ich stehe hier gerne wieder für Feedback, Fragen oder einfach zur Hilfe zur Verfügung und freue mich, wenn dieser Thread genauso intensiv genutzt wird, wie bei der Version 1 (>1k Beiträge und >22k Aufrufe).
Beste Grüße und viel Spass beim Nachbauen,
Jomjol
P.S.: die neue Software ist sehr flexibel aufgebaut und kann grundsätzlich auch Bildererkennung / Neuronale Netze für andere Zwecke eingesetzt werden. Wer eine gute Idee oder Anregung hat oder bei eine Modifikation Unterstützung braucht - bitte auch gerne einfach hier posten.
-
@jomjol ....... was für ein Zufall, ich habe mir Gestern diese Seite https://tutorials-raspberrypi.de/raspberry-pi-objekterkennung-mittels-tensorflow-und-kamera/ mal angeschaut weil ich noch zwei Raspberry Pis hierrum liegen habe, aber dein Projekt erscheint mir Sinnvoller als Äpfel und Birnen zu "Scannen"
Nun meine Frage, siehst du ein Problem das mit einem Pi und einer Webcam (Auflösung 720P) zu realisieren und läuft dort dann auch dein Docker Container?
-
@Master67 sagte in Wasserzähler - Version 2 - all-in-device:
ine Frage, siehst du ein Problem das mit einem Pi und einer Webcam (Auflösung 720P) zu realisieren und läuft dort dann auch dein Dock
Also das geht auch mit einem Raspberry PI. Der Docker-Container von Version 1 läuft dort - es gibt auf docker einen speziellen Container für den Raspberry. Dort ist nur noch keine direkte Ansteuerung für die Pi-Kamera drin. Das geht aber definitiv auch, weil ich es auch schonmal implementiert habe.
-
Entschuldigen Sie mein schlechtes Deutsch. Ich komme aus Belgien.
Ich habe einen alten Stromzähler mit einem zusätzlichen Glasfenster davor. (7-8cm vor dem Zähler) Ich habe die Standardmethode versucht, diesen Zähler mit einem optischen Sensor auf der rotierenden Scheibe abzulesen, aber mit der Doppelreflexion ist das sehr schwierig.
Dann habe ich Ihre wunderbare Lösung gefunden. Ich konnte die Software (Docker-Version) vor einigen Wochen ausführen. Aber ich habe abgebrochen, als die Ausgabebilder sehr verzerrt waren. Wahrscheinlich stimmt etwas mit meine Ausrichtungsreferenzen nicht.
(älteres Bild, es funktioniert besser, wenn die Kamera auf das erste Glas aufgesetzt wird)
Bevor ich mehr Zeit darauf verwende: Halten Sie es für möglich, dass Ihre Lösung etwas von diesem Bild lesen könnte? Ein Problem, das ich sehe, ist, dass der Text weiß auf schwarz und nicht schwarz auf weiß ist?
Wenn ich die Kamera höher stelle, fällt die Reflexion der LED in die Ziffern. Bei dem rgb-Streifen hatte ich das Problem, dass die erste LED grün blieb. ähnlich wie bei https://arduino.stackexchange.com/questions/32017/esp8266-nodemcu-first-ws2812-led-lights-up-green. Das Bild war aber besser.
-
@jomjol sagte in Wasserzähler - Version 2 - all-in-device:
@Master67 sagte in Wasserzähler - Version 2 - all-in-device:
Also das geht auch mit einem Raspberry PI. Der Docker-Container von Version 1 läuft dort - es gibt auf docker einen speziellen Container für den Raspberry. Dort ist nur noch keine direkte Ansteuerung für die Pi-Kamera drin. Das geht aber definitiv auch, weil ich es auch schonmal implementiert habe.Danke dir, dann versuche ich mich mal an Version 1, weil ich nicht wüsste wie ich die (USB) Cam in den Docker Container implementieren kann.
-
Moin und danke für die Arbeit,
aber irgendwie stelle ich mich wohl zu blöd an...
Kann ich aus dem github-Ordner Code die firmware.bin mit ESP-Flasher auf das Modul schieben und danach das WLAN konfigurieren (ähnlich Tasmota bei Sonoffs) oder muss ich die Zugangsdaten vorher irgendwo hinterlegen? Habe auch versucht, die Software in Arduino zu öffnen, der will will aber eine *.ino...
Im Voraus dankende Grüße für die Erleuchtung
Dirk -
@jomol
Toll geschriebener Code. Es macht Spaß so was zu lesen und daran zu lernen.Frage: Das Entwicklungssystem ist PlatformIO ?
Ich habe leider kaum Erfahrungen damit.
Gibts eine Kurzanleitung zum Import dieses Projekts?
Hike -
@Eggs sagte in Wasserzähler - Version 2 - all-in-device:
Moin und danke für die Arbeit,
aber irgendwie stelle ich mich wohl zu blöd an...
Kann ich aus dem github-Ordner Code die firmware.bin mit ESP-Flasher auf das Modul schieben und danach das WLAN konfigurieren (ähnlich Tasmota bei Sonoffs) oder muss ich die Zugangsdaten vorher irgendwo hinterlegen? Habe auch versucht, die Software in Arduino zu öffnen, der will will aber eine *.ino...
Im Voraus dankende Grüße für die Erleuchtung
DirkHallo Dirk,
ganz so einfach wie bei Sonoffs ist es (noch) nicht, aber fast .Die Firmware besteht aus drei Teilen (Bootloader, Partitioninfo und Firmware) und die müssen alle drei geflasht werden - das geht aber mit dem Tool von Espressif eigentlich reicht einfach - ist hier detailliert beschrieben: https://github.com/jomjol/AI-on-the-edge-device/wiki/Installation
Dort findest du auch den Link zum Flashtool und eine Anleitung zur Bedienung. Das Wlan wird über eine Dateil auf der SD-Karte konfiguriert. Dort gibt es die wlan.ini (im Root Verzeichniss) - dort einfach SSDI und Passwort eintragen. Ist auch im o.g. Link nochmal beschrieben.
Arduino geht nicht, da der Code in PlattformIO mit ESP-IDF erstellt ist und nicht die Arduino Bibliotheken verwendet.
Dann sollte es funtkionieren und du kannst die Konfiguration an deinen Wasserzähler vornehmen. Details findest du hier: https://github.com/jomjol/AI-on-the-edge-device/wiki/Configuration und hier https://github.com/jomjol/AI-on-the-edge-device/wiki/Graphical-configuration.
Viel Erfolg und gerne bei Fragen melden.
Beste Grüße,
jomjol -
@hike sagte in Wasserzähler - Version 2 - all-in-device:
@jomol
Toll geschriebener Code. Es macht Spaß so was zu lesen und daran zu lernen.Frage: Das Entwicklungssystem ist PlatformIO ?
Ich habe leider kaum Erfahrungen damit.
Gibts eine Kurzanleitung zum Import dieses Projekts?
HikeHallo Hike,
erstmal danke für dein positive Feedback. Ja - der Code ist in PlattformIO geschrieben und kompiliert. Eine detailierte Anleitung habe ich nicht - ist mein ersten Projekt in PlattformIO.
Ich habe alles in Windows10 aufgesetzt (ja Asche auf mein Haupt :-)). Ich programmiere alles im Editor VSCode und habe über das Plugin "PlattformIO IDE" PlattformIO installiert. Dort musst du dann das "Espressif 32" Framework installierte. Letzteres ist etwas tricky in Windows gewesen.Das ganze geht auch unter Linux - temporär hatte ich die Entwicklung auch auf einem virtualisierten Linux (ich verwende Ubuntu) am Laufen, dort geht die Installation etwas leichter. Wenn ich es nochmal installiere, dann mache ich da mal ein Tutorial draus.
Gruß,
jomjol -
Hey @jomjol vielen Dank für deine V2 Version.
Habe heute mal probiert es aufzusetzen, leider scheitere ich am Referenzbild
Irgendwie bin ich gerade zu blöd dazu. Der ESP ist im WLAN und die HTML Seiten werden angezeigt.
Jetzt möchte ich eigentlich ein neues Referenzbild erstellen, geht aber nicht. Beim ersten Test Start wurde mal ein Bild gemacht von meinen Fingern, dass wird jetzt als Referenzbild angezeigt, möchte ich ein neues erstellen, wird immer wieder dieses Bild angezeigt.
Löschen unter File Server kann ich es auch nicht, weiß jetzt gerade die Fehlermeldung nicht aus dem Kopf, war aber was mit "Header too Long". Gibt ja auch schon ein Issue dafür und ja nutze Chrome.
Habe noch ein anderes Problem mit meinem zweiten ESP32 der die ganze Zeit mit der v1 lief, aber dazu später. Erst möchte ich die v2 jetzt mal am laufen haben -
Hi jomjol
Habe unterdessen noch weitergetestet....irgendwie hat es mich jetzt so richtig gepackt
--> Habe die 2 Issues auf Github eröffnetWegen der Error-Meldungen im Chrome-Browser: Mir hat schlussendlich geholfen, den Browser zurückszusetzen (Cache löschen, alle Cookies, löschen...). Wieso auch immer.
Nun...bevor ich das aber bemerkt habe, hatte ich bereits einige Stunden versucht (bin eben auch nicht wirklich ein Experte....) dem Problem in den HTML-Dateien auf die Spur zu kommen und dabei das Script "includeHTML();" verwendet um externe HTML-Daten einzubinden. Das hat im Chrome ebenfalls geholfen. Hab dann aber auch noch ein wenig am Layout rungewerkelt:Ich stelle meine HTML-Dateien einfach mal hier rein, dann kann jeder selbst entscheiden Du kannst diese natürlich auch für das Projekt weiterverwenden wenn du willst.
Noch eine letzte Frage: Das "DeleteAll"-Feature funktioniert tiptop, danke! Bei vielen Dateien dauert es aber ziemlich lange und man weiss nicht ob was geht oder der ESP32 abgeschmiert ist. Eine Progressbar wäre da super. Weiss aber nicht ob das machbar ist? Zudem wäre nach erfolgreichem löschen noch ein "Page Refresh" gut so wie beim löschen einer einzelnen Datei.
Gruss
Michael -
@michaeljoos sieht schick aus die Oberfläche
Hast du gerade ne Idee, da du ja schon am rumprobieren bist, warum ich kein Ref Bild erstellen kann? -
@coyote Mmhh, bin mir auch nicht wirklich sicher. Aber versuch doch trotzdem mal mit Firefox die Datei reference.jpg im Fileserver zu löschen und dann das Referenz-Bild neu zu generieren. Im Firefox sollte das alles ohne Error-Meldungen funktionieren.
-
@jomjol bin einen kleinen Schritt weiter. Habe jetzt mit Firefox die raw.jpg gelöscht, dass war das Bild, dass immer angezeigt wurde. Wann wird dieses erstellt bzw. kann ich es neu erstellen?
Edit: Ok, jetzt hab ich den kompletten Inhalt von img_tmp gelöscht, dummerweise auch die "leer.txt", nach reboot geht dann nix mehr Ich mach mal die SD Karte neu, dann geht's weiter
-
@jomjol
danke für die Information. Ich habe mich mal dumm gestellt und versucht das Projekt in PlatformIO zu importieren.
Hat gegen alle Erwartungen auf Anhieb geklappt.Kurze Beschreibung:
- Download als zip AI-on-the-edge-device-master
1.1 extrahieren mit 7-zip
1.2 umbenennen AI-on-the-edge-device
1.2 in PlatformIO Projekt öffnen, geht leider nicht, es fehlt platformio.ini
1.2.1 in Code exitiert platformio.ini, man öffnet Code
1.2.2 voila, Projekt ist importiert2.1 Ich hab mich mal dumm gestellt und "build" ausgelöst
2.2 Ein längerer Übersetzungslauf wird ausgeführt
Es gibt ein paar Warnungen
Ergebnis: Archiving .pio\build\esp32cam\lib89c\libjomjol_image_proc.a
Archiving .pio\build\esp32cam\libe37\libjomjol_fileserver_ota.a
Linking .pio\build\esp32cam\firmware.elf
Retrieving maximum program size .pio\build\esp32cam\firmware.elf
Building .pio\build\esp32cam\firmware.bin
Checking size .pio\build\esp32cam\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [== ] 22.7% (used 74412 bytes from 327680 bytes)
Flash: [========= ] 85.9% (used 1671313 bytes from 1945600 bytes)
esptool.py v2.6
================================== [SUCCESS] Took 212.56 seconds ==================================
2.3 serial Monitor über Symbol Stecker in Symbolleiste geöffnet
2.3.1 kontrolliere ob 115200 baud : Miniterm on COM6 115200,8,N,1 ---
2.3.2 Alte Software reboots , ok
3.0 upload:
3.1 Verbinde Masse mit GPIO0 (3.Pin von rechts auf 3,3V Seite
3.2 5V anlegen, ..waiting for download
3.3 upload über Symbol ->
3.3.1 erfolgreich geflashed
3.4 SD-Karte mit dem Inhalt aus sd-card gefüllt und
4.0 hurra, es läuft
4.1 IP aus dem Protokoll entnommen
4.2 kann auf die Web-OberFläche zugreifen.Selten so viel Glück gehabt
- Download als zip AI-on-the-edge-device-master
-
@coyote sagte in Wasserzähler - Version 2 - all-in-device:
@jomjol bin einen kleinen Schritt weiter. Habe jetzt mit Firefox die raw.jpg gelöscht, dass war das Bild, dass immer angezeigt wurde. Wann wird dieses erstellt bzw. kann ich es neu erstellen?
Edit: Ok, jetzt hab ich den kompletten Inhalt von img_tmp gelöscht, dummerweise auch die "leer.txt", nach reboot geht dann nix mehr Ich mach mal die SD Karte neu, dann geht's weiter
Das raw.jpg wird gemacht, sobald ein automatischer Durchlauf stattfindet --> Sollte noch einen Button zum manuellen Aufzeichnen von raw.jpg einfügen --> habe einen issue erstellt.
-
@hike Genial --> Kannst du das in eine Doku schreiben (Markup Language), dann werde ich es in das Wiki mit aufnehmen!
Wäre super - danke im Voraus!
-
@coyote, @hike, @michaeljoos, @watcherkb
Es kommt gerade etwas Dynamik in die Entwicklung - gefällt mir! Vielen Dank an euch für das schnelle und ausgiebige Feedback. Damit es im Rollout nicht zuviele neue Versionen hagelt, habe ich soeben einen neuen Channel auf Github erstellt ("Rolling") das ist eine Kopie von v1.1.3 und jetzt mein Arbeitsverzeichnis für neue Versionen. Dort werde ich Korrekturen / Updates und Test erstellen und hochladen.
https://github.com/jomjol/AI-on-the-edge-device/tree/rolling
-
@aandekant sagte in Wasserzähler - Version 2 - all-in-device:
Entschuldigen Sie mein schlechtes Deutsch. Ich komme aus Belgien.
We can discuss in Englisch - no problem
Ich habe einen alten Stromzähler mit einem zusätzlichen Glasfenster davor. (7-8cm vor dem Zähler) Ich habe die Standardmethode versucht, diesen Zähler mit einem optischen Sensor auf der rotierenden Scheibe abzulesen, aber mit der Doppelreflexion ist das sehr schwierig.
Dann habe ich Ihre wunderbare Lösung gefunden. Ich konnte die Software (Docker-Version) vor einigen Wochen ausführen. Aber ich habe abgebrochen, als die Ausgabebilder sehr verzerrt waren. Wahrscheinlich stimmt etwas mit meine Ausrichtungsreferenzen nicht.
(älteres Bild, es funktioniert besser, wenn die Kamera auf das erste Glas aufgesetzt wird)
Bevor ich mehr Zeit darauf verwende: Halten Sie es für möglich, dass Ihre Lösung etwas von diesem Bild lesen könnte? Ein Problem, das ich sehe, ist, dass der Text weiß auf schwarz und nicht schwarz auf weiß ist?
This picture should be totally fine for the image recognition. The newest version of the neural network files have been also trained for white numbers on black background. Even if it does not work perfect on the first test - it is rather uncomplicated to incorporate your digits in the training as well, as soon, as you can send me 2-3 pictures of each digit (0..9)
Wenn ich die Kamera höher stelle, fällt die Reflexion der LED in die Ziffern. Bei dem rgb-Streifen hatte ich das Problem, dass die erste LED grün blieb. ähnlich wie bei https://arduino.stackexchange.com/questions/32017/esp8266-nodemcu-first-ws2812-led-lights-up-green. Das Bild war aber besser.
So I would recommend to go on!
-
@jomjol ich glaube ich habe noch etwas Probleme mit der WLAN Verbindung, dass muss ich noch beheben und genau da sind wir beim Punkt, vllt kannst du mir helfen.
Ich hatte deine "alte" Version auf einem ESP32 mit eingelöteter Brücke um die externe Antenne zu nutzen, genau den wollte ich heute flashen mit der V2, aber da tut sich nix.
Laut flashtool läd er alles hoch (vorher auch schon etliche Male gelöscht), stecke ich dann die SD Karte ein und gebe ihm Spannungsversorgung, tut sich nichts. Kein LED blinken und im WLAN sehe ich ihn auch nicht. Auf dem zweiten ESP32 keine Probleme, aber der nutzt nur die interne Antenne.
Hast du vllt ne Idee?EDIT: Habe jetzt auch die SD Karte neu beschrieben auf dem zweiten ESP32, jetzt sehe ich wieder dein default RAW Bild, aber ich bekomme mein Wasserzähler Bild nicht hin