package Ġcom . ume sh sing h . face detection . kotlin Ċ Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . os . Build . VERSION _ CODES Ċ import Ġandroid . os . System Clock Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Gu arded By Ċ import Ġandroidx . camera . core . Experimental Get Image Ċ import Ġandroidx . camera . core . Image Proxy Ċ import Ġcom . google . android . gms . tasks . On Failure Listener Ċ import Ġcom . google . android . gms . tasks . On Success Listener Ċ import Ġcom . google . android . gms . tasks . Task Ċ import Ġcom . google . android . gms . tasks . Task Executors Ċ import Ġcom . google . android . gms . tasks . Tasks Ċ import Ġcom . google . android . od ml . image . Bitmap Ml Image Builder Ċ import Ġcom . google . android . od ml . image . ByteBuffer Ml Image Builder Ċ import Ġcom . google . android . od ml . image . Media Ml Image Builder Ċ import Ġcom . google . android . od ml . image . Ml Image Ċ import Ġcom . google . ml kit . common . Ml Kit Exception Ċ import Ġcom . google . ml kit . vision . common . Input Image Ċ import Ġcom . ume sh sing h . face detection . Bitmap Utils Ċ import Ġcom . ume sh sing h . face detection . Camera Image Graphic Ċ import Ġcom . ume sh sing h . face detection . Frame Metadata Ċ import Ġcom . ume sh sing h . face detection . Graphic Overlay Ċ import Ġcom . ume sh sing h . face detection . Inference Info Graphic Ċ import Ġcom . ume sh sing h . face detection . Scoped Executor Ċ import Ġcom . ume sh sing h . face detection . Vision Image Processor Ċ import Ġcom . ume sh sing h . face detection . preference . Preference Utils Ċ import Ġjava . lang . Math . max Ċ import Ġjava . lang . Math . min Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . util . Timer Ċ import Ġjava . util . Timer Task Ċ Ċ abstract Ġclass ĠVision Processor Base < T >( context : ĠContext ) Ġ: ĠVision Image Processor Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġconst Ġval ĠMAN UAL _ TEST ING _ LOG Ġ= Ġ" Log Tag For Test " ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Vision Processor Base " ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġactivity Manager : ĠActivity Manager Ġ= ĊĠĠĠ Ġcontext . getSystem Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ĊĠ Ġprivate Ġval Ġfps Timer Ġ= ĠTimer () ĊĠ Ġprivate Ġval Ġexecutor Ġ= ĠScoped Executor ( Task Executors . MAIN _ THREAD ) ĊĊĠ Ġ// ĠWhether Ġthis Ġprocessor Ġis Ġalready Ġshut Ġdown ĊĠ Ġprivate Ġvar Ġis Shutdown Ġ= Ġfalse ĊĊĠ Ġ// ĠUsed Ġto Ġcalculate Ġlatency , Ġrunning Ġin Ġthe Ġsame Ġthread , Ġno Ġsync Ġneeded . ĊĠ Ġprivate Ġvar Ġnum Runs Ġ= Ġ 0 ĊĠ Ġprivate Ġvar Ġtotal Frame Ms Ġ= Ġ 0 L ĊĠ Ġprivate Ġvar Ġmax Frame Ms Ġ= Ġ 0 L ĊĠ Ġprivate Ġvar Ġmin Frame Ms Ġ= ĠLong . MAX _ VALUE ĊĠ Ġprivate Ġvar Ġtotal Detector Ms Ġ= Ġ 0 L ĊĠ Ġprivate Ġvar Ġmax Detector Ms Ġ= Ġ 0 L ĊĠ Ġprivate Ġvar Ġmin Detector Ms Ġ= ĠLong . MAX _ VALUE ĊĊĠ Ġ// ĠFrame Ġcount Ġthat Ġhave Ġbeen Ġprocessed Ġso Ġfar Ġin Ġan Ġone Ġsecond Ġinterval Ġto Ġcalculate ĠF PS . ĊĠ Ġprivate Ġvar Ġframe Processed In One Second Interval Ġ= Ġ 0 ĊĠ Ġprivate Ġvar Ġframes PerSecond Ġ= Ġ 0 ĊĊĠ Ġ// ĠTo Ġkeep Ġthe Ġlatest Ġimages Ġand Ġits Ġmetadata . ĊĠ Ġ@ Gu arded By (" this ") Ġprivate Ġvar Ġlatest Image : ĠByteBuffer ? Ġ= Ġnull ĊĠ Ġ@ Gu arded By (" this ") Ġprivate Ġvar Ġlatest Image MetaData : ĠFrame Metadata ? Ġ= Ġnull ĊĠ Ġ// ĠTo Ġkeep Ġthe Ġimages Ġand Ġmetadata Ġin Ġprocess . ĊĠ Ġ@ Gu arded By (" this ") Ġprivate Ġvar Ġprocessing Image : ĠByteBuffer ? Ġ= Ġnull ĊĠ Ġ@ Gu arded By (" this ") Ġprivate Ġvar Ġprocessing MetaData : ĠFrame Metadata ? Ġ= Ġnull ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġfps Timer . schedule At Fixed Rate ( ĊĠĠĠĠĠ Ġobject Ġ: ĠTimer Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġframes PerSecond Ġ= Ġframe Processed In One Second Interval ĊĠĠĠĠĠĠĠĠĠ Ġframe Processed In One Second Interval Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠ 1 0 0 0 ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġprocess Bitmap ( bitmap : ĠBitmap ?, Ġgraphic Overlay : ĠGraph ic Overlay ) Ġ{ ĊĠĠĠ Ġval Ġframe Start Ms Ġ= ĠSystem Clock . elapsed Realtime () ĊĊĠĠĠ Ġif Ġ( is Ml Image Enabled ( graphic Overlay . context )) Ġ{ ĊĠĠĠĠĠ Ġval Ġml Image Ġ= ĠBitmap Ml Image Builder ( bitmap !! ). build () ĊĠĠĠĠĠ Ġrequest Detect In Image ( ĊĠĠĠĠĠĠĠ Ġml Image , ĊĠĠĠĠĠĠĠ Ġgraphic Overlay , ĊĠĠĠĠĠĠĠ Ġ/* Ġoriginal Camera Image = Ġ*/ Ġnull , ĊĠĠĠĠĠĠĠ Ġ/* Ġshould Show F ps = Ġ*/ Ġfalse , ĊĠĠĠĠĠĠĠ Ġframe Start Ms ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġml Image . close () ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrequest Detect In Image ( ĊĠĠĠĠĠ ĠInput Image . from Bitmap ( bitmap !! , Ġ 0 ), ĊĠĠĠĠĠ Ġgraphic Overlay , ĊĠĠĠĠĠ Ġ/* Ġoriginal Camera Image = Ġ*/ Ġnull , ĊĠĠĠĠĠ Ġ/* Ġshould Show F ps = Ġ*/ Ġfalse , ĊĠĠĠĠĠ Ġframe Start Ms ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Synchron ized ĊĠ Ġoverride Ġfun Ġprocess ByteBuffer ( ĊĠĠĠ Ġdata : ĠByteBuffer ?, ĊĠĠĠ Ġframe Metadata : ĠFrame Metadata ?, ĊĠĠĠ Ġgraphic Overlay : ĠGraph ic Overlay ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġlatest Image Ġ= Ġdata ĊĠĠĠ Ġlatest Image MetaData Ġ= Ġframe Metadata ĊĠĠĠ Ġif Ġ( processing Image Ġ== Ġnull Ġ&& Ġprocessing MetaData Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġprocess Latest Image ( graphic Overlay ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Synchron ized ĊĠ Ġprivate Ġfun Ġprocess Latest Image ( graphic Overlay : ĠGraph ic Overlay ) Ġ{ ĊĠĠĠ Ġprocessing Image Ġ= Ġlatest Image ĊĠĠĠ Ġprocessing MetaData Ġ= Ġlatest Image MetaData ĊĠĠĠ Ġlatest Image Ġ= Ġnull ĊĠĠĠ Ġlatest Image MetaData Ġ= Ġnull ĊĠĠĠ Ġif Ġ( processing Image Ġ!= Ġnull Ġ&& Ġprocessing MetaData Ġ!= Ġnull Ġ&& Ġ! is Shutdown ) Ġ{ ĊĠĠĠĠĠ Ġprocess Image ( processing Image !! , Ġprocessing MetaData !! , Ġgraphic Overlay ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Image ( ĊĠĠĠ Ġdata : ĠByteBuffer , ĊĠĠĠ Ġframe Metadata : ĠFrame Metadata , ĊĠĠĠ Ġgraphic Overlay : ĠGraph ic Overlay ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġframe Start Ms Ġ= ĠSystem Clock . elapsed Realtime () ĊĠĠĠ Ġ// ĠIf Ġlive Ġviewport Ġis Ġon Ġ( that Ġis Ġthe Ġunder ne ath Ġsurface Ġview Ġtakes Ġcare Ġof Ġthe Ġcamera Ġpreview ĊĠĠĠ Ġ// Ġdrawing ), Ġskip Ġthe Ġunnecessary Ġbitmap Ġcreation Ġthat Ġused Ġfor Ġthe Ġmanual Ġpreview Ġdrawing . ĊĠĠĠ Ġval Ġbitmap Ġ= ĊĠĠĠĠĠ Ġif Ġ( Preference Utils . is Camera Live Viewport Enabled ( graphic Overlay . context )) Ġnull ĊĠĠĠĠĠ Ġelse ĠBitmap Utils . get Bitmap ( data , Ġframe Metadata ) ĊĊĠĠĠ Ġif Ġ( is Ml Image Enabled ( graphic Overlay . context )) Ġ{ ĊĠĠĠĠĠ Ġval Ġml Image Ġ= ĊĠĠĠĠĠĠĠ ĠByteBuffer Ml Image Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Metadata . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Metadata . height , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM l Image . IMAGE _ FORMAT _ NV 2 1 ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setRotation ( frame Metadata . rotation ) ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ Ġrequest Detect In Image ( ml Image , Ġgraphic Overlay , Ġbitmap , Ġ/* Ġshould Show F ps = Ġ*/ Ġtrue , Ġframe Start Ms ) ĊĠĠĠĠĠĠĠ Ġ. add On Success Listener ( executor ) Ġ{ Ġprocess Latest Image ( graphic Overlay ) Ġ} ĊĊĠĠĠĠĠ Ġ// ĠThis Ġis Ġoptional . ĠJava ĠG arbage Ġcollection Ġcan Ġalso Ġclose Ġit Ġeventually . ĊĠĠĠĠĠ Ġml Image . close () ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrequest Detect In Image ( ĊĠĠĠĠĠ ĠInput Image . from ByteBuffer ( ĊĠĠĠĠĠĠĠ Ġdata , ĊĠĠĠĠĠĠĠ Ġframe Metadata . width , ĊĠĠĠĠĠĠĠ Ġframe Metadata . height , ĊĠĠĠĠĠĠĠ Ġframe Metadata . rotation , ĊĠĠĠĠĠĠĠ ĠInput Image . IMAGE _ FORMAT _ NV 2 1 ĊĠĠĠĠĠ Ġ), ĊĠĠĠĠĠ Ġgraphic Overlay , ĊĠĠĠĠĠ Ġbitmap , ĊĠĠĠĠĠ Ġ/* Ġshould Show F ps = Ġ*/ Ġtrue , ĊĠĠĠĠĠ Ġframe Start Ms ĊĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ. add On Success Listener ( executor ) Ġ{ Ġprocess Latest Image ( graphic Overlay ) Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Requires Api ( VERSION _ CODES . KIT K AT ) ĊĠ Ġ@ Experimental Get Image ĊĠ Ġoverride Ġfun Ġprocess Image Proxy ( image : ĠImage Proxy , Ġgraphic Overlay : ĠGraph ic Overlay ) Ġ{ ĊĠĠĠ Ġval Ġframe Start Ms Ġ= ĠSystem Clock . elapsed Realtime () ĊĠĠĠ Ġif Ġ( is Shutdown ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġbitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġif Ġ(! Preference Utils . is Camera Live Viewport Enabled ( graphic Overlay . context )) Ġ{ ĊĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap Utils . get Bitmap ( image ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( is Ml Image Enabled ( graphic Overlay . context )) Ġ{ ĊĠĠĠĠĠ Ġval Ġml Image Ġ= ĊĠĠĠĠĠĠĠ ĠMedia Ml Image Builder ( image . image !! ). setRotation ( image . image Info . rotation Degrees ). build () ĊĠĠĠĠĠ Ġrequest Detect In Image ( ĊĠĠĠĠĠĠĠ Ġml Image , ĊĠĠĠĠĠĠĠ Ġgraphic Overlay , ĊĠĠĠĠĠĠĠ Ġ/* Ġoriginal Camera Image = Ġ*/ Ġbitmap , ĊĠĠĠĠĠĠĠ Ġ/* Ġshould Show F ps = Ġ*/ Ġtrue , ĊĠĠĠĠĠĠĠ Ġframe Start Ms ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ Ġimage . close () Ġ} ĊĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrequest Detect In Image ( ĊĠĠĠĠĠ ĠInput Image . from Media Image ( image . image !! , Ġimage . image Info . rotation Degrees ), ĊĠĠĠĠĠ Ġgraphic Overlay , ĊĠĠĠĠĠ Ġ/* Ġoriginal Camera Image = Ġ*/ Ġbitmap , ĊĠĠĠĠĠ Ġ/* Ġshould Show F ps = Ġ*/ Ġtrue , ĊĠĠĠĠĠ Ġframe Start Ms ĊĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ Ġimage . close () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrequest Detect In Image ( ĊĠĠĠ Ġimage : ĠInput Image , ĊĠĠĠ Ġgraphic Overlay : ĠGraph ic Overlay , ĊĠĠĠ Ġoriginal Camera Image : ĠBitmap ?, ĊĠĠĠ Ġshould Show F ps : ĠBoolean , ĊĠĠĠ Ġframe Start Ms : ĠLong ĊĠ Ġ): ĠTask < T > Ġ{ ĊĠĠĠ Ġreturn ĠsetUp Listener ( ĊĠĠĠĠĠ Ġdetect In Image ( image ), ĊĠĠĠĠĠ Ġgraphic Overlay , ĊĠĠĠĠĠ Ġoriginal Camera Image , ĊĠĠĠĠĠ Ġshould Show F ps , ĊĠĠĠĠĠ Ġframe Start Ms ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrequest Detect In Image ( ĊĠĠĠ Ġimage : ĠM l Image , ĊĠĠĠ Ġgraphic Overlay : ĠGraph ic Overlay , ĊĠĠĠ Ġoriginal Camera Image : ĠBitmap ?, ĊĠĠĠ Ġshould Show F ps : ĠBoolean , ĊĠĠĠ Ġframe Start Ms : ĠLong ĊĠ Ġ): ĠTask < T > Ġ{ ĊĠĠĠ Ġreturn ĠsetUp Listener ( ĊĠĠĠĠĠ Ġdetect In Image ( image ), ĊĠĠĠĠĠ Ġgraphic Overlay , ĊĠĠĠĠĠ Ġoriginal Camera Image , ĊĠĠĠĠĠ Ġshould Show F ps , ĊĠĠĠĠĠ Ġframe Start Ms ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠsetUp Listener ( ĊĠĠĠ Ġtask : ĠTask < T >, ĊĠĠĠ Ġgraphic Overlay : ĠGraph ic Overlay , ĊĠĠĠ Ġoriginal Camera Image : ĠBitmap ?, ĊĠĠĠ Ġshould Show F ps : ĠBoolean , ĊĠĠĠ Ġframe Start Ms : ĠLong ĊĠ Ġ): ĠTask < T > Ġ{ ĊĠĠĠ Ġval Ġdetector Start Ms Ġ= ĠSystem Clock . elapsed Realtime () ĊĠĠĠ Ġreturn Ġtask ĊĠĠĠĠĠ Ġ. add On Success Listener ( ĊĠĠĠĠĠĠĠ Ġexecutor , ĊĠĠĠĠĠĠĠ ĠOn Success Listener Ġ{ Ġresults : ĠT Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġend Ms Ġ= ĠSystem Clock . elapsed Realtime () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Frame Latency Ms Ġ= Ġend Ms Ġ- Ġframe Start Ms ĊĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Detector Latency Ms Ġ= Ġend Ms Ġ- Ġdetector Start Ms ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Runs Ġ>= Ġ 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Latency Stats () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġnum Runs ++ ĊĠĠĠĠĠĠĠĠĠ Ġframe Processed In One Second Interval ++ ĊĠĠĠĠĠĠĠĠĠ Ġtotal Frame Ms Ġ+= Ġcurrent Frame Latency Ms ĊĠĠĠĠĠĠĠĠĠ Ġmax Frame Ms Ġ= Ġmax ( current Frame Latency Ms , Ġmax Frame Ms ) ĊĠĠĠĠĠĠĠĠĠ Ġmin Frame Ms Ġ= Ġmin ( current Frame Latency Ms , Ġmin Frame Ms ) ĊĠĠĠĠĠĠĠĠĠ Ġtotal Detector Ms Ġ+= Ġcurrent Detector Latency Ms ĊĠĠĠĠĠĠĠĠĠ Ġmax Detector Ms Ġ= Ġmax ( current Detector Latency Ms , Ġmax Detector Ms ) ĊĠĠĠĠĠĠĠĠĠ Ġmin Detector Ms Ġ= Ġmin ( current Detector Latency Ms , Ġmin Detector Ms ) ĊĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( frame Processed In One Second Interval Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Num Ġof ĠRuns : Ġ$ num Runs ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Frame Ġlatency : Ġmax =" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Frame Ms Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġmin =" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Frame Ms Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġavg =" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Frame Ms Ġ/ Ġnum Runs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Detector Ġlatency : Ġmax =" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Detector Ms Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġmin =" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Detector Ms Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġavg =" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Detector Ms Ġ/ Ġnum Runs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmi Ġ= ĠActivity Manager . Memory Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Manager . get Memory Info ( mi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavailable Me gs : ĠLong Ġ= Ġmi . avail Mem Ġ/ Ġ 0 x 1 0 0 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Memory Ġavailable Ġin Ġsystem : Ġ$ available Me gs ĠMB ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġgraphic Overlay . clear () ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( original Camera Image Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphic Overlay . add ( Camera Image Graphic ( graphic Overlay , Ġoriginal Camera Image )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġthis @ Vision Processor Base . on Success ( results , Ġgraphic Overlay ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Preference Utils . should Hide Detection Info ( graphic Overlay . context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphic Overlay . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInference Info Graphic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphic Overlay , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Frame Latency Ms , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Detector Latency Ms , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Show F ps ) Ġframes PerSecond Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġgraphic Overlay . post Invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ. add On Failure Listener ( ĊĠĠĠĠĠĠĠ Ġexecutor , ĊĠĠĠĠĠĠĠ ĠOn Failure Listener Ġ{ Ġe : ĠException Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġgraphic Overlay . clear () ĊĠĠĠĠĠĠĠĠĠ Ġgraphic Overlay . post Invalidate () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġ" Failed Ġto Ġprocess . ĠError : Ġ" Ġ+ Ġe . localized Message ĊĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphic Overlay . context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ$ error ĊĠĠĠĠĠĠĠĠĠ ĠCause : Ġ${ e . cause } ĊĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġerror ) ĊĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠ Ġthis @ Vision Processor Base . on Failure ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġstop () Ġ{ ĊĠĠĠ Ġexecutor . shutdown () ĊĠĠĠ Ġis Shutdown Ġ= Ġtrue ĊĠĠĠ Ġreset Latency Stats () ĊĠĠĠ Ġfps Timer . cancel () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġreset Latency Stats () Ġ{ ĊĠĠĠ Ġnum Runs Ġ= Ġ 0 ĊĠĠĠ Ġtotal Frame Ms Ġ= Ġ 0 ĊĠĠĠ Ġmax Frame Ms Ġ= Ġ 0 ĊĠĠĠ Ġmin Frame Ms Ġ= ĠLong . MAX _ VALUE ĊĠĠĠ Ġtotal Detector Ms Ġ= Ġ 0 ĊĠĠĠ Ġmax Detector Ms Ġ= Ġ 0 ĊĠĠĠ Ġmin Detector Ms Ġ= ĠLong . MAX _ VALUE ĊĠ Ġ} ĊĊĠ Ġprotected Ġabstract Ġfun Ġdetect In Image ( image : ĠInput Image ): ĠTask < T > ĊĊĠ Ġprotected Ġopen Ġfun Ġdetect In Image ( image : ĠM l Image ): ĠTask < T > Ġ{ ĊĠĠĠ Ġreturn ĠTasks . for Exception ( ĊĠĠĠĠĠ ĠM l Kit Exception ( ĊĠĠĠĠĠĠĠ Ġ" Ml Image Ġis Ġcurrently Ġnot Ġdemonstr ated Ġfor Ġthis Ġfeature ", ĊĠĠĠĠĠĠĠ ĠM l Kit Exception . INVALID _ ARGUMENT ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprotected Ġabstract Ġfun ĠonSuccess ( results : ĠT , Ġgraphic Overlay : ĠGraph ic Overlay ) ĊĊĠ Ġprotected Ġabstract Ġfun Ġon Failure ( e : ĠException ) ĊĊĠ Ġprotected Ġopen Ġfun Ġis Ml Image Enabled ( context : ĠContext ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} Ċ } Ċ