AI-gebaseerde watermeter aflezing (deel 1): Zet uw oude meter in het IoT!

Slimme watermeters zijn al enige tijd op de markt, maar het vervangen van de oude meters is vaak niet zo eenvoudig, om technische of bureaucratische redenen. Met dit project kan een willekeurige analoge meter worden veranderd in een digitale meter met behulp van een ESP32-CAM platform en kunstmatige intelligentie (AI) Omdat we in dit artikel ook veel achtergrond onthullen, hebben we het in twee delen opgesplitst.

Italië is, na Griekenland, het Europese land dat het meeste water verbruikt in de civiele sector. Deze cijfers zijn zorgwekkend, zeker gezien de watercrises die dit land regelmatig treffen. Het gemiddelde aanbod is de afgelopen drie jaar met ongeveer 19% gedaald, verslechterd door steeds hogere temperaturen en een tekort aan neerslag. Dit probleem is niet uniek voor Italië. Verschillende landen nemen drastische tegenmaatregelen, zoals het beperken van het verbruik of het financieren van renovatie van particuliere of staatsdistributiefaciliteiten om lekkage te voorkomen.

Bovendien nemen verschillende distributeurs, gezien de voortdurende evolutie van de technologie, al enkele jaren maatregelen om ook het aflezen van de watermeters efficiënter te maken. Deze maatregel dient om verspilling van water te voorkomen, maar ook om het aflezen, dat huis aan huis persoonlijk wordt uitgevoerd, overbodig te maken.

In dit artikel behandelen we dit probleem: we digitaliseren het aflezen van een analoge meter en sturen de waarden naar ons toe of naar een van onze servers. Het geheel is gebaseerd op een ESP32-CAM, een platform dat al bij velen bekend is, en een AI-systeem dat foto's kan detecteren en vertalen naar leesbare data.

Inschrijven
Schrijf u in voor tag alert e-mails over ESP32!

Architectuur

AI-systemen hebben op grote schaal hun intrede gedaan in ons dagelijks leven, denk maar aan spraakassistenten of beeldherkenning. Voor de complexe berekeningen die een AI-systeem moet uitvoeren, is het mogelijk om te vertrouwen op cloud computing op speciale online platforms, of om ze direct op de chip uit te voeren, met zogenaamde edge computing. Met de toenemende verbetering van processors breidt deze tweede manier van verwerking zich uit en dit is de basis van ons project.

Hierin zullen een AI-netwerk en een ESP32-CAM samenwerken om de gebruiker een digitaal resultaat te leveren, verkregen door het digitaal fotograferen van een klassieke analoge watermeter. De herkenning en digitalisering wordt gedaan door de ESP32-CAM met behulp van een convolutioneel neuraal netwerk (CNN) dat we later in het artikel zullen behandelen.

De eerste stap in de implementatie van ons project is het installeren van de firmware op onze ESP32-CAM. Vervolgens hebben we een kalibratiefase nodig waarin we de gebieden identificeren waar de herkenning van de getallen en indicatoren op onze meter moet plaats vinden. Zodra dit is gedaan, hebben we alle informatie beschikbaar om deze digitaal te versturen.

Neurale netwerken en AI

Neurale netwerken zijn rekenmodellen die geïnspireerd zijn door de werking van het menselijk brein. Het zijn AI-systemen die de manier waarop de hersenen informatie verwerken proberen na te bootsen. Neurale netwerken worden gebruikt in machine learning, een studiegebied dat zich bezighoudt met het trainen van computers om bepaalde taken uit te voeren zonder dat ze daar expliciet voor geprogrammeerd zijn.

Neurale netwerken spelen een cruciale rol in deep learning-modellen, een deel van machine learning die zich richt op het verwerken van complexe gegevens. Ze bestaan uit rekeneenheden die artificial neurons of nodes worden genoemd. Deze neuronen zijn met elkaar verbonden via kunstmatige verbindingen, de weights. Elke verbinding heeft een bijbehorende numerieke waarde, die het belang van de verbinding voor het model representeert.

Neurale netwerken zijn georganiseerd in lagen, met een of meer lagen verborgen tussen de input layer en de output layer. De eerste laag, de input layer, ontvangt de input data. De middelste lagen, hidden layers genoemd, verwerken de informatie via hun neuronen. Ten slotte produceert de laatste laag, de output layer, de gewenste resultaten, zoals geschematiseerd in figuur 1.

Figuur 1: Neurale netwerken bestaan uit een input layer, een output layer en vele tussenlagen de hidden layers.

Neurale netwerken kunnen worden gebruikt in een breed scala van toepassingen, zoals automatische vertaling, verwerking van natuurlijke taal, medische diagnose en, in ons geval, beeldherkenning. In dit specifieke geval worden tijdens het trainingsproces filters toegepast op de afbeelding met verschillende resoluties en wordt de uitvoer van elke verwerkte afbeelding gebruikt als invoer voor de volgende laag. De filters beginnen met basiskenmerken, zoals helderheid of kanten, en worden steeds complexer naarmate ze vorderen, inclusief kenmerken die het object uniek definiëren.
 

Convolutionele neurale netwerken (CNN's) zijn een specifiek type neuraal netwerk dat is ontworpen voor het efficiënt verwerken van gestructureerde gegevens, zoals afbeeldingen of video. Wat CNN's onderscheidt van traditionele neurale netwerken is het gebruik van een bewerking die convolutie heet. Tijdens de convolutie schuift een klein venster, een filter of kernel genaamd, over het ingevoerde beeld en wordt een reeks wiskundige bewerkingen toegepast op elk deel van het beeld. Dit proces stelt CNN in staat om automatisch relevante kenmerken, zoals kanten, structuren of patronen, efficiënt uit de beelden te extraheren.

Deze netwerken bestaan ook uit een inputlaag, een outputlaag en vele tussenlagen, de hidden layers. Er zijn drie hoofdtypen, namelijk:

  • Convolutielaag
  • Poolinglaag
  • Volledig verbonden (FC) laag.

De convolutielaag is de eerste laag van een convolutioneel neuraal netwerk. Deze laag is verantwoordelijk voor het extraheren van de opvallende kenmerken uit de input afbeelding. Convolutielagen kunnen worden gevolgd door andere convolutielagen of poolinglagen. Volgende convolutielagen gaan door met het verwerken van kenmerken die uit vorige lagen zijn geëxtraheerd, waardoor het netwerk steeds complexere en abstractere kenmerken kan leren.

De volledig verbonden laag, ook output laag genoemd, is de laatste laag van een CNN. Op dit niveau worden de geëxtraheerde kenmerken gebruikt om voorspellingen of classificaties te maken. Dit niveau is verantwoordelijk voor de uiteindelijke uitvoer van het convolutionele neurale netwerk.

Op elk niveau neemt de complexiteit van het CNN toe omdat het netwerk steeds geavanceerdere en abstractere kenmerken van het ingevoerde beeld leert. Bovendien neemt het deel van het beeld dat in detail wordt geïdentificeerd en geanalyseerd door het neurale netwerk toe naarmate de convolutieniveaus worden doorlopen, zoals wordt geïllustreerd in figuur 2. In tegenstelling tot een traditioneel neuraal netwerk heeft een CNN gedeelde gewichten en biases die hetzelfde zijn voor alle neuronen die in een bepaalde laag zijn verborgen. Na het leren van de kenmerken in meerdere lagen, gaat de architectuur van een CNN over op classificatie.

Figuur 2: In elke laag neemt de complexiteit van de CNN toe.

De voorlaatste laag is een volledig verbonden laag die een vector van grootte K (waarbij K het aantal voorspelbare klassen is) genereert en de waarschijnlijkheid bevat voor elke klasse van elk geclassificeerd beeld. De laatste laag van de CNN-architectuur gebruikt een classificatie laag om de output van de uiteindelijke classificatie te leveren. Meestal zijn er voorgetrainde modellen van deze netwerken die uiteraard meerdere MB of GB groot zijn. In ons geval gaat het om een paar MB, maar die worden opgeslagen op een SD-kaart om het interne geheugen van de chip niet al te zeer te belasten.
 

Specifiek zijn er verschillende bestanden aanwezig in de configuratiemap, met de extensie tflite, wat Tensorflow Lite betekent. TensorFlow, ontstaan uit Google Brain in 2015, is een referentiebibliotheek geworden voor het maken van Deep Learning-modellen. In eerste instantie intern ontwikkeld door Google, werd het open source gemaakt en won het snel aan populariteit in de machine learning gemeenschap. Het biedt een breed scala aan modellen en algoritmen voor machine learning en deep learning, ook wel neurale netwerken genoemd, en maakt deze beschikbaar voor ontwikkelaars via een intuïtieve API.

TensorFlow maakt gebruik van de kracht van Python of JavaScript om een gebruiksvriendelijke programmeerinterface te bieden voor het maken van toepassingen. Ondertussen vindt de uitvoering van dergelijke toepassingen plaats in C++, wat hoge rekenprestaties mogelijk maakt. Dit maakt TensorFlow een veelzijdige keuze voor grootschalige machine learning projecten.

Modellen die zijn getraind met TensorFlow kunnen ook worden geïmplementeerd op mobiele of edge computing apparaten, zoals in ons geval, en op iOS- of Android-besturingssystemen. Het TensorFlow ecosysteem biedt tools zoals TensorFlow Lite dat TensorFlow modellen optimaliseert om efficiënt te draaien op dergelijke apparaten. Met TensorFlow Lite kan een afweging worden gemaakt tussen de grootte van het model en de nauwkeurigheid ervan. Een kleiner model kan minder ruimte in beslag nemen, zoals 12 MB in plaats van 25 MB of zelfs meer dan 100 MB, maar kan iets minder nauwkeurig zijn. Dit verlies in nauwkeurigheid is echter vaak verwaarloosbaar, gezien de voordelen op het gebied van snelheid en energie-efficiëntie die het gecomprimeerde model biedt.

In ons geval zal dit met TensorFlow getrainde model worden gebruikt om getallen in de meter te onderscheiden en te herkennen en om de richting van de indicatoren te bepalen. Met behulp van TensorFlow kunnen we de kracht van deep learning inzetten voor data-analyse en AI, waardoor de efficiëntie en nauwkeurigheid van onze toepassingen wordt verbeterd.

Inschrijven
Schrijf u in voor tag alert e-mails over Artificial Intelligence!

Hardware

Zoals gezegd is het gekozen platform de ESP32-CAM van AI-Thinker, die dankzij zijn compacte afmetingen (40,5 × 27 × 4,5 mm3) de Heilige Graal zou kunnen zijn voor elke maker. De opvolger van de bekende ESP8266, die we later zullen bespreken, bestaat uit een ESP32-module met een connector – waarvan de pin-out getoond wordt in figuur 3 – voor een aparte cameramodule en een sleuf voor een SD-kaart van maximaal 4 GB. In detail zien we een programmeerbare microcontroller met ingebouwde Wi-Fi en Bluetooth en extra externe RAM van maximaal 4 MB.

Figuur 3: Pin-out van de ESP32-CAM module.

Niet alleen dat. Door de nieuwe camera connector kan een OV2640 of OV7670 module aangesloten worden; de eerste wordt geleverd met de module zelf en heeft een resolutie van 2 megapixels. De SPI-snelheid is 8 MHz en de grootte van de framebuffer is 384 KB. Het normale stroomverbruik is 70 mA, terwijl het in de energiebesparende modus slechts 20 mA nodig heeft.

Er is ook een high-brightness LED aan boord (figuur 4), die kan worden gebruikt als flitser of als verlichting van de te filmen scène. Deze functie is cruciaal voor ons project, omdat het in omgevingen wordt geplaatst die normaal erg donker zijn. We zullen zien dat het mogelijk is om dit licht te moduleren om het gewenste resultaat te bereiken. Natuurlijk, mocht het voorgaande niet voldoende zijn, dan kunnen we dankzij de vele GPIO's op het board eventueel een externe verlichting monteren in het geval van te weinig licht.

Figuur 4: De ESP32-CAM is het hart van dit project.

Voor kleine toepassingen komt deze chip over als zeer robuust en met veel verwerkingskracht, vertrouwend op 2 x 32 bit kernen op 120 MHz. Deze laatste eigenschap maakt het mogelijk om een vrij hoge framerate te hebben, uiteraard afhankelijk van het formaat en de grootte: we kunnen een doorvoer van maximaal 8 JPEG's in SVGA (800 x 600) per seconde bereiken.

Het programmeren van onze ESP32-CAM module kan op verschillende manieren: de klassiekste is met behulp van een adapter van FTDI (figuur 5) die, dankzij de FT232RL interface, RS-232 en COM poorten simuleert, waardoor een snelle Plug and Play van het apparaat mogelijk is.

Figuur 5: De USB/TTL-converter met FT232RL.

Opmerking van de redactie: De module die wordt voorgesteld in het kader "Verwante producten" aan het einde van dit artikel – volledig pin-compatibel en verkrijgbaar in de Elektor Store – bevat een micro-USB-connector met de bijbehorende seriële interface naar de chipset, waardoor andere seriële adapters overbodig zijn.

Als het bovenstaande object niet beschikbaar is, wanhoop dan niet; in feite kan het worden gedaan met elke module waarin de TX en RX pinnen aanwezig zijn, dus met verschillende Arduino of ESP-modellen.

Bedrading voor het programmeren van de ESP32-CAM

Om de hierboven genoemde reden zijn er verschillende soorten bedrading mogelijk, vergelijkbaar maar verschillend in sommige opzichten. In het algemeen heeft de ESP32-CAM module geen USB om rechtstreeks met de PC te kunnen communiceren, en dat is precies waarom we een externe module moeten gebruiken.

Laten we beginnen met de klassiekste module: Arduino UNO. Als eerste stap identificeren we de zend- en ontvangstpinnen op onze ESP32-CAM, respectievelijk U0TXD en U0RXD genoemd. Deze moeten rechtstreeks worden verbonden met de TX en RX pinnen op onze Arduino. In de cameramodule komen deze pinnen ook overeen met de GPIO1 en GPIO3 pinnen. Vervolgens sluiten we de GND- en IO0-contacten op de ESP32-CAM kort om een correcte communicatie te garanderen. Voor de voeding verbinden we de 5 V en GND pinnen van de twee platforms.

Om de Arduino te resetten, sluiten we de RESET-pin en de GND-pin kort. Samenvattend krijgen we het schema van figuur 6, ook weergegeven in tabel 1.

Figuur 6: De ESP32-CAM module kan geprogrammeerd worden met een Arduino UNO.
Tabel 1: Bedrading van Arduino naar ESP32-CAM.
Arduino ⇒ ESP32-CAM Arduino ESP32-CAM
TX ⇒ U0TXD Reset ⇒ GND GPIO0 ⇒ GND
RX ⇒ U0RXD    
5V ⇒ 5V    
     

Als we geen Arduino UNO, maar een ESP8266 hebben, verandert er maar weinig aan de bedrading. In feite is de enige verandering die het vermelden waard is, de contacten die moeten worden kortgesloten op onze programmeermodule: het zijn niet langer RESET en GND maar EN en GND. De bedrading wordt getoond in figuur 7 en is ook aangegeven in tabel 2.

Figuur 7: Bedrading om de ESP32-CAM te programmeren met een ESP8266.
Tabel 2: Bedrading ESP8266 naar ESP32-CAM.
ESP8266 ⇒ ESP32-CAM ESP8266 ESP32-CAM
TX ⇒ U0TXD EN ⇒ GND RX ⇒ U0RXD
5V ⇒ 5V    
GND ⇒ GND    

Tot slot de eenvoudigste bedrading van het geheel. In feite, als we een USB/TTL convertermodule bezitten die gebaseerd is op de FTDI-chip, is alles gedaan met een aansluiting minder. In feite hoeven we aan de kant van de programmer niets meer kort te sluiten, maar moeten we de TX- en RX-contacten met elkaar verwisselen zoals aangegeven in figuur 8 en in tabel 3.

Figuur 8: Verbindingen voor het programmeren met een USB/TTL-converter.
Tabel 3: Bedrading van FTDI naar ESP32-CAM.
FTDI ESP32-CAM
RX U0TXD
TX U0RXD
5V 5V
GND GND


De beschreven aansluitingen zijn alleen nodig tijdens de programmeerfase van de ESP32-CAM. Als het programmeren klaar is, wordt de ESP32-CAM module gewoon van stroom voorzien via de 5 V en GND-verbindingen. Het is niet langer nodig om de module op de Arduino aan te sluiten of andere verbindingen te maken.

In de tweede en laatste aflevering van dit artikel bespreken we de procedure voor de installatie van de firmware, de juiste instelling van de cameralens voor een optimale scherpstelling, de plaatsing van de lezer op de watermeter en natuurlijk het hele AI-gebaseerde proces voor de juiste herkenning en uitlezing van de elementen van de meter. Blijf op de hoogte!


Opmerkingen van de redactie: Geïnteresseerd in ESP32 en doe-het-zelf projecten? Dit project verscheen oorspronkelijk in Elettronica IN

 
 
  
Inschrijven
Schrijf u in voor tag alert e-mails over Embedded & AI!



Vertaling: Willem den hollander