package Ġcom . ml . projects . age _ gender detection Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġorg . tensorflow . lite . Interpreter Ċ import Ġorg . tensorflow . lite . support . common . ops . Normalize Op Ċ import Ġorg . tensorflow . lite . support . image . Image Processor Ċ import Ġorg . tensorflow . lite . support . image . Tensor Image Ċ import Ġorg . tensorflow . lite . support . image . ops . Resize Op Ċ Ċ // ĠHelper Ġclass Ġfor Ġage Ġestimation Ġmodel Ċ class ĠAge Estimation Model Ġ{ ĊĊĠĠĠ Ġ// ĠInput Ġimage Ġsize Ġfor Ġour Ġmodel ĊĠĠĠ Ġprivate Ġval Ġinput Image Size Ġ= Ġ 2 0 0 ĊĊĠĠĠ Ġ// ĠImage Ġprocessor Ġfor Ġmodel Ġinputs . ĊĠĠĠ Ġ// ĠResize Ġ+ ĠNormalize ĊĠĠĠ Ġprivate Ġval Ġinput Image Processor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Processor . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( Resize Op ( input Image Size , Ġinput Image Size , ĠResize Op . Resize Method . B IL INE AR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( Normalize Op ( 0 f , Ġ 2 5 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġ// ĠThe Ġmodel Ġreturns Ġa Ġnormalized Ġvalue Ġfor Ġthe Ġage Ġi . e Ġin Ġrange Ġ( Ġ 0 Ġ, Ġ 1 Ġ]. ĊĠĠĠ Ġ// ĠTo Ġget Ġthe Ġage , Ġwe Ġmultiply Ġthe Ġmodel 's Ġoutput Ġwith Ġp . ĊĠĠĠ Ġprivate Ġval Ġp Ġ= Ġ 1 1 6 ĊĊĠĠĠ Ġ// ĠTime Ġtaken Ġby Ġthe Ġmodel Ġ( Ġin Ġmilliseconds Ġ) Ġto Ġperform Ġthe Ġinference . ĊĠĠĠ Ġvar Ġinference Time Ġ: ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġ// ĠInterpreter Ġobject Ġto Ġuse Ġthe ĠT FL ite Ġmodel . ĊĠĠĠ Ġvar Ġinterpreter Ġ: ĠInterpreter ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠGiven Ġan Ġinput Ġimage , Ġreturn Ġthe Ġestimated Ġage . ĊĠĠĠ Ġ// ĠNote : ĠThis Ġis Ġa Ġsus pended Ġfunction , Ġand Ġwill Ġrun Ġwithin Ġa ĠCor outine Scope . ĊĠĠĠ Ġsuspend Ġfun Ġpredict Age ( image : ĠBitmap ) Ġ= Ġwith Context ( ĠDispatch ers . Main Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġ// ĠInput Ġimage Ġtensor Ġshape Ġ-> Ġ[ Ġ 1 Ġ, Ġ 2 0 0 Ġ, Ġ 2 0 0 Ġ, Ġ 3 Ġ] ĊĠĠĠĠĠĠĠ Ġval Ġtensor Input Image Ġ= ĠTensor Image . from Bitmap ( image ) ĊĠĠĠĠĠĠĠ Ġ// ĠOutput Ġtensor Ġshape Ġ-> Ġ[ Ġ 1 Ġ, Ġ 1 Ġ] ĊĠĠĠĠĠĠĠ Ġval Ġage Output Array Ġ= ĠArray ( 1 ){ ĠFloat Array ( 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġprocessed Image Buffer Ġ= Ġinput Image Processor . process ( tensor Input Image ). buffer ĊĠĠĠĠĠĠĠ Ġinterpreter ?. run ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Image Buffer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġage Output Array ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġinference Time Ġ= ĠSystem . currentTimeMillis () Ġ- Ġstart ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġage Output Array [ 0 ][ 0 ] Ġ* Ġp ĊĠĠĠ Ġ} Ċ } ĊĊĊĊ