package Ġcom . l uk el uc a . andro idth ings . in m oo v Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . media . Image Reader Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġcom . google . firebase . ml . vision . Firebase Vision Ċ import Ġcom . google . firebase . ml . vision . common . Firebase Vision Image Ċ import Ġcom . google . firebase . ml . vision . face . Firebase Vision Face Detector Ċ import Ġcom . google . firebase . ml . vision . face . Firebase Vision Face Detector Options Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġcom . google . firebase . ml . vision . common . Firebase Vision Point Ċ import Ġcom . google . firebase . ml . vision . face . Firebase Vision Face Land mark Ċ import Ġcom . google . firebase . storage . Firebase Storage Ċ import Ġcom . l uk el uc a . andro idth ings . in m oo v . person ality . Random Remember Ph rases Ċ import Ġcom . l uk el uc a . andro idth ings . in m oo v . state . In M oo v Context Ċ import Ġcom . l uk el uc a . andro idth ings . in m oo v . state . S entry State Ċ import Ġjava . io . ByteArray OutputStream ĊĊ Ċ /** Ċ Ġ* ĠT our ĠGuide Ġactivity . Ċ Ġ* Ċ Ġ* ĠBuilt Ġon Ġtop Ġof Ġa Ġcamera Ġ& Ġspeech Ġbase Ġactivity , Ġwhich Ġalso Ġhas ĠArduino Ġconnections Ċ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ public Ġclass ĠS entry Activity Ġ: ĠCamera Speech Base Activity (), ĠImage Reader . On Image Available Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" S entry Activity " ĊĊĠĠĠ Ġvar Ġdetector : ĠFirebase Vision Face Detector ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġoptions : ĠFirebase Vision Face Detector Options ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Image : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Image Face : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Arduino Text : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġis Follow Face On Ġ= Ġtrue Ġ// Ġturn Ġface Ġif Ġit 's Ġnot Ġpointing Ġat Ġthe Ġperson ĊĠĠĠ Ġprivate Ġval Ġis Preview On : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġvar Ġrobot Context Ġ: ĠIn M oo v Context Ġ= ĠIn M oo v Context ( this ) ĊĊĠĠĠ Ġlateinit Ġvar Ġstorage : ĠFirebase Storage ĊĠĠĠ Ġprivate Ġvar Ġtime Last Uploaded Ġ= Ġ 0 L ĊĊĠĠĠ Ġval Ġp Ġ= ĠPaint () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ sentry ) ĊĊĠĠĠĠĠĠĠ Ġval Ġclose : ĠView Ġ= ĠfindViewById ( R . id . btn _ close ) ĊĠĠĠĠĠĠĠ Ġclose . setOnClickListener Ġ{ Ġfinish () Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Image Ġ= ĠfindViewById ( R . id . iv _ camera ) ĊĠĠĠĠĠĠĠ Ġm Image Face Ġ= ĠfindViewById ( R . id . iv Face ) ĊĠĠĠĠĠĠĠ Ġm Arduino Text Ġ= ĠfindViewById ( R . id . tv _ arduino ) ĊĊĠĠĠĠĠĠĠ Ġrobot Context . setState ( S entry State ()); ĊĊĠĠĠĠĠĠĠ Ġstorage Ġ= ĠFirebase Storage . getInstance () ĊĊĠĠĠĠĠĠĠ Ġp . style Ġ= ĠPaint . Style . ST RO KE Ġ// Ġdon 't Ġfill ĊĠĠĠĠĠĠĠ Ġp . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġp . is Filter Bitmap Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġp . is D ither Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġp . color Ġ= ĠColor . GREEN ĊĊĠĠĠĠĠĠĠ Ġoptions Ġ= ĠFirebase Vision Face Detector Options . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Performance Mode ( Firebase Vision Face Detector Options . AC CUR ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Land mark Mode ( Firebase Vision Face Detector Options . ALL _ LAND MARK S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Classification Mode ( Firebase Vision Face Detector Options . ALL _ CLAS SIF ICATION S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Min Face Size ( 0 . 1 f ) Ġ// Ġdefault Ġis Ġ 0 . 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Tracking () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġdetector Ġ= ĠFirebase Vision . getInstance (). get Vision Face Detector ( options !! ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠAny thing Ġthat Ġneeds Ġto Ġbe Ġinitialized Ġon Ġstartup ĊĠĠĠ Ġprivate Ġval Ġm Initialize On Background Ġ= ĠRunnable Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġhas Be ck oned Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġfun Ġon Image Capture ( image : ĠFirebase Vision Image , Ġbitmap : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdetector ?. detect In Image ( image ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfaces Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( faces . size Ġ> Ġ 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtracking Face Already Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( face Ġin Ġfaces ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounding Box Ġ= Ġface . bounding Box ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġface Bitmap Ġ= ĠFace Extractor (). get Face Bitmap ( bitmap , Ġface ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( face Bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Preview On ) Ġm Image Face ?. setImage Bitmap ( face Bitmap ) ĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Last Uploaded Ġ< ĠSystem . currentTimeMillis () Ġ- Ġ 1 5 0 0 0 L ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpload Ġto ĠGoogle ĠCloud ĠStorage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstorage Ref Ġ= Ġstorage . reference ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfaces Ref Ġ= Ġstorage Ref . child (" un sorted -" Ġ+ ĠSystem . currentTimeMillis (). toString () Ġ+ Ġ". jpg ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġface Bitmap . compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , Ġba os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġba os . toByteArray () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġupload Task Ġ= Ġfaces Ref . put Bytes ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Task . add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġun successful Ġuploads ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Upload Ġto ĠFire store ĠFailure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtask Snapshot . metadata Ġcontains Ġfile Ġmetadata Ġsuch Ġas Ġsize , Ġcontent - type , Ġetc . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Upload Ġto ĠFire store ĠSuccess ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeak Text ( Random Remember Ph rases (). getRandom Phrase ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Last Uploaded Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" face Ġheight : Ġ" Ġ+ Ġface . bounding Box . height (). toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Eye Ġ= Ġface . get Land mark ( Firebase Vision Face Land mark . LEFT _ EY E ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Eye Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ: ĠFirebase Vision Point Ġ= Ġleft Eye . position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Point ( point . x , Ġpoint . y , Ġp ) Ċ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! tracking Face Already ) Ġ{ Ċ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Follow Face On ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcenter W Ġ= Ġc . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcenter H Ġ= Ġc . height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( point . x Ġ< Ġcenter W Ġ- Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Command (" HH ", Ġ 5 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( point . x Ġ> Ġcenter W Ġ+ Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Command (" HH ", Ġ- 5 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġy Ġis Ġdown Ġfrom Ġthe Ġtop , Ġso Ġif Ġit 's Ġless Ġthan Ġcenter , Ġlook Ġup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( point . y Ġ< Ġcenter H Ġ- Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Command ( Ġ" HV ", Ġ 5 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġgreater , Ġlook Ġdown ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( point . y Ġ> Ġcenter H Ġ+ Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Command ( Ġ" HV ", Ġ- 5 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracking Face Already Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Rect ( bounding Box . left . toFloat (), Ġbounding Box . top . toFloat (), Ġbounding Box . right . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounding Box . bottom . toFloat (), Ġp ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Preview On ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Image ?. setImage Bitmap ( bitmap ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot Context . on Detect Faces ( faces ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Image () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġdon 't Ġsee Ġsomething , Ġjust Ġkeep Ġwaiting . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" error Ġwith Ġdetection "); ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Image () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon S peak Start ( utter ance Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrobot Context . on S peak Start ( utter ance Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon S peak Done ( utter ance Id : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġrobot Context . on S peak Done ( utter ance Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bitmap Available ( bitmap : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Preview On ) Ġrun On Ui Thread Ġ{ Ġm Image !!. setImage Bitmap ( bitmap ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġbitmap ?. let Ġ{ ĠFirebase Vision Image . from Bitmap ( it ) Ġ} ?. let Ġ{ Ġon Image Capture ( it , Ġbitmap ) Ġ}; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Arduino Response ( response : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// run On Ui Thread Ġ{ Ġm Arduino Text ?. setText ( response ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ } Ċ