Tensorflow ed Android come fare ?
In questa guida cercherò di illustrare come importare un modello per il riconoscimento di immagini basato su Tensorflow in android.
I passi iniziali per la configuraione non sonon complessi.
Innanzitutto per poter utilizzare Tensorflow su Android, bisogna scaricare da GitHub il seguente repository in cui troverete il progetto ed alcuni esempi per android:
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android
Ovviamente per poter compilare e modificare il codice con comodità servirà un IDE; nella fattispecie vi consiglio di installare Android Studio, che potete scaricare da qui:
https://developer.android.com/studio/
Vediamo come fare per importare il progetto di esempio. Anche inquesto caso i passi sono molto semplici :
- Procedere con l’estrazione dell’archivio relativo a Tensorflow.
- Aprire Android Studio e importare il progetto.
Per l’importazione basterà cliccare su “import project” accedere nella cartella estratta fino al path con build.gradle file:
tensorflow-master/tensorflow/examples/android/build.gradle
ed a questo punto cliccando due volte su build.gradle partirà la procedura di importazione del progetto in Android Studio.
N.B.
Nel caso in cui l’import (ADT,Gradle etc etc ) non funzionasse, riprovare ad importare facendo una procedura diversa , ovvero aprire il progetto di esempio come progetto già esistente posizionandosi sulla directory del progetto, nel nostro caso android. I risultato dovrebbe essere qualcosa di sinile a quanto mostratto nella figura segiente.
Compilazione del progetto
Terminata procedura di importazione troveremo una serie di file e cartelle in Project.
La prima cosa da fare è quella di aprire il file build.gradle e modificare la seguente riga in questo modo:
def nativeBuildSystem = 'cmake'
Possiamo, quindi, compilare il codice attraverso il comando Build -> Make Project.
Un piccolo suggerimento da tener presente; poichè alcuni errori di compilazione restano all’interno della cache di Android Studio e pertanto non vengono risolti tra una build e l’altra, il cosiglio è per evitare problemi di eseguire preliminarmente il comando Build -> Rebuild Project, oppure cancellare la cache attraverso il comando File -> Invalidate Caches / Restart e procedere con la ricompilazione.
Nel caso in cui la compilazione del progetto non andasse subito a buon fine a causa della mancanza di alcune librerie, sarà sufficiente seguire i messaggi di errore risultanti dalla fase di compilazione ed installare le dipendenze mancanti.
A questo punto potrete già installare sul votro dispositivo l’app di esempio che in genere vi consentirà di testare la Detect e la Classificazione su un modello pre-addestrato generalemnte la ssd_mobilenet_v1 con il dataset COCO.
Per installare sul vostro dispositivo andorid potete utilizzare adb.
Compilato il progetto cercate la dierectory dove viene deployata l’app di esempio , solitamente android studio vi dare indicazione con una notifica del path e lanciate il comnado
adb install <nome-app.apk>
Importazione di un modello personalizzato
Per il nostro obiettivo, dobbiamo capire come esportare un modello addestrato attraverso tensorflow per in nostri scopi, in un formato compatibile per android. In merito al training di un modello custom, consiglio di leggere l’articolo : “Come addestrare una intelligenza …”
Bene partiamo dal presupposto che avete eseguito correttamente il training su un vostro dataset; cosa ci serve per esportare in android? sarà sufficiente esportare il modello utilizzando il comando export_tflite_ssd_graph
La sintassi da eseguirre sarà qualcosa di simile, da modificare caso per caso con i paramentri corretti. Nel mio caso il file di configurazione del modello di partenza l’ho salvato in training (training/ssd_inception_v3_pets.config) così come i vari checkpoint della fase di training (training/model.ckpt-<ckpt> ) .
il ckpt da considerare è ovviamente l’ultimo e corrisponde al valore più alto; per mia comodità utilizzo questo comando per estrarre il valore del ckpt in automatico:
ckpt=$( ls -lrt ./training/model.ckpt-*.index| tail -1 | cut -d "." -f3 | cut -d"-" -f2)
e passarlo al comando di esportazione del modello in android:
python3.5 export_tflite_ssd_graph.py \ --pipeline_config_path training/ssd_inception_v3_pets.config \ --trained_checkpoint_prefix training/model.ckpt-$ckpt \ --output_directory=./inference_graph_lite/ \ --add_postprocessing_op=true
Una volta esportato il modello , si può procedere con l’importazione dello stesso. Pe rprima cosa bisogna copiare i file esportati in particolare il modello la labelmap ad esso associata all’interno della cartella “assets”, posta nella directory principale del progetto. A questo punto sarà sufficente editare il file DetectorActivity.java e modificare le seguenti righe nel modo indicato :
private static final String TF_OD_API_MODEL_FILE = "file:///android_asset/NOME_MODELLO_IMPORTATO.pb"; private static final String TF_OD_API_LABELS_FILE = "file:///android_asset/NOME_LABELMAP_IMPORTATA.txt";
Completata la fase di editing sarà sufficiente ricompilare il progetto , ricreare la nuova apk e procedere con il deploy della stessa sul dispositivo android.
Ovviamente non tutto sarà così lineare, pertanto valutate la procedura e l’articolo come una base di partenza per iniziare a districarvi in questo contesto.
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments