package Ġru . ig la . tf profiler . core . t flite Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Asset FileDescriptor Ċ import Ġandroid . content . res . Asset Manager Ċ import Ġorg . tensorflow . lite . support . metadata . Metadata Extractor Ċ import Ġru . ig la . tf profiler . models _ list . domain . Model Entity Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io .* Ċ import Ġjava . nio . Mapped ByteBuffer Ċ import Ġjava . nio . channels . File Channel Ċ import Ġjava . util .* Ċ import Ġkotlin . math . exp Ċ Ċ object ĠTensorFlow Utils Ġ{ ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġload Label List ( asset Manager : ĠAsset Manager , Ġlabel Path : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġasset Manager . open ( label Path ). use Ġ{ Ġins Ġ-> Ġreturn Ġload Label List ( ins ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġload Label List ( inputStream : ĠInputStream ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlabel List : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ ĠBufferedReader ( InputStream Reader ( inputStream )). use Ġ{ Ġreader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( reader . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel List . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlabel List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMemory - map Ġthe Ġmodel Ġfile Ġin ĠAssets . ĊĠĠĠĠ Ġ* ĠPre load Ġand Ġmemory Ġmap Ġthe Ġmodel Ġfile , Ġreturning Ġa ĠM apped ByteBuffer Ġcontaining Ġthe Ġmodel . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġload Model File From Assets ( context : ĠContext , Ġmodel Filename : ĠString ?): ĠM apped ByteBuffer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġasset Manager Ġ= Ġcontext . assets ĊĠĠĠĠĠĠĠ Ġasset Manager . open Fd ( model Filename !! ). use Ġ{ ĠfileDescriptor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileInputStream ( file Descriptor . file Descriptor ). use Ġ{ ĠinputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Channel Ġ= ĠinputStream . channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Offset Ġ= ĠfileDescriptor . start Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclared Length Ġ= ĠfileDescriptor . declared Length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfile Channel . map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Channel . Map Mode . READ _ ONLY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclared Length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġload Model File From External ( model Filename : ĠString ): ĠM apped ByteBuffer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( model Filename ) ĊĠĠĠĠĠĠĠ ĠFileInputStream ( file ). use Ġ{ ĠinputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Channel Ġ= ĠinputStream . channel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfile Channel . map ( File Channel . Map Mode . READ _ ONLY , Ġ 0 , Ġfile . length ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Asset File Exists ( context : ĠContext , Ġfilename : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġasset Manager Ġ= Ġcontext . resources . assets ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset Manager . open ( filename ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget MetaData ( context : ĠContext , Ġmodel Filename : ĠString ): ĠMetadata Extractor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġload Model File From Assets ( context , Ġmodel Filename ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Extractor Ġ= ĠMetadata Extractor ( m ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! metadata Extractor . has Metadata ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġmetadata Extractor ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetModel FileSize ( context : ĠContext , Ġmodel Entity : ĠModel Entity ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( model Entity . model Type . is Custom Model ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile ( model Entity . model File ). length () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel Filename Ġ= Ġmodel Entity . model File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . assets . open Fd ( model Filename ). use Ġ{ Ġfd Ġ-> Ġreturn Ġfd . length Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAsset FileDescriptor . UNKNOWN _ LENGTH ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsig moid ( x : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 1 . 0 Ġ/ Ġ( 1 . 0 Ġ+ Ġexp (- x . toDouble ())) ). toFloat () ĊĠĠĠ Ġ} Ċ }