Handgeschreven Cijferherkenning Implementeren op de i.MX RT1060 MCU met TensorFlow Lite
Deze gids demonstreert hoe u handgeschreven cijferherkenning kunt implementeren op de i.MX RT1060 crossover MCU, gebruikmakend van een TensorFlow Lite-model en een touch-enabled GUI.
De i.MX RT1060, aangedreven door een Arm® Cortex®‑M7-kern, blinkt in kosteneffectieve industriële oplossingen en hoge‑prestaties consumentenapparaten die rijke display-interfaces vereisen. In deze tutorial lopen we door het bouwen van een embedded machine learning-applicatie die door de gebruiker getekende cijfers detecteert en classificeert met het populaire MNIST eIQ-voorbeeld.
Een Blik op de MNIST Dataset en Model
We gebruiken de standaard MNIST-dataset, bestaande uit 60.000 training- en 10.000 testafbeeldingen van gecentreerde grijswaarde handgeschreven cijfers, elk 28×28 pixels. De data werden verzameld van middelbare-schoolstudenten en Census Bureau-werknemers in de Verenigde Staten, dus het reflecteert Noord-Amerikaanse handschriftenstijlen. Convolutionele neurale netwerken (CNN's) presteren uitzonderlijk goed op deze dataset, en zelfs bescheiden architecturen kunnen hoge nauwkeurigheid bereiken, wat TensorFlow Lite een ideale keuze maakt voor implementatie op embedded hardware.
De officiële TensorFlow GitHub-repository biedt een Python-implementatie van het MNIST-model, gebouwd met Keras, tf.data, en tf.estimator. De CNN bereikt uitstekende prestaties op de testset en fungeert als referentie voor ons conversieproces.
Hieronder is de ruwe modeldefinitie die overeenkomt met de visualisatie hierboven.
Wat Is TensorFlow Lite en Hoe Wordt Het Hier Gebruikt?
TensorFlow is een wijd geadopteerd, open-source diep-leren framework onderhouden door Google. Om TensorFlow-inferentie naar resource-beperkte apparaten te brengen, introduceerde Google TensorFlow Lite, een lichtgewicht runtime die een subset van TensorFlow-operaties ondersteunt. Hoewel TensorFlow Lite-modellen niet verder getraind kunnen worden op het apparaat, kunnen ze geoptimaliseerd worden met quantisatie, pruning, en andere post-training-technieken om grootte te verminderen en inferentiesnelheid te verbeteren.
Het Model Converteren naar TensorFlow Lite
We trainen het model eerst met TensorFlow 1.13.2 om compatibiliteit met de conversietools te garanderen. Het model wordt vervolgens geconverteerd naar het .tflite-formaat met de volgende opdracht:
tflite_convert --saved_model_dir= --output_file=converted_model.tflite --input_shape=1,28,28 --input_array=Placeholder --output_array=Softmax --inference_type=FLOAT --input_data_type=FLOAT --post_training_quantize --target_ops TFLITE_BUILTINS
Na conversie gebruiken we xxd om het binaire model in onze applicatie te embedden:
xxd -i converted_model.tflite > converted_model.h
De xxd utility produceert een C/C++ header die het model bevat als een byte-array, wat het eIQ-project in staat stelt het direct te laden tijdens compilatie. Gedetailleerde instructies vindt u in de eIQ-gebruikersgidsen en de officiële TensorFlow Lite-documentatie.
Een Snelle Introductie tot Embedded Wizard Studio
Om te profiteren van de MIMXRT1060‑EVK's graphics-mogelijkheden, incorporeren we een touch-enabled GUI gebouwd met Embedded Wizard Studio. De IDE genereert MCUXpresso- en IAR-projecten vanuit NXP's SDK, wat ontwikkelaars in staat stelt de interface direct op hardware te testen. De evaluatieversie beperkt GUI-complexiteit en voegt een watermerk toe, maar de volledige licentie ontgrendelt onbeperkte functies.
Omdat de gegenereerde GUI-code in C is terwijl de eIQ-voorbeelden in C/C++ zijn, wrappen we alle geïncludeerde headers met:
#ifdef __cplusplus
extern "C" {
#endif
/* C code */
#ifdef __cplusplus
}
#endif
We verplaatsen ook bron- en headerbestanden naar de middleware-map van de SDK en passen include-paden aan. Apparaatspecifieke configuratiebestanden worden samengevoegd om een soepele build te garanderen.
De Voltooide Applicatie en Haar Functies
De GUI presenteert een touch-geschikte invoerzone voor het tekenen van cijfers en een uitvoerveld dat het classificatieresultaat toont. Twee knoppen staan de gebruiker toe om inferentie uit te voeren of het canvas te wissen. Na inferentie print de applicatie het voorspelde cijfer en vertrouwingsscore naar de standaarduitvoer voor debugging-doeleinden.
TensorFlow Lite Modelnauwkeurigheid
Terwijl de CNN hoge nauwkeurigheid haalt op papier‑gebaseerde MNIST-monsters, verschillen handgeschreven cijfers getekend op een touchscreen aanzienlijk. Deze discrepantie onderstreept het belang van trainen met productie‑klare data die de target-invoermodaliteit matcht. Om prestaties te verbeteren, verzamel een nieuwe dataset met de touchscreen en pas transfer learning toe, zoals gedetailleerd in de NXP Community-walkthrough.
Implementatiedetails
Embedded Wizard gebruikt slots om te reageren op gebruikersinteracties. De teken-slot vangt touch-bewegingen op, renderend een 1-pixel lijn in de hoofdkleur. De wis-slot reset zowel invoer- als uitvoervelden naar de achtergrondkleur. Wanneer de run-inferentie-slot getriggerd wordt, haalt het de bitmap-data op, past het formaat aan naar 28×28, en voedt het in de TensorFlow Lite-interpreter.
Omdat het invoer-canvas 112×112 is, verwerken we de afbeelding als volgt:
- Alloceer een 8-bit array van 112×112 en initialiseer op nul.
- Kopieer elke getekende pixel (waarde 0xFF) in de array.
- Vergroot elke pixel tot een 3×3-blok om strepen te verdikken.
- Crop en centreer de tekening om te matchen met MNIST-preprocessing.
- Herschaal de 112×112 afbeelding naar 28×28, converterend elke pixel naar een floating-point waarde voor het model.
De TensorFlow Lite-interpreter wordt eenmaal geïnitialiseerd bij opstart. Voor elk inferentieverzoek wordt de voorverwerkte invoer-tensor pixel voor pixel gekopieerd in de invoerbuffer van de interpreter. Het geheugenvoetafdruk en runtime-karakteristieken zijn gedocumenteerd in de NXP-applicatienota.
TensorFlow Lite: Een Haalbare Oplossing
Het implementeren van handgeschreven cijferherkenning op embedded apparaten brengt uitdagingen met zich mee zoals beperkte rekenbronnen en gevarieerde invoermodaliteiten. TensorFlow Lite mitigeert deze issues door een lichtgewicht runtime en een rijk ecosysteem van optimalisatietools te bieden. De i.MX RT1060's M7-kern, gecombineerd met de SDK's middleware, maakt het haalbaar om complexe use cases te implementeren zoals een veilige numerieke toetsenklavier voor een digitaal slot.
Modellen trainen op echte productiedata – cijfers getekend met een vinger op een touchscreen – blijft essentieel voor het handhaven van hoge nauwkeurigheid. Daarnaast moeten regionale handschriftenvariaties overwogen worden bij het ontwerpen van de dataset.
De i.MX RT crossover MCU-serie biedt een gebalanceerde mix van prestaties en kosten, wat het geschikt maakt voor een wijd scala aan embedded-toepassingen. Voor meer details, bezoek de i.MX RT-productpagina.
Industry Articles zijn een vorm van content die industriële partners in staat stelt nuttig nieuws, berichten en technologie met All About Circuits-lezers te delen op een manier waar editoriële content niet goed voor geschikt is. Alle Industry Articles zijn onderworpen aan strikte editoriële richtlijnen met de bedoeling lezers nuttig nieuws, technische expertise of verhalen te bieden. De meningen en standpunten uitgedrukt in Industry Articles zijn die van de partner en niet noodzakelijk die van All About Circuits of zijn schrijvers.
Industriële robot
- Bouw een Raspberry Pi Cijferherkenner met TensorFlow en OpenCV
- PLC-functieblokken Aanroepen via OPC UA-clients: Een Praktische Gids
- Afval en energiekosten reduceren met autonoom robots
- Een Variational Autoencoder Bouwen met TensorFlow: Een Praktische Gids
- CNC-machinetending automatiseren met cobots: efficiëntie en precisie verhogen
- Beginner's Gids voor Yaskawa Motoman Robot Programmering: Snelheid & Nauwkeurigheid Verhogen
- Beginnergids: RoboDK Opzetten op Raspberry Pi
- Power-management beheersen met NXP i.MX RT500 crossover MCU's
- De NXP i.MX RT500 benutten voor DSP-gestuurde slimme apparaten: Multi-threading, XOS en de Cadence Fusion F1 Audio DSP
- Professionele gids voor epoxyhars voor kunstwerkconservatie
- Java Interfaces Uitgelegd: Hoe Ze Te Definiëren en Implementeren met Praktische Voorbeelden