package Ġcom . mad hav codes . ml _ kit _ ocr Ċ Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . graphics . Rect Ċ import Ġandroidx . annotation . NonNull Ċ Ċ import Ġcom . google . ml kit . vision . common . Input Image Ċ import Ġcom . google . ml kit . vision . text . Text Recognition Ċ import Ġcom . google . ml kit . vision . text . Text Recognizer Ċ import Ġcom . google . ml kit . vision . text . latin . Text Recognizer Options Ċ Ċ import Ġio . flutter . embedding . engine . plugins . Flutter Plugin Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġio . flutter . plugin . common . Method Channel . MethodCall Handler Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . HashMap Ċ import Ġandroid . content . Context ĊĊ Ċ /** ĠM l Kit O cr Plugin Ġ*/ Ċ class ĠM l Kit O cr Plugin Ġ: ĠFlutter Plugin Ġ{ ĊĠĠĠ Ġ/// ĠThe ĠMethod Channel Ġthat Ġwill Ġthe Ġcommunication Ġbetween ĠFlutter Ġand Ġnative ĠAndroid ĊĠĠĠ Ġ/// ĊĠĠĠ Ġ/// ĠThis Ġlocal Ġreference Ġserves Ġto Ġregister Ġthe Ġplugin Ġwith Ġthe ĠFlutter ĠEngine Ġand Ġunregister Ġit ĊĠĠĠ Ġ/// Ġwhen Ġthe ĠFlutter ĠEngine Ġis Ġdet ached Ġfrom Ġthe ĠActivity ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchannel : ĠMethod Channel ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Engine (@ NonNull Ġflutter Plugin Binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel Ġ= ĠMethod Channel ( flutter Plugin Binding . binary Messenger , Ġ" ml _ kit _ ocr ") ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( Text Detector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflutter Plugin Binding . application Context ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Engine (@ NonNull Ġbinding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( null ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠText Detector ( private Ġvar Ġcontext : ĠContext ) Ġ: ĠMethod Call Handler Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġtext Recognizer : ĠText Recognizer ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Detection ( call : ĠMethod Call , Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage Data Ġ= Ġcall . argument < Map < String , ĠAny >> (" image Data ") !! ĊĠĠĠĠĠĠĠ Ġval Ġinput Image : ĠInput Image Ġ= ĠInput Image Converter . getInput Image From Data ( image Data , Ġcontext , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġtext Recognizer Ġ= ĠText Recognition . getClient ( Text Recognizer Options . DEFAULT _ OPTIONS ) ĊĊĠĠĠĠĠĠĠ Ġtext Recognizer !!. process ( input Image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġtext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Result : ĠMutable Map < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Result [" text "] Ġ= Ġtext . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Blocks : ĠMutable List < Map < String , ĠAny >> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( block Ġin Ġtext . text Blocks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Data : ĠMutable Map < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Data ( block Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock . bounding Box , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock . corner Points , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock . recognized Language ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Lines : ĠMutable List < Map < String , ĠAny >> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġblock . lines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Data : ĠMutable Map < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Data ( line Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . bounding Box , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . corner Points , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . recognized Language ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelements Data : ĠMutable List < Map < String , ĠAny >> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġline . elements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Data : ĠMutable Map < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Data ( element Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . bounding Box , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . corner Points , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . recognized Language ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelements Data . add ( element Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Data [" elements "] Ġ= Ġelements Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Lines . add ( line Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Data [" lines "] Ġ= Ġtext Lines ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Blocks . add ( block Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Result [" blocks "] Ġ= Ġtext Blocks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( text Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> Ġresult . error (" Text Detector Error ", Ġe . toString (), Ġnull ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Data ( addTo : ĠMutable Map < String , ĠAny >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect : ĠRect ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcorner Points : ĠArray < Point > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecognized Language : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrecognized Languages : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġrecognized Languages . add ( recognized Language ) ĊĠĠĠĠĠĠĠ Ġval Ġpoints : ĠMutable List < Map < String , ĠInt >> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġadd Points ( corner Points , Ġpoints ) ĊĠĠĠĠĠĠĠ ĠaddTo [" points "] Ġ= Ġpoints ĊĠĠĠĠĠĠĠ ĠaddTo [" rect "] Ġ= Ġget Bounding Points ( rect ) ĊĠĠĠĠĠĠĠ ĠaddTo [" recognized Languages "] Ġ= Ġrecognized Languages ĊĠĠĠĠĠĠĠ ĠaddTo [" text "] Ġ= Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Points ( corner Points : ĠArray < Point > ?, Ġpoints : ĠMutable List < Map < String , ĠInt >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( point Ġin Ġcorner Points !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp : ĠMutable Map < String , ĠInt > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp [" x "] Ġ= Ġpoint . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp [" y "] Ġ= Ġpoint . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . add ( p ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bounding Points ( rect : ĠRect ?): ĠMap < String , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġframe : ĠMutable Map < String , ĠInt > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠ Ġframe [" left "] Ġ= Ġrect !!. left ĊĠĠĠĠĠĠĠ Ġframe [" right "] Ġ= Ġrect . right ĊĠĠĠĠĠĠĠ Ġframe [" top "] Ġ= Ġrect . top ĊĠĠĠĠĠĠĠ Ġframe [" bottom "] Ġ= Ġrect . bottom ĊĠĠĠĠĠĠĠ Ġreturn Ġframe ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclose Detector () Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Recognizer ?. close () ĊĠĠĠĠĠĠĠ Ġtext Recognizer Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon MethodCall (@ NonNull Ġcall : ĠMethod Call , Ġ@ NonNull Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( call . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" process Image " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Detection ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" close Detector " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Detector () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . not Implemented () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ