package Ġcom . react n ativ et ensor iot flite Ċ Ċ import Ġai . doc . tensor io . core . model . Model Ċ import Ġai . doc . tensor io . core . model bundle . Model Bundle Ċ import Ġai . doc . tensor io . core . model bundle . Model Bundle . Model Bundle Exception Ċ import Ġai . doc . tensor io . core . utilities . Classification Helper Ċ import Ġai . doc . tensor io . t flite . model . T FL ite Model Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . util . Base 6 4 Ċ import Ġcom . facebook . react . bridge .* Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . lang . Exception Ċ import Ġjava . nio . ByteBuffer Ċ Ċ const Ġval ĠRN TI O Image Key Data Ġ= Ġ" RN TI O Image Key Data " Ċ const Ġval ĠRN TI O Image Key Format Ġ= Ġ" RN TI O Image Key Format " Ċ const Ġval ĠRN TI O Image Key Width Ġ= Ġ" RN TI O Image Key Width " Ċ const Ġval ĠRN TI O Image Key Height Ġ= Ġ" RN TI O Image Key Height " Ċ const Ġval ĠRN TI O Image Key Orientation Ġ= Ġ" RN TI O Image Key Orientation " Ċ Ċ class ĠTensor io T flite Module ( react Context : ĠReact ApplicationContext ) Ġ: ĠReact Context Base Java Module ( react Context ) Ġ{ ĊĊĠ Ġenum Ġclass ĠImage Format ( val Ġvalue : ĠInt ) Ġ{ ĊĠĠĠ ĠUnknown Ġ( 0 ), ĊĠĠĠ ĠAR GB ĠĠĠ Ġ( 1 ), ĊĠĠĠ ĠB GR A ĠĠĠ Ġ( 2 ), ĊĠĠĠ ĠJPEG ĠĠĠ Ġ( 3 ), ĊĠĠĠ ĠPNG ĠĠĠĠ Ġ( 4 ), ĊĠĠĠ ĠFile ĠĠĠ Ġ( 5 ), ĊĠĠĠ ĠAsset ĠĠ Ġ( 6 ); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġfun Ġvalue Of ( value : ĠInt ) Ġ= ĠImage Format . values (). first Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġenum Ġclass ĠImage Orientation ( val Ġvalue : ĠInt ) Ġ{ ĊĠĠĠ ĠUp ĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 ), ĊĠĠĠ ĠUp Mir rored ĠĠĠ Ġ( 2 ), ĊĠĠĠ ĠDown ĠĠĠĠĠĠĠĠĠ Ġ( 3 ), ĊĠĠĠ ĠDown Mir rored Ġ Ġ( 4 ), ĊĠĠĠ ĠLeft Mir rored Ġ Ġ( 5 ), ĊĠĠĠ ĠRight ĠĠĠĠĠĠĠĠ Ġ( 6 ), ĊĠĠĠ ĠRight Mir rored Ġ( 7 ), ĊĠĠĠ ĠLeft ĠĠĠĠĠĠĠĠĠ Ġ( 8 ); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġfun Ġvalue Of ( value : ĠInt ) Ġ= ĠImage Format . values (). first Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġmaps Ġpath Ġor Ġmodel Ġnames Ġto Ġloaded Ġmodels , Ġallowing Ġthe Ġmodule Ġto Ġload , ĊĠĠ Ġ* Ġand Ġuse Ġmore Ġthan Ġone Ġmodel Ġat Ġa Ġtime . ĊĠĠ Ġ*/ ĊĊĠ Ġprivate Ġval Ġmodels : ĠHashMap < String , ĠT FL ite Model > Ġ= ĠHashMap () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReact ĠNative Ġoverride Ġfor Ġthe Ġmodule Ġname ĊĠĠ Ġ*/ ĊĊĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġ" Tensor io T flite " ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReact ĠNative Ġoverride Ġfor Ġexported Ġconstants ĊĠĠ Ġ*/ ĊĊĠ Ġoverride Ġfun Ġget Constants (): ĠMap < String , ĠAny > Ġ{ ĊĠĠĠ Ġval Ġconstants : ĠHashMap < String , ĠAny > Ġ= ĠHashMap () ĊĊĠĠĠ Ġconstants [" image Key Data "] ĠĠĠĠĠĠĠĠ Ġ= ĠRN TI O Image Key Data ĊĠĠĠ Ġconstants [" image Key Format "] ĠĠĠĠĠĠ Ġ= ĠRN TI O Image Key Format ĊĠĠĠ Ġconstants [" image Key Width "] ĠĠĠĠĠĠĠ Ġ= ĠRN TI O Image Key Width ĊĠĠĠ Ġconstants [" image Key Height "] ĠĠĠĠĠĠ Ġ= ĠRN TI O Image Key Height ĊĠĠĠ Ġconstants [" image Key Orientation "] Ġ Ġ= ĠRN TI O Image Key Orientation ĊĊĠĠĠ Ġconstants [" image Type Unknown "] ĠĠĠĠ Ġ= ĠImage Format . Unknown . value ĊĠĠĠ Ġconstants [" image Type ARGB "] ĠĠĠĠĠĠĠ Ġ= ĠImage Format . ARGB . value ĊĠĠĠ Ġconstants [" image Type BGR A "] ĠĠĠĠĠĠĠ Ġ= ĠImage Format . BGR A . value ĊĠĠĠ Ġconstants [" image Type JPEG "] ĠĠĠĠĠĠĠ Ġ= ĠImage Format . JPEG . value ĊĠĠĠ Ġconstants [" image Type PNG "] ĠĠĠĠĠĠĠĠ Ġ= ĠImage Format . PNG . value ĊĠĠĠ Ġconstants [" image Type File "] ĠĠĠĠĠĠĠ Ġ= ĠImage Format . File . value ĊĠĠĠ Ġconstants [" image Type Asset "] ĠĠĠĠĠĠ Ġ= ĠImage Format . Asset . value ĊĊĠĠĠ Ġconstants [" image Orientation Up "] ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= ĠImage Orientation . Up . value ĊĠĠĠ Ġconstants [" image Orientation Up Mir rored "] ĠĠĠĠ Ġ= ĠImage Orientation . Up Mir rored . value ĊĠĠĠ Ġconstants [" image Orientation Down "] ĠĠĠĠĠĠĠĠĠĠ Ġ= ĠImage Orientation . Down . value ĊĠĠĠ Ġconstants [" image Orientation Down Mir rored "] ĠĠ Ġ= ĠImage Orientation . Down Mir rored . value ĊĠĠĠ Ġconstants [" image Orientation Left Mir rored "] ĠĠ Ġ= ĠImage Orientation . Left Mir rored . value ĊĠĠĠ Ġconstants [" image Orientation Right "] ĠĠĠĠĠĠĠĠĠ Ġ= ĠImage Orientation . Right . value ĊĠĠĠ Ġconstants [" image Orientation Right Mir rored "] Ġ Ġ= ĠImage Orientation . Right Mir rored . value ĊĠĠĠ Ġconstants [" image Orientation Left "] ĠĠĠĠĠĠĠĠĠĠ Ġ= ĠImage Orientation . Left . value ĊĊĠĠĠ Ġreturn Ġconstants ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠB rid ged Ġmethod Ġthat Ġloads Ġa Ġmodel Ġgiven Ġa Ġmodel Ġpath . ĠRelative Ġpaths Ġwill Ġbe Ġloaded Ġas Ġassets ĊĠĠ Ġ* Ġfrom Ġthe Ġapplication Ġbundle . ĊĠĠ Ġ*/ ĊĊĠ Ġ@ React Method ĊĠ Ġfun Ġload ( path : ĠString , Ġname : ĠString ?, Ġpromise : ĠPromise ) Ġ{ ĊĠĠĠ Ġval Ġhash name Ġ= Ġname Ġ?: Ġpath ĊĊĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠ Ġ// ĠReject Ġif Ġmodel Ġwith Ġname Ġis Ġalready Ġloaded ĊĊĠĠĠĠĠ Ġif Ġ( models [ hash name ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpromise . reject (" ai . doc . tensor io . t flite . rn : load : name - in - use ", Ġ" Name Ġalready Ġuse . ĠUse Ġa Ġdifferent Ġname , Ġand Ġdo Ġnot Ġreload Ġa Ġmodel Ġwithout Ġun loading Ġit Ġfirst ") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// ĠLoad Ġthe Ġmodel ĊĊĠĠĠĠĠ Ġval Ġbundle Ġ= Ġif Ġ( is Absolute File path ( path )) Ġ{ ĊĠĠĠĠĠĠĠ ĠModel Bundle . bundle With File ( File ( path )) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠModel Bundle . bundle With Asset ( react ApplicationContext , Ġpath ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġmodel Ġ= Ġbundle . new Model () Ġas ĠT FL ite Model ĊĊĠĠĠĠĠ Ġ// ĠCache Ġit ĊĊĠĠĠĠĠ Ġmodels [ hash name ] Ġ= Ġmodel ĊĠĠĠĠĠ Ġpromise . resolve ( true ) ĊĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠModel Bundle Exception ) Ġ{ ĊĠĠĠĠĠ Ġpromise . reject ( e ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠB rid ged Ġmethod Ġthat Ġun loads Ġa Ġmodel , Ġfree ing Ġthe Ġunderlying Ġresources . ĊĠĠ Ġ*/ ĊĊĠ Ġ@ React Method ĊĠ Ġfun Ġun load ( name : ĠString , Ġpromise : ĠPromise ) Ġ{ ĊĠĠĠ Ġif Ġ( models [ name ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġpromise . reject (" ai . doc . tensor io . t flite . rn : unload : model - not - found ", Ġ" No Ġmodel Ġwith Ġthis Ġname Ġwas Ġfound ") ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġmodels [ name ]?. unload () ĊĠĠĠ Ġmodels . remove ( name ) ĊĊĠĠĠ Ġpromise . resolve ( true ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠB rid ged Ġmethod Ġreturns ĠYES Ġif Ġmodel Ġis Ġtrain able , ĠNO Ġotherwise . ĊĠĠ Ġ* ĠTF ĠLite Ġmodels Ġwill Ġalways Ġreturn ĠNO ĊĠĠ Ġ*/ ĊĊĠ Ġ@ React Method ĊĠ Ġfun Ġis Train able ( name : ĠString , Ġpromise : ĠPromise ) Ġ{ ĊĠĠĠ Ġval Ġtr ains Ġ= Ġmodels [ name ]?. bundle ?. modes ?. tr ains () Ġ?: Ġfalse ĊĠĠĠ Ġpromise . resolve ( tr ains ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠB rid ged Ġmethods Ġthat Ġperforms Ġinference Ġwith Ġa Ġloaded Ġmodel Ġand Ġreturns Ġthe Ġresults . ĊĠĠ Ġ*/ ĊĊĠ Ġ@ React Method ĊĠ Ġfun Ġrun ( name : ĠString , Ġdata : ĠRead able Map , Ġpromise : ĠPromise ) Ġ{ ĊĠĠĠ Ġif Ġ( models [ name ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġpromise . reject (" ai . doc . tensor io . t flite . rn : run : model - not - found ", Ġ" No Ġmodel Ġwith Ġthis Ġname Ġwas Ġfound ") ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmodel Ġ= Ġmodels [ name ] Ġas ĠModel ĊĠĠĠ Ġval Ġhash map Ġ= ĠMap Util . toMap ( data ) ĊĊĠĠĠ Ġ// ĠEnsure Ġthat Ġthe Ġprovided Ġkeys Ġmatch Ġthe Ġmodel 's Ġexpected Ġkeys , Ġor Ġreturn Ġan Ġerror ĊĊĠĠĠ Ġif Ġ(! model . io . inputs . keys (). equals ( hash map . keys )) Ġ{ ĊĠĠĠĠĠ Ġpromise . reject (" ai . doc . tensor io . t flite . rn : run : input - mismatch ", Ġ" Provided Ġinputs Ġdo Ġnot Ġmatch Ġexpected Ġinputs ") ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPrepare Ġinputs , Ġconverting Ġbase 6 4 Ġencoded Ġimage Ġdata Ġor Ġreading Ġimage Ġdata Ġfrom Ġthe Ġfilesystem ĊĊĠĠĠ Ġval Ġprepared Inputs Ġ= Ġprepared Inputs ( hash map , Ġmodel ) ĊĊĠĠĠ Ġif Ġ( prepared Inputs Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġpromise . reject (" ai . doc . tensor io . t flite . rn : run : prepared - inputs ", Ġ" Unable Ġto Ġprepare Ġinputs Ġfrom Ġreact Ġnative Ġfor Ġinference ") ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPerform Ġinference ĊĊĠĠĠ Ġval Ġoutputs : ĠMap < String , ĠAny > ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġoutputs Ġ= Ġmodel . run On ( prepared Inputs ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġpromise . reject (" ai . doc . tensor io . t flite . rn : run : inference - exception ", Ġe ) ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPrepare Ġoutputs , Ġconverting Ġpixel Ġbuffer Ġoutputs Ġto Ġbase 6 4 Ġencoded Ġj peg Ġstring Ġdata ĊĊĠĠĠ Ġval Ġprepared Outputs Ġ= Ġprepared Outputs ( outputs , Ġmodel ) ĊĊĠĠĠ Ġif Ġ( prepared Outputs Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġpromise . reject (" ai . doc . tensor io . t flite . rn : run : prepared - outputs ", Ġ" Unable Ġto Ġprepare Ġoutputs Ġfor Ġreturn Ġto Ġreact Ġnative ") ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReturn Ġresults Ġin ĠReact ĠNative Ġformat ĊĊĠĠĠ Ġpromise . resolve ( Map Util . to Writable Map ( prepared Outputs )) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠB rid ged Ġutility Ġmethod Ġfor Ġimage Ġclassification Ġmodels Ġthat Ġreturns Ġthe ĊĠĠ Ġ* Ġtop ĠN Ġprobability Ġlabel - scores . ĊĠĠ Ġ*/ ĊĊĠ Ġ// ĠTODO : ĠRemove Ġand Ġimplement Ġin Ġj avas ript ĊĊĠ Ġ@ React Method ĊĠ Ġfun Ġtop N ( count : ĠInt , Ġthreshold : ĠFloat , Ġclass ifications : ĠRead able Map , Ġpromise : ĠPromise ) Ġ{ ĊĠĠĠ Ġval Ġhash map Ġ= ĠMap Util . toMap ( class ifications ) Ġas ĠMap < String , ĠDouble > ĊĠĠĠ Ġval Ġfloat map Ġ= Ġhash map . map Ġ{ Ġit . key Ġto Ġit . value . toFloat () Ġ}. toMap () ĊĠĠĠ Ġval Ġtop N Ġ= ĠClassification Helper . top N ( float map , Ġcount , Ġthreshold ) ĊĠĠĠ Ġval Ġtop N Map Ġ= ĠHashMap < String , ĠFloat >() ĊĊĠĠĠ Ġfor Ġ( entry Ġin Ġtop N ) Ġ{ ĊĠĠĠĠĠ Ġtop N Map [ entry . key ] Ġ= Ġentry . value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReturn Ġresults Ġin ĠReact ĠNative Ġformat ĊĊĠĠĠ Ġpromise . resolve ( Map Util . to Writable Map ( top N Map Ġas ĠMap < String , ĠAny > )) ĊĠ Ġ} ĊĊĠ Ġ// ĠLoad ĠUtilities ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthis Ġis Ġan Ġabsolute Ġfilepath , Ġfalse Ġotherwise . ĠFile paths Ġthat Ġare Ġnot Ġabsolute ĊĠĠ Ġ* Ġwill Ġbe Ġtreated Ġas Ġpaths Ġto ĠAssets Ġrather Ġthan Ġfiles Ġon Ġthe Ġfilesystem . ĊĠĠ Ġ*/ ĊĊĠ Ġfun Ġis Absolute File path ( path : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġpath . startsWith (" file :/ ") Ġ|| Ġpath . startsWith ("/") ĊĠ Ġ} ĊĊĠ Ġ// ĠInput / Output ĠPre paration ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠPrep ares Ġthe Ġmodel Ġinputs Ġsent Ġfrom Ġjavascript Ġfor Ġinference . ĠImage Ġinputs Ġare Ġencoded ĊĠĠ Ġ* Ġas Ġa Ġbase 6 4 Ġstring Ġand Ġmust Ġbe Ġdecoded Ġand Ġconverted Ġto Ġpixel Ġbuffers . ĠOther Ġinputs Ġare ĊĠĠ Ġ* Ġtaken Ġas Ġis . ĊĠĠ Ġ*/ ĊĊĠ Ġprivate Ġfun Ġprepared Inputs ( inputs : ĠMap < String , ĠAny >, Ġmodel : ĠModel ): ĠMap < String , ĠAny >? Ġ{ ĊĠĠĠ Ġval Ġprepared Inputs Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠ Ġvar Ġerror Ġ= Ġfalse ĊĊĠĠĠ Ġfor Ġ( layer Ġin Ġmodel . io . inputs . all ()) Ġ{ ĊĠĠĠĠĠ Ġlayer . do Case ( ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠVector Ġlayer ĊĠĠĠĠĠĠĠĠĠ Ġprepared Inputs [ layer . name ] Ġ= Ġinputs [ layer . name ] Ġas ĠAny ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠImage Ġlayer ĊĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġbitmap For Input ( inputs [ layer . name ] Ġas ĠMap < String , ĠAny >) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprepared Inputs [ layer . name ] Ġ= Ġbitmap ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠBytes Ġlayer ĊĠĠĠĠĠĠĠĠĠ Ġprepared Inputs [ layer . name ] Ġ= Ġinputs [ layer . name ] Ġas ĠAny ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( error ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġprepared Inputs ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠPrep ares Ġthe Ġmodel Ġoutputs Ġfor Ġconsumption Ġby Ġjavascript . ĠPixel Ġbuffer Ġoutputs Ġare Ġconverted ĊĠĠ Ġ* Ġto Ġbase 6 4 Ġstrings . ĠOther Ġoutputs Ġare Ġtaken Ġas Ġis . ĊĠĠ Ġ*/ ĊĊĠ Ġprivate Ġfun Ġprepared Outputs ( outputs : ĠMap < String , ĠAny >, Ġmodel : ĠModel ): ĠMap < String , ĠAny >? Ġ{ ĊĠĠĠ Ġval Ġprepared Outputs Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠ Ġvar Ġerror Ġ= Ġfalse ĊĊĠĠĠ Ġfor Ġ( layer Ġin Ġmodel . io . outputs . all ()) Ġ{ ĊĠĠĠĠĠ Ġlayer . do Case ( ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠVector Ġlayer ĊĠĠĠĠĠĠĠĠĠ Ġprepared Outputs [ layer . name ] Ġ= Ġoutputs [ layer . name ] Ġas ĠAny ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠImage Ġlayer ĊĠĠĠĠĠĠĠĠĠ Ġval Ġencoded Ġ= Ġbase 6 4 JPEG Data For Bitmap ( outputs [ layer . name ] Ġas ĠBitmap ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( encoded Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprepared Outputs [ layer . name ] Ġ= Ġencoded ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠBytes Ġlayer ĊĠĠĠĠĠĠĠĠĠ Ġprepared Outputs [ layer . name ] Ġ= Ġoutputs [ layer . name ] Ġas ĠAny ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( error ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġprepared Outputs ĊĠ Ġ} ĊĊĠ Ġ// ĠImage ĠUtilities ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠConverts Ġa Ġpixel Ġbuffer Ġoutput Ġto Ġa Ġbase 6 4 Ġencoded Ġstring Ġthat Ġcan Ġbe Ġconsumed Ġby ĠReact ĠNative . ĊĠĠ Ġ* ĠSee Ġhttps :// stackoverflow . com / questions / 9 2 2 4 0 5 6 / android - bitmap - to - base 6 4 - string ĊĠĠ Ġ*/ ĊĊĠ Ġprivate Ġfun Ġbase 6 4 JPEG Data For Bitmap ( bitmap : ĠBitmap ): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġstream Ġ= ĠByteArrayOutputStream () ĊĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , Ġstream ) ĊĊĠĠĠ Ġval Ġbytes Ġ= Ġstream . toByteArray () ĊĠĠĠ Ġreturn ĠBase 6 4 . encode ToString ( bytes , ĠBase 6 4 . DEFAULT ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠConverts Ġbase 6 4 Ġencoded ĠJPEG Ġor ĠPNG Ġto ĠBitmap ĊĠĠ Ġ*/ ĊĊĠ Ġprivate Ġfun Ġbitmap For Base 6 4 Data ( string : ĠString ): ĠBitmap ? Ġ{ ĊĠĠĠ Ġval Ġbytes Ġ= ĠBase 6 4 . decode ( string , ĠBase 6 4 . DEFAULT ) ĊĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( bytes , Ġ 0 , Ġbytes . size ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠConverts Ġbase 6 4 Ġencoded Ġpixels Ġto ĠBitmap ĊĠĠ Ġ*/ ĊĊĠ Ġprivate Ġfun Ġbitmap For Base 6 4 Pixels ( string : ĠString , Ġwidth : ĠInt , Ġheight : ĠInt , Ġformat : ĠBitmap . Config ): ĠBitmap Ġ{ ĊĠĠĠ Ġval Ġbytes Ġ= ĠBase 6 4 . decode ( string , ĠBase 6 4 . DEFAULT ) ĊĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠ Ġval Ġint buffer Ġ= ĠByteBuffer . wrap ( bytes ). as Int Buffer () ĊĠĠĠ Ġval Ġints Ġ= ĠInt Array ( int buffer . remaining ()) ĊĊĠĠĠ Ġint buffer . get ( ints ) ĊĠĠĠ Ġbitmap . set Pixels ( ints , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĊĠĠĠ Ġreturn Ġbitmap ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠPrep ares Ġa Ġpixel Ġbuffer Ġinput Ġgiven Ġan Ġimage Ġencoding Ġdictionary Ġsent Ġfrom Ġjavascript , ĊĠĠ Ġ* Ġconverting Ġa Ġbase 6 4 Ġencoded Ġstring Ġor Ġreading Ġdata Ġfrom Ġthe Ġfile Ġsystem . ĊĠĠ Ġ*/ ĊĊĠ Ġ// ĠTODO : ĠTest Ġall Ġconversions ĊĊĠ Ġprivate Ġfun Ġbitmap For Input ( input : ĠMap < String , ĠAny >): ĠBitmap ? Ġ{ ĊĠĠĠ Ġval Ġformat Ġ= ĠImage Format . valueOf (( input [" RN TI O Image Key Format "] Ġas ĠDouble ). toInt ()) ĊĊĠĠĠ Ġreturn Ġwhen Ġ( format ) Ġ{ ĊĠĠĠĠĠ ĠImage Format . ARGB Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġinput [ RN TI O Image Key Data ] Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġ( input [ RN TI O Image Key Width ] Ġas ĠDouble ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġ( input [ RN TI O Image Key Height ] Ġas ĠDouble ). toInt () ĊĠĠĠĠĠĠĠ Ġbitmap For Base 6 4 Pixels ( string , Ġwidth , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠImage Format . BGR A Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġinput [ RN TI O Image Key Data ] Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġ( input [ RN TI O Image Key Width ] Ġas ĠDouble ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġ( input [ RN TI O Image Key Height ] Ġas ĠDouble ). toInt () ĊĠĠĠĠĠĠĠ Ġbitmap For Base 6 4 Pixels ( string , Ġwidth , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠImage Format . JPEG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase 6 4 Ġ= Ġinput [ RN TI O Image Key Data ] Ġas ĠString ĊĠĠĠĠĠĠĠ Ġbitmap For Base 6 4 Data ( base 6 4 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠImage Format . PNG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase 6 4 Ġ= Ġinput [ RN TI O Image Key Data ] Ġas ĠString ĊĠĠĠĠĠĠĠ Ġbitmap For Base 6 4 Data ( base 6 4 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠImage Format . File Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilepath Ġ= Ġinput [ RN TI O Image Key Data ] Ġas ĠString ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode File ( filepath ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠImage Format . Asset Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġinput [ RN TI O Image Key Data ] Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġreact ApplicationContext . assets . open ( name ) ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode Stream ( stream ); ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠImage Format . Unknown Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ