package Ġorg . tensorflow . lite . examples . detector . ui . main Ċ Ċ import Ġandroid . content . res . Asset Manager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . Surface Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . tensorflow . lite . examples . detector . misc . Constants Ċ import Ġorg . tensorflow . lite . examples . detector . Detector Ċ import Ġorg . tensorflow . lite . examples . detector . Detector Factory Ċ import Ġorg . tensorflow . lite . examples . detector . misc . Detection Processor Ċ import Ġorg . tensorflow . lite . examples . detector . utils . Image Utils Ċ import Ġorg . tensorflow . lite . examples . detector . visualization . Tracking Overlay View Ċ Ċ class ĠMain ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEVICE _ ROT ATION : ĠInt Ġ= ĠSurface . ROT ATION _ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġbitmap : ĠBitmap ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdetector : ĠDetector ĊĠĠĠ Ġprivate Ġvar Ġdetection Processor : ĠDetection Processor ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsource Bitmap : ĠBitmap ĊĊĠĠĠ Ġfun ĠsetUp Bit maps ( asset Manager : ĠAsset Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsource Bitmap Ġ= Ġasset Manager . open (" k ite . jpg "). use Ġ{ ĠinputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode Stream ( inputStream ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġprocess Bitmap ( source Bitmap , ĠConstants . DE TE CTION _ MODEL . input Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetUp Detector ( asset Manager : ĠAsset Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdetector Ġ= ĠDetector Factory . create Detector ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset Manager , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . DE TE CTION _ MODEL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . MIN IMUM _ SCORE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetUp Detection Processor ( ĊĠĠĠĠĠĠĠ ĠimageView : ĠImageView , ĊĠĠĠĠĠĠĠ Ġtracking Overlay View : ĠTracking Overlay View , ĊĠĠĠĠĠĠĠ Ġdisplay Metrics : ĠDisplay Metrics ĊĠĠĠ Ġ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( imageView . width Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdetection Processor Ġ= ĠDetection Processor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Metrics Ġ= Ġdisplay Metrics , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetector Ġ= Ġdetector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracking Overlay Ġ= Ġtracking Overlay View , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdetection Processor !!. initialize Tracking Layout ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . width , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetector . get Detection Model (). input Size , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDEVICE _ ROT ATION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġprocess Image () Ġ= ĠviewModel Scope . launch ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdetection Processor ?. process Image ( bitmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Bitmap ( source : ĠBitmap , Ġsize : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc ropped Bitmap Ġ= ĠBitmap . create Bitmap ( size , Ġsize , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġframe To Crop Transform ations Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Utils . get Transformation Matrix ( source . width , Ġsource . height , Ġsize , Ġsize , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcrop To Frame Transform ations Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġframe To Crop Transform ations . invert ( crop To Frame Transform ations ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( c ropped Bitmap ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( source , Ġframe To Crop Transform ations , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġc ropped Bitmap ĊĠĠĠ Ġ} ĊĊ Ċ }