Flutter, TensorFlow Lite e il riconoscimento della scrittura - Parte 1/2

Una delle caratteristiche interessanti di Flutter è la possibilità di integrare facilmente reti neurali per il riconoscimento del testo. In questo articolo e in quello successivo, esploreremo come Flutter può essere utilizzato per creare un'app di riconoscimento del testo (specificamente cifre numeriche tracciate a mano) abbastanza accurata e funzionale, grazie all'utilizzo di TensorFlow Lite.

TensorFlow Lite

TensorFlow è una libreria open source per il machine learning. È stata sviluppata da Google ed è ampiamente utilizzata nel settore dell'intelligenza artificiale per la creazione di modelli di predizione e classificazione. TensorFlow Lite è una versione di TensorFlow progettata per essere utilizzata su dispositivi mobili e altre piattaforme con risorse hardware limitate, che fornisce una serie di API per l'utilizzo dei modelli su dispositivi mobili, rendendo più facile la creazione di app che utilizzano il machine learning.

Combinando Flutter e TensorFlow Lite, è possibile creare app per dispositivi mobili che utilizzano il riconoscimento della scrittura, per interpretare e convertire in formato digitale i numeri scritti a mano. I modelli di riconoscimento immagini TensorFlow Lite sono modelli di machine learning addestrati utilizzando grandi quantità di dati e sono progettati per riconoscere testo, oggetti, animali, persone e altri elementi all'interno di immagini o video o in generale per la classificazione di immagini in categorie predefinite.

La rete neurale dei modelli MNIST

Per gli scopi limitati di questo progetto, useremo i modelli di riconoscimento immagini TensorFlow Lite di MNIST: sono modelli di machine learning progettati per riconoscere le cifre scritte a mano all'interno di immagini. Il modello MNIST è un dataset di machine learning ampiamente utilizzato per il test e il training di modelli di riconoscimento immagini addestrato su un insieme di oltre 70.000 immagini di cifre scritte a mano etichettate con il corrispondente numero per poter effettuare una classificazione con un'elevata precisione.

La rete neurale utilizzata dal modello MNIST presenta un livello di input con 784 nodi (neuroni) corrispondenti agli elementi di cui è composta un'immagine di 28x28 pixel, un livello nascosto 128 nodi e un livello di output con 10 nodi corrispondenti alle cifre da 0 a 9.

L'applicazione del modello permetterà di ottenere per ogni immagine, un valore di confidenza associato ad ognuno dei nodi di uscita, ovvero un valore che esprime la probabilità che l’immagine in ingresso appartenga a quella specifica classe, permettendo di stimare quello con maggiore probabilità come classe candidata di appartenenza.

Il progetto Flutter 

Per poter utilizzare il modello MNIST sopra descritto, l'applicazione che andremo a scrivere (nel prossimo articolo) dovrà prevedere alcuni elementi essenziali:

  • avremo bisogno di un canvas su cui l'utente potrà disegnare a mano le cifre; 
  • avremo la necessità di riportare l'immagine ottenuta dal canvas nelle dimensioni di 28x28 pixel, in scala di grigio;
  • dovremo determinare per ogni punto dell'immagine un valore normalizzato nel range [0..255] che ne rappresenta il colore e costruire la lista di valori da dare in pasto al modello come input;
  • dovremo poter eseguire il modello di classificazione 
  • dovremmo visualizzare per ogni etichetta/cifra il livello di confidenza ottenuto

Abbiamo discusso degli elementi fondamentali ed anticipato alcuni requisiti della nostra app: non ci resta che procedere !

Commenti