package Ġhy pr . hyper gan . com . hy pr . Generator Loader Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Log Ċ import Ġcom . google . android . gms . vision . face . Face Ċ import Ġcom . google . android . gms . vision . face . Land mark Ċ import Ġhy pr . hyper gan . com . hy pr . Util . Face Detection Ċ Ċ class ĠGenerator Face Position ( val Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠX OFFSET _ PERCENT Ġ= Ġ 0 . 8 5 ĊĠĠĠ Ġprivate Ġval ĠY OFFSET _ PERCENT Ġ= Ġ 0 . 5 4 ĊĠĠĠ Ġval Ġface Box Color Ġ= ĠPaint () ĊĠĠĠ Ġval Ġface Detection Ġ= ĠFace Detection ( context ) ĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġface Box Color . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġface Box Color . color Ġ= ĠColor . RED ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġcrop Face OutOf Bitmap ( face : ĠFace , Ġimage With Faces : ĠBitmap ): ĠFace Location ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġface . land marks . first { Ġit . type Ġ== ĠLand mark . LEFT _ EY E Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġface . land marks . first { Ġit . type Ġ== ĠLand mark . RIGHT _ EY E Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġoffset X : ĠInt Ġ= Ġ( X OFFSET _ PERCENT Ġ* face . width ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġoffset Y : ĠInt Ġ= Ġ( Y OFFSET _ PERCENT * face . height ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġx 1 : ĠInt Ġ= Ġ( left . position . x Ġ- Ġoffset X ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġy 1 : ĠInt Ġ= Ġ( left . position . y Ġ- Ġoffset Y ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġx 2 : ĠInt Ġ= Ġ( right . position . x Ġ+ Ġoffset X ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġy 2 : ĠInt Ġ= Ġ( left . position . y Ġ+ Ġoffset Y ). toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= Ġface Detection . face To Rect ( face . position . x , Ġface . position . y , Ġface . width , Ġface . height ) ĊĠĠĠĠĠĠĠ Ġrect . left Ġ= Ġrect . left Ġ- Ġoffset X ĊĠĠĠĠĠĠĠ Ġrect . right Ġ= Ġrect . right Ġ+ Ġoffset X ĊĠĠĠĠĠĠĠ Ġrect . top Ġ= Ġrect . top Ġ- Ġoffset Y ĊĠĠĠĠĠĠĠ Ġrect . bottom Ġ= Ġrect . bottom Ġ+ Ġoffset Y ĊĠĠĠĠĠĠĠ Ġval Ġmutable Bitmap Ġ= Ġimage With Faces . copy ( Bitmap . Config . ARGB _ 8 8 8 8 , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( mutable Bitmap ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( rect , Ġface Box Color ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġface Width : ĠInt Ġ= Ġx 2 - x 1 ĊĠĠĠĠĠĠĠ Ġvar Ġface Height : ĠInt Ġ= Ġy 2 - y 1 ĊĊĊĠĠĠĠĠĠĠ Ġvar Ġbitmap : ĠBitmap ĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap . create Bitmap ( image With Faces , Ġx 1 , Ġy 1 , Ġface Width , Ġface Height ) ĊĠĠĠĠĠĠĠ Ġ} catch ( e : ĠIllegalArgumentException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Generator Face Position ", Ġ" Face Ġtoo Ġclose Ġto Ġcamera : Ġ${ e . localized Message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġscaled Rect Ġ= ĠRect ( x 1 , Ġy 1 , Ġx 1 Ġ+ Ġface Width , y 1 Ġ+ Ġface Height ) ĊĠĠĠĠĠĠĠ Ġval ĠmaxSize : Int Ġ= Ġint ArrayOf ( bitmap . height , Ġbitmap . width ). min () !! ĊĠĠĠĠĠĠĠ Ġval Ġresized Bitmap Ġ= Ġget Res ized Bitmap ( bitmap , ĠmaxSize , ĠmaxSize ) ĊĠĠĠĠĠĠĠ Ġreturn ĠFace Location ( res ized Bitmap , Ġscaled Rect ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Res ized Bitmap ( bm : ĠBitmap , Ġnew Width : ĠInt , Ġnew Height : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbm . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġbm . height ĊĠĠĠĠĠĠĠ Ġval Ġscale Width Ġ= Ġnew Width . toFloat () Ġ/ Ġwidth ĊĠĠĠĠĠĠĠ Ġval Ġscale Height Ġ= Ġnew Height . toFloat () Ġ/ Ġheight ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . post Scale ( scale Width , Ġscale Height ) ĊĠĠĠĠĠĠĠ Ġval Ġresized Bitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbm , Ġ 0 , Ġ 0 , Ġwidth , Ġheight , Ġmatrix , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbm . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġresized Bitmap ĊĠĠĠ Ġ} Ċ }