/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . example . android . cam er ax . t flite Ċ Ċ import Ġandroid . graphics . Rect F Ċ import Ġorg . tensorflow . lite . Interpreter Ċ import Ġorg . tensorflow . lite . support . image . Tensor Image Ċ Ċ /** Ċ Ġ* ĠHelper Ġclass Ġused Ġto Ġcommunicate Ġbetween Ġour Ġapp Ġand Ġthe ĠTF Ġobject Ġdetection Ġmodel Ċ Ġ*/ Ċ class ĠObject Detection Helper ( private Ġval Ġt flite : ĠInterpreter , Ġprivate Ġval Ġlabels : ĠList < String >) Ġ{ ĊĊĠĠĠ Ġ/** ĠAb straction Ġobject Ġthat Ġwraps Ġa Ġprediction Ġoutput Ġin Ġan Ġeasy Ġto Ġparse Ġway Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠObject Prediction ( val Ġlocation : ĠRect F , Ġval Ġlabel : ĠString , Ġval Ġscore : ĠFloat ) ĊĊĠĠĠ Ġprivate Ġval Ġlocations Ġ= ĠarrayOf ( Array ( OBJECT _ COUNT ) Ġ{ ĠFloat Array ( 4 ) Ġ}) ĊĠĠĠ Ġprivate Ġval Ġlabel Indices Ġ= Ġ ĠarrayOf ( Float Array ( OBJECT _ COUNT )) ĊĠĠĠ Ġprivate Ġval Ġscores Ġ= Ġ ĠarrayOf ( Float Array ( OBJECT _ COUNT )) ĊĊĠĠĠ Ġprivate Ġval Ġoutput Buffer Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠ 0 Ġto Ġlocations , ĊĠĠĠĠĠĠĠĠ 1 Ġto Ġlabel Indices , ĊĠĠĠĠĠĠĠĠ 2 Ġto Ġscores , ĊĠĠĠĠĠĠĠĠ 3 Ġto ĠFloat Array ( 1 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġpredictions Ġget () Ġ= Ġ( 0 Ġuntil ĠOBJECT _ COUNT ). map Ġ{ ĊĠĠĠĠĠĠĠ ĠObject Prediction ( ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġlocations Ġare Ġan Ġarray Ġof Ġ[ 0 , Ġ 1 ] Ġfloats Ġfor Ġ[ top , Ġleft , Ġbottom , Ġright ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= Ġlocations [ 0 ][ it ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRect F ( it [ 1 ], Ġit [ 0 ], Ġit [ 3 ], Ġit [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSSD ĠMob ilen et ĠV 1 ĠModel Ġassumes Ġclass Ġ 0 Ġis Ġbackground Ġclass ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġlabel Ġfile Ġand Ġclass Ġlabels Ġstart Ġfrom Ġ 1 Ġto Ġnumber _ of _ classes Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhile Ġoutput Classes Ġcorrespond Ġto Ġclass Ġindex Ġfrom Ġ 0 Ġto Ġnumber _ of _ classes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġlabels [ 1 Ġ+ Ġlabel Indices [ 0 ][ it ]. toInt ()], ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠScore Ġis Ġa Ġsingle Ġvalue Ġof Ġ[ 0 , Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscore Ġ= Ġscores [ 0 ][ it ] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpredict ( image : ĠTensor Image ): ĠList < Object Prediction > Ġ{ ĊĠĠĠĠĠĠĠ Ġt flite . run For Multiple Inputs Outputs ( array Of ( image . buffer ), Ġoutput Buffer ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpredictions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOBJECT _ COUNT Ġ= Ġ 1 0 ĊĠĠĠ Ġ} Ċ }