package Ġcom . example . fd Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . ImageView Ċ import Ġcom . google . ml kit . vision . common . Input Image Ċ import Ġcom . google . ml kit . vision . face . Face Ċ import Ġcom . google . ml kit . vision . face . Face Detection Ċ import Ġcom . google . ml kit . vision . face . Face Detector Options Ċ import Ġjava . io . IOException Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġval Ġimg : ĠImageView Ġ= ĠfindViewById ( R . id . image Face ) ĊĠĠĠĠĠĠĠ Ġ// Ġassets Ġfolder Ġimage Ġfile Ġname Ġwith Ġextension ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" face - test . jpg " ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġbitmap Ġfrom Ġassets Ġfolder ĊĠĠĠĠĠĠĠ Ġval Ġbitmap : ĠBitmap ? Ġ= Ġassets To Bitmap ( fileName ) ĊĠĠĠĠĠĠĠ Ġbitmap ?. apply { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg . setImage Bitmap ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbtn : ĠButton Ġ= ĠfindViewById ( R . id . btn Test ) ĊĠĠĠĠĠĠĠ Ġbtn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhigh Accuracy Opts Ġ= ĠFace Detector Options . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Performance Mode ( Face Detector Options . PER FORMANCE _ MODE _ FAST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetector Ġ= ĠFace Detection . getClient ( high Accuracy Opts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠInput Image . from Bitmap ( bitmap !! , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdetector . process ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġfaces Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTask Ġcompleted Ġsuccessfully ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap ?. apply { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg . setImage Bitmap ( draw With Rectangle ( faces )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTask Ġfailed Ġwith Ġan Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ // Ġhelper Ġfunction Ġto Ġget Ġbitmap Ġfrom Ġassets Ċ fun ĠContext . assets To Bitmap ( fileName : ĠString ): ĠBitmap ? { ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( assets . open ( fileName )){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode Stream ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ Ġnull Ġ} Ċ } ĊĊ Ċ fun ĠBitmap . draw With Rectangle ( faces : ĠList < Face >): Bitmap ? { ĊĠĠĠ Ġval Ġbitmap Ġ= Ġcopy ( config , Ġtrue ) ĊĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠ Ġfor Ġ( face Ġin Ġfaces ){ ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġface . bounding Box ĊĠĠĠĠĠĠĠ ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . RED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 4 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġrectangle Ġon Ġcanvas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġbitmap Ċ }