2021-02-11 10:35:13 +00:00

12 lines
32 KiB
Go

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
package classer ;import (_e "github.com/unidoc/unipdf/v3/common";_b "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_fb "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_f "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_g "image";_cd "math";);func (_cdc *Classer )ComputeLLCorners ()(_cf error ){const _ba ="\u0043l\u0061\u0073\u0073\u0065\u0072\u002e\u0043\u006f\u006d\u0070\u0075t\u0065\u004c\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";if _cdc .PtaUL ==nil {return _f .Error (_ba ,"\u0055\u004c\u0020\u0043or\u006e\u0065\u0072\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};_dgd :=len (*_cdc .PtaUL );_cdc .PtaLL =&_fb .Points {};var (_be ,_bg float32 ;_gc ,_cc int ;_ec *_fb .Bitmap ;);for _ff :=0;_ff < _dgd ;_ff ++{_be ,_bg ,_cf =_cdc .PtaUL .GetGeometry (_ff );if _cf !=nil {_e .Log .Debug ("\u0047e\u0074\u0074\u0069\u006e\u0067\u0020\u0050\u0074\u0061\u0055\u004c \u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_cf );return _f .Wrap (_cf ,_ba ,"\u0050\u0074\u0061\u0055\u004c\u0020\u0047\u0065\u006fm\u0065\u0074\u0072\u0079");};_gc ,_cf =_cdc .ClassIDs .Get (_ff );if _cf !=nil {_e .Log .Debug ("\u0047\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0043\u006c\u0061s\u0073\u0049\u0044\u0020\u0066\u0061\u0069\u006c\u0065\u0064:\u0020\u0025\u0076",_cf );return _f .Wrap (_cf ,_ba ,"\u0043l\u0061\u0073\u0073\u0049\u0044");};_ec ,_cf =_cdc .UndilatedTemplates .GetBitmap (_gc );if _cf !=nil {_e .Log .Debug ("\u0047\u0065t\u0074\u0069\u006e\u0067 \u0055\u006ed\u0069\u006c\u0061\u0074\u0065\u0064\u0054\u0065m\u0070\u006c\u0061\u0074\u0065\u0073\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_cf );return _f .Wrap (_cf ,_ba ,"\u0055\u006e\u0064\u0069la\u0074\u0065\u0064\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_cc =_ec .Height ;_cdc .PtaLL .AddPoint (_be ,_bg +float32 (_cc ));};return nil ;};func (_fee *Classer )verifyMethod (_aca Method )error {if _aca !=RankHaus &&_aca !=Correlation {return _f .Error ("\u0076\u0065\u0072i\u0066\u0079\u004d\u0065\u0074\u0068\u006f\u0064","\u0069\u006e\u0076\u0061li\u0064\u0020\u0063\u006c\u0061\u0073\u0073\u0065\u0072\u0020\u006d\u0065\u0074\u0068o\u0064");};return nil ;};func (_cdg *Classer )classifyRankHouseNonOne (_dgg *_fb .Boxes ,_bfg ,_ab ,_dgf *_fb .Bitmaps ,_agf *_fb .Points ,_eda *_b .NumSlice ,_gcb int )(_cfge error ){const _bge ="\u0043\u006c\u0061\u0073s\u0065\u0072\u002e\u0063\u006c\u0061\u0073\u0073\u0069\u0066y\u0052a\u006e\u006b\u0048\u006f\u0075\u0073\u0065O\u006e\u0065";var (_dggb ,_ace ,_ggf ,_fed float32 ;_fbe ,_eab ,_ead int ;_gab ,_dcdb ,_dceb ,_eea ,_dcff *_fb .Bitmap ;_dcebc ,_dcg bool ;);_gbba :=_fb .MakePixelSumTab8 ();for _ffb :=0;_ffb < len (_bfg .Values );_ffb ++{if _dcdb ,_cfge =_ab .GetBitmap (_ffb );_cfge !=nil {return _f .Wrap (_cfge ,_bge ,"b\u006d\u0073\u0031\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};if _fbe ,_cfge =_eda .GetInt (_ffb );_cfge !=nil {_e .Log .Trace ("\u0047\u0065t\u0074\u0069\u006e\u0067 \u0046\u0047T\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073 \u0061\u0074\u003a\u0020\u0025\u0064\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_ffb ,_cfge );};if _dceb ,_cfge =_dgf .GetBitmap (_ffb );_cfge !=nil {return _f .Wrap (_cfge ,_bge ,"b\u006d\u0073\u0032\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};if _dggb ,_ace ,_cfge =_agf .GetGeometry (_ffb );_cfge !=nil {return _f .Wrapf (_cfge ,_bge ,"\u0070t\u0061[\u0069\u005d\u002e\u0047\u0065\u006f\u006d\u0065\u0074\u0072\u0079");};_fde :=len (_cdg .UndilatedTemplates .Values );_dcebc =false ;_ecaf :=_dadd (_cdg ,_dcdb );for _ead =_ecaf .Next ();_ead > -1;{if _eea ,_cfge =_cdg .UndilatedTemplates .GetBitmap (_ead );_cfge !=nil {return _f .Wrap (_cfge ,_bge ,"\u0070\u0069\u0078\u0061\u0074\u002e\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");};if _eab ,_cfge =_cdg .FgTemplates .GetInt (_ead );_cfge !=nil {_e .Log .Trace ("\u0047\u0065\u0074\u0074\u0069\u006eg\u0020\u0046\u0047\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u005b\u0025d\u005d\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_ead ,_cfge );};if _dcff ,_cfge =_cdg .DilatedTemplates .GetBitmap (_ead );_cfge !=nil {return _f .Wrap (_cfge ,_bge ,"\u0070\u0069\u0078\u0061\u0074\u0064\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");};if _ggf ,_fed ,_cfge =_cdg .CentroidPointsTemplates .GetGeometry (_ead );_cfge !=nil {return _f .Wrap (_cfge ,_bge ,"\u0043\u0065\u006et\u0072\u006f\u0069\u0064P\u006f\u0069\u006e\u0074\u0073\u0054\u0065m\u0070\u006c\u0061\u0074\u0065\u0073\u005b\u0069\u0043\u006c\u0061\u0073\u0073\u005d");};_dcg ,_cfge =_fb .RankHausTest (_dcdb ,_dceb ,_eea ,_dcff ,_dggb -_ggf ,_ace -_fed ,MaxDiffWidth ,MaxDiffHeight ,_fbe ,_eab ,float32 (_cdg .Settings .RankHaus ),_gbba );if _cfge !=nil {return _f .Wrap (_cfge ,_bge ,"");};if _dcg {_dcebc =true ;if _cfge =_cdg .ClassIDs .Add (_ead );_cfge !=nil {return _f .Wrap (_cfge ,_bge ,"");};if _cfge =_cdg .ComponentPageNumbers .Add (_gcb );_cfge !=nil {return _f .Wrap (_cfge ,_bge ,"");};if _cdg .Settings .KeepClassInstances {_bbb ,_gac :=_cdg .ClassInstances .GetBitmaps (_ead );if _gac !=nil {return _f .Wrap (_gac ,_bge ,"\u0063\u002e\u0050\u0069\u0078\u0061\u0061\u002e\u0047\u0065\u0074B\u0069\u0074\u006d\u0061\u0070\u0073\u0028\u0069\u0043\u006ca\u0073\u0073\u0029");};if _gab ,_gac =_bfg .GetBitmap (_ffb );_gac !=nil {return _f .Wrap (_gac ,_bge ,"\u0070i\u0078\u0061\u005b\u0069\u005d");};_bbb .Values =append (_bbb .Values ,_gab );_bcg ,_gac :=_dgg .Get (_ffb );if _gac !=nil {return _f .Wrap (_gac ,_bge ,"b\u006f\u0078\u0061\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};_bbb .Boxes =append (_bbb .Boxes ,_bcg );};break ;};};if !_dcebc {if _cfge =_cdg .ClassIDs .Add (_fde );_cfge !=nil {return _f .Wrap (_cfge ,_bge ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _cfge =_cdg .ComponentPageNumbers .Add (_gcb );_cfge !=nil {return _f .Wrap (_cfge ,_bge ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_cgfa :=&_fb .Bitmaps {};_gab =_bfg .Values [_ffb ];_cgfa .AddBitmap (_gab );_add ,_begc :=_gab .Width ,_gab .Height ;_cdg .TemplatesSize .Add (uint64 (_add )*uint64 (_begc ),_fde );_gaba ,_gfe :=_dgg .Get (_ffb );if _gfe !=nil {return _f .Wrap (_gfe ,_bge ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_cgfa .AddBox (_gaba );_cdg .ClassInstances .AddBitmaps (_cgfa );_cdg .CentroidPointsTemplates .AddPoint (_dggb ,_ace );_cdg .UndilatedTemplates .AddBitmap (_dcdb );_cdg .DilatedTemplates .AddBitmap (_dceb );_cdg .FgTemplates .AddInt (_fbe );};};_cdg .NumberOfClasses =len (_cdg .UndilatedTemplates .Values );return nil ;};const (MaxConnCompWidth =350;MaxCharCompWidth =350;MaxWordCompWidth =1000;MaxCompHeight =120;);func (_egg *Settings )SetDefault (){if _egg .MaxCompWidth ==0{switch _egg .Components {case _fb .ComponentConn :_egg .MaxCompWidth =MaxConnCompWidth ;case _fb .ComponentCharacters :_egg .MaxCompWidth =MaxCharCompWidth ;case _fb .ComponentWords :_egg .MaxCompWidth =MaxWordCompWidth ;};};if _egg .MaxCompHeight ==0{_egg .MaxCompHeight =MaxCompHeight ;};if _egg .Thresh ==0.0{_egg .Thresh =0.9;};if _egg .WeightFactor ==0.0{_egg .WeightFactor =0.75;};if _egg .RankHaus ==0.0{_egg .RankHaus =0.97;};if _egg .SizeHaus ==0{_egg .SizeHaus =2;};};type Classer struct{BaseIndex int ;Settings Settings ;ComponentsNumber *_b .IntSlice ;TemplateAreas *_b .IntSlice ;Widths map[int ]int ;Heights map[int ]int ;NumberOfClasses int ;ClassInstances *_fb .BitmapsArray ;UndilatedTemplates *_fb .Bitmaps ;DilatedTemplates *_fb .Bitmaps ;TemplatesSize _b .IntsMap ;FgTemplates *_b .NumSlice ;CentroidPoints *_fb .Points ;CentroidPointsTemplates *_fb .Points ;ClassIDs *_b .IntSlice ;ComponentPageNumbers *_b .IntSlice ;PtaUL *_fb .Points ;PtaLL *_fb .Points ;};func Init (settings Settings )(*Classer ,error ){const _a ="\u0063\u006c\u0061s\u0073\u0065\u0072\u002e\u0049\u006e\u0069\u0074";_d :=&Classer {Settings :settings ,Widths :map[int ]int {},Heights :map[int ]int {},TemplatesSize :_b .IntsMap {},TemplateAreas :&_b .IntSlice {},ComponentPageNumbers :&_b .IntSlice {},ClassIDs :&_b .IntSlice {},ComponentsNumber :&_b .IntSlice {},CentroidPoints :&_fb .Points {},CentroidPointsTemplates :&_fb .Points {},UndilatedTemplates :&_fb .Bitmaps {},DilatedTemplates :&_fb .Bitmaps {},ClassInstances :&_fb .BitmapsArray {},FgTemplates :&_b .NumSlice {}};if _ee :=_d .Settings .Validate ();_ee !=nil {return nil ,_f .Wrap (_ee ,_a ,"");};return _d ,nil ;};func (_cca *Classer )addPageComponents (_fff *_fb .Bitmap ,_fd *_fb .Boxes ,_eg *_fb .Bitmaps ,_bc int ,_ae Method )error {const _db ="\u0043l\u0061\u0073\u0073\u0065r\u002e\u0041\u0064\u0064\u0050a\u0067e\u0043o\u006d\u0070\u006f\u006e\u0065\u006e\u0074s";if _fff ==nil {return _f .Error (_db ,"\u006e\u0069\u006c\u0020\u0069\u006e\u0070\u0075\u0074 \u0070\u0061\u0067\u0065");};if _fd ==nil ||_eg ==nil ||len (*_fd )==0{_e .Log .Trace ("\u0041\u0064\u0064P\u0061\u0067\u0065\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u003a\u0020\u0025\u0073\u002e\u0020\u004e\u006f\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065n\u0074\u0073\u0020\u0066\u006f\u0075\u006e\u0064",_fff );return nil ;};var _fe error ;switch _ae {case RankHaus :_fe =_cca .classifyRankHaus (_fd ,_eg ,_bc );case Correlation :_fe =_cca .classifyCorrelation (_fd ,_eg ,_bc );default:_e .Log .Debug ("\u0055\u006ek\u006e\u006f\u0077\u006e\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0079\u0020\u006d\u0065\u0074\u0068\u006f\u0064\u003a\u0020'%\u0076\u0027",_ae );return _f .Error (_db ,"\u0075\u006e\u006bno\u0077\u006e\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0079\u0020\u006d\u0065\u0074\u0068\u006f\u0064");};if _fe !=nil {return _f .Wrap (_fe ,_db ,"");};if _fe =_cca .getULCorners (_fff ,_fd );_fe !=nil {return _f .Wrap (_fe ,_db ,"");};_dga :=len (*_fd );_cca .BaseIndex +=_dga ;if _fe =_cca .ComponentsNumber .Add (_dga );_fe !=nil {return _f .Wrap (_fe ,_db ,"");};return nil ;};func DefaultSettings ()Settings {_eff :=&Settings {};_eff .SetDefault ();return *_eff };type Settings struct{MaxCompWidth int ;MaxCompHeight int ;SizeHaus int ;RankHaus float64 ;Thresh float64 ;WeightFactor float64 ;KeepClassInstances bool ;Components _fb .Component ;Method Method ;};func (_bdb Settings )Validate ()error {const _bdbc ="\u0053\u0065\u0074\u0074\u0069\u006e\u0067\u0073\u002e\u0056\u0061\u006ci\u0064\u0061\u0074\u0065";if _bdb .Thresh < 0.4||_bdb .Thresh > 0.98{return _f .Error (_bdbc ,"\u006a\u0062i\u0067\u0032\u0020\u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0074\u0068\u0072\u0065\u0073\u0068\u0020\u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u005b\u0030\u002e\u0034\u0020\u002d\u0020\u0030\u002e\u0039\u0038\u005d");};if _bdb .WeightFactor < 0.0||_bdb .WeightFactor > 1.0{return _f .Error (_bdbc ,"\u006a\u0062i\u0067\u0032\u0020\u0065\u006ec\u006f\u0064\u0065\u0072\u0020w\u0065\u0069\u0067\u0068\u0074\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u005b\u0030\u002e\u0030\u0020\u002d\u0020\u0031\u002e\u0030\u005d");};if _bdb .RankHaus < 0.5||_bdb .RankHaus > 1.0{return _f .Error (_bdbc ,"\u006a\u0062\u0069\u0067\u0032\u0020\u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0072a\u006e\u006b\u0020\u0068\u0061\u0075\u0073\u0020\u0076\u0061\u006c\u0075\u0065 \u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065 [\u0030\u002e\u0035\u0020\u002d\u0020\u0031\u002e\u0030\u005d");};if _bdb .SizeHaus < 1||_bdb .SizeHaus > 10{return _f .Error (_bdbc ,"\u006a\u0062\u0069\u0067\u0032 \u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0073\u0069\u007a\u0065\u0020h\u0061\u0075\u0073\u0020\u0076\u0061\u006c\u0075\u0065\u0020\u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u005b\u0031\u0020\u002d\u0020\u0031\u0030]");};switch _bdb .Components {case _fb .ComponentConn ,_fb .ComponentCharacters ,_fb .ComponentWords :default:return _f .Error (_bdbc ,"\u0069n\u0076\u0061\u006c\u0069d\u0020\u0063\u006c\u0061\u0073s\u0065r\u0020c\u006f\u006d\u0070\u006f\u006e\u0065\u006et");};return nil ;};func (_cg *Classer )getULCorners (_gf *_fb .Bitmap ,_ege *_fb .Boxes )error {const _ffg ="\u0067\u0065\u0074U\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";if _gf ==nil {return _f .Error (_ffg ,"\u006e\u0069l\u0020\u0069\u006da\u0067\u0065\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ege ==nil {return _f .Error (_ffg ,"\u006e\u0069\u006c\u0020\u0062\u006f\u0075\u006e\u0064\u0073");};if _cg .PtaUL ==nil {_cg .PtaUL =&_fb .Points {};};_beg :=len (*_ege );var (_dd ,_ccb ,_bce ,_ga int ;_bf ,_bb ,_ed ,_gb float32 ;_gbd error ;_df *_g .Rectangle ;_ad *_fb .Bitmap ;_bfd _g .Point ;);for _fc :=0;_fc < _beg ;_fc ++{_dd =_cg .BaseIndex +_fc ;if _bf ,_bb ,_gbd =_cg .CentroidPoints .GetGeometry (_dd );_gbd !=nil {return _f .Wrap (_gbd ,_ffg ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0050o\u0069\u006e\u0074\u0073");};if _ccb ,_gbd =_cg .ClassIDs .Get (_dd );_gbd !=nil {return _f .Wrap (_gbd ,_ffg ,"\u0043\u006c\u0061s\u0073\u0049\u0044\u0073\u002e\u0047\u0065\u0074");};if _ed ,_gb ,_gbd =_cg .CentroidPointsTemplates .GetGeometry (_ccb );_gbd !=nil {return _f .Wrap (_gbd ,_ffg ,"\u0043\u0065\u006etr\u006f\u0069\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_gg :=_ed -_bf ;_cgf :=_gb -_bb ;if _gg >=0{_bce =int (_gg +0.5);}else {_bce =int (_gg -0.5);};if _cgf >=0{_ga =int (_cgf +0.5);}else {_ga =int (_cgf -0.5);};if _df ,_gbd =_ege .Get (_fc );_gbd !=nil {return _f .Wrap (_gbd ,_ffg ,"");};_gbe ,_aea :=_df .Min .X ,_df .Min .Y ;_ad ,_gbd =_cg .UndilatedTemplates .GetBitmap (_ccb );if _gbd !=nil {return _f .Wrap (_gbd ,_ffg ,"\u0055\u006e\u0064\u0069\u006c\u0061\u0074\u0065\u0064\u0054e\u006d\u0070\u006c\u0061\u0074\u0065\u0073.\u0047\u0065\u0074\u0028\u0069\u0043\u006c\u0061\u0073\u0073\u0029");};_bfd ,_gbd =_gd (_gf ,_gbe ,_aea ,_bce ,_ga ,_ad );if _gbd !=nil {return _f .Wrap (_gbd ,_ffg ,"");};_cg .PtaUL .AddPoint (float32 (_gbe -_bce +_bfd .X ),float32 (_aea -_ga +_bfd .Y ));};return nil ;};func _gd (_gfb *_fb .Bitmap ,_cgfb ,_fa ,_dba ,_bee int ,_gag *_fb .Bitmap )(_bac _g .Point ,_bca error ){const _geg ="\u0066i\u006e\u0061\u006c\u0041l\u0069\u0067\u006e\u006d\u0065n\u0074P\u006fs\u0069\u0074\u0069\u006f\u006e\u0069\u006eg";if _gfb ==nil {return _bac ,_f .Error (_geg ,"\u0073\u006f\u0075\u0072ce\u0020\u006e\u006f\u0074\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};if _gag ==nil {return _bac ,_f .Error (_geg ,"t\u0065\u006d\u0070\u006cat\u0065 \u006e\u006f\u0074\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064");};_ca ,_af :=_gag .Width ,_gag .Height ;_dc ,_cb :=_cgfb -_dba -JbAddedPixels ,_fa -_bee -JbAddedPixels ;_e .Log .Trace ("\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0079\u003a\u0020\u0027\u0025\u0064'\u002c\u0020\u0077\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0068\u003a \u0027\u0025\u0064\u0027\u002c\u0020\u0062\u0078\u003a\u0020\u0027\u0025d'\u002c\u0020\u0062\u0079\u003a\u0020\u0027\u0025\u0064\u0027",_cgfb ,_fa ,_ca ,_af ,_dc ,_cb );_ddg ,_bca :=_fb .Rect (_dc ,_cb ,_ca ,_af );if _bca !=nil {return _bac ,_f .Wrap (_bca ,_geg ,"");};_aa ,_ ,_bca :=_gfb .ClipRectangle (_ddg );if _bca !=nil {_e .Log .Error ("\u0043a\u006e\u0027\u0074\u0020\u0063\u006c\u0069\u0070\u0020\u0072\u0065c\u0074\u0061\u006e\u0067\u006c\u0065\u003a\u0020\u0025\u0076",_ddg );return _bac ,_f .Wrap (_bca ,_geg ,"");};_gaa :=_fb .New (_aa .Width ,_aa .Height );_cfc :=_cd .MaxInt32 ;var _ef ,_gbg ,_daf ,_ffd ,_dfa int ;for _ef =-1;_ef <=1;_ef ++{for _gbg =-1;_gbg <=1;_gbg ++{if _ ,_bca =_fb .Copy (_gaa ,_aa );_bca !=nil {return _bac ,_f .Wrap (_bca ,_geg ,"");};if _bca =_gaa .RasterOperation (_gbg ,_ef ,_ca ,_af ,_fb .PixSrcXorDst ,_gag ,0,0);_bca !=nil {return _bac ,_f .Wrap (_bca ,_geg ,"");};_daf =_gaa .CountPixels ();if _daf < _cfc {_ffd =_gbg ;_dfa =_ef ;_cfc =_daf ;};};};_bac .X =_ffd ;_bac .Y =_dfa ;return _bac ,nil ;};func (_gbeb *Classer )classifyRankHouseOne (_dcd *_fb .Boxes ,_cgfe ,_afdd ,_dab *_fb .Bitmaps ,_cbd *_fb .Points ,_ccd int )(_feg error ){const _dcce ="\u0043\u006c\u0061\u0073s\u0065\u0072\u002e\u0063\u006c\u0061\u0073\u0073\u0069\u0066y\u0052a\u006e\u006b\u0048\u006f\u0075\u0073\u0065O\u006e\u0065";var (_dffe ,_fea ,_cee ,_aeb float32 ;_fce int ;_eca ,_aag ,_efa ,_dae ,_cce *_fb .Bitmap ;_gedg ,_ecg bool ;);for _afdae :=0;_afdae < len (_cgfe .Values );_afdae ++{_aag =_afdd .Values [_afdae ];_efa =_dab .Values [_afdae ];_dffe ,_fea ,_feg =_cbd .GetGeometry (_afdae );if _feg !=nil {return _f .Wrapf (_feg ,_dcce ,"\u0066\u0069\u0072\u0073\u0074\u0020\u0067\u0065\u006fm\u0065\u0074\u0072\u0079");};_bfc :=len (_gbeb .UndilatedTemplates .Values );_gedg =false ;_bfb :=_dadd (_gbeb ,_aag );for _fce =_bfb .Next ();_fce > -1;{_dae ,_feg =_gbeb .UndilatedTemplates .GetBitmap (_fce );if _feg !=nil {return _f .Wrap (_feg ,_dcce ,"\u0062\u006d\u0033");};_cce ,_feg =_gbeb .DilatedTemplates .GetBitmap (_fce );if _feg !=nil {return _f .Wrap (_feg ,_dcce ,"\u0062\u006d\u0034");};_cee ,_aeb ,_feg =_gbeb .CentroidPointsTemplates .GetGeometry (_fce );if _feg !=nil {return _f .Wrap (_feg ,_dcce ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0054\u0065\u006d\u0070l\u0061\u0074\u0065\u0073");};_ecg ,_feg =_fb .HausTest (_aag ,_efa ,_dae ,_cce ,_dffe -_cee ,_fea -_aeb ,MaxDiffWidth ,MaxDiffHeight );if _feg !=nil {return _f .Wrap (_feg ,_dcce ,"");};if _ecg {_gedg =true ;if _feg =_gbeb .ClassIDs .Add (_fce );_feg !=nil {return _f .Wrap (_feg ,_dcce ,"");};if _feg =_gbeb .ComponentPageNumbers .Add (_ccd );_feg !=nil {return _f .Wrap (_feg ,_dcce ,"");};if _gbeb .Settings .KeepClassInstances {_ccbe ,_gcda :=_gbeb .ClassInstances .GetBitmaps (_fce );if _gcda !=nil {return _f .Wrap (_gcda ,_dcce ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_eca ,_gcda =_cgfe .GetBitmap (_afdae );if _gcda !=nil {return _f .Wrap (_gcda ,_dcce ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_ccbe .AddBitmap (_eca );_ffc ,_gcda :=_dcd .Get (_afdae );if _gcda !=nil {return _f .Wrap (_gcda ,_dcce ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_ccbe .AddBox (_ffc );};break ;};};if !_gedg {if _feg =_gbeb .ClassIDs .Add (_bfc );_feg !=nil {return _f .Wrap (_feg ,_dcce ,"");};if _feg =_gbeb .ComponentPageNumbers .Add (_ccd );_feg !=nil {return _f .Wrap (_feg ,_dcce ,"");};_efb :=&_fb .Bitmaps {};_eca ,_feg =_cgfe .GetBitmap (_afdae );if _feg !=nil {return _f .Wrap (_feg ,_dcce ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_efb .Values =append (_efb .Values ,_eca );_fga ,_ebf :=_eca .Width ,_eca .Height ;_gbeb .TemplatesSize .Add (uint64 (_ebf )*uint64 (_fga ),_bfc );_cac ,_fgb :=_dcd .Get (_afdae );if _fgb !=nil {return _f .Wrap (_fgb ,_dcce ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_efb .AddBox (_cac );_gbeb .ClassInstances .AddBitmaps (_efb );_gbeb .CentroidPointsTemplates .AddPoint (_dffe ,_fea );_gbeb .UndilatedTemplates .AddBitmap (_aag );_gbeb .DilatedTemplates .AddBitmap (_efa );};};return nil ;};const (MaxDiffWidth =2;MaxDiffHeight =2;);func (_aed *Classer )classifyRankHaus (_cda *_fb .Boxes ,_dccb *_fb .Bitmaps ,_ebb int )error {const _gadc ="\u0063\u006ca\u0073\u0073\u0069f\u0079\u0052\u0061\u006e\u006b\u0048\u0061\u0075\u0073";if _cda ==nil {return _f .Error (_gadc ,"\u0062\u006fx\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _dccb ==nil {return _f .Error (_gadc ,"\u0070\u0069x\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_cge :=len (_dccb .Values );if _cge ==0{return _f .Error (_gadc ,"e\u006dp\u0074\u0079\u0020\u006e\u0065\u0077\u0020\u0063o\u006d\u0070\u006f\u006een\u0074\u0073");};_ffdc :=_dccb .CountPixels ();_bab :=_aed .Settings .SizeHaus ;_gcd :=_fb .SelCreateBrick (_bab ,_bab ,_bab /2,_bab /2,_fb .SelHit );_ecd :=&_fb .Bitmaps {Values :make ([]*_fb .Bitmap ,_cge )};_ged :=&_fb .Bitmaps {Values :make ([]*_fb .Bitmap ,_cge )};var (_aff ,_degc ,_dce *_fb .Bitmap ;_gbb error ;);for _afc :=0;_afc < _cge ;_afc ++{_aff ,_gbb =_dccb .GetBitmap (_afc );if _gbb !=nil {return _f .Wrap (_gbb ,_gadc ,"");};_degc ,_gbb =_aff .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);if _gbb !=nil {return _f .Wrap (_gbb ,_gadc ,"");};_dce ,_gbb =_fb .Dilate (nil ,_degc ,_gcd );if _gbb !=nil {return _f .Wrap (_gbb ,_gadc ,"");};_ecd .Values [_cge ]=_degc ;_ged .Values [_cge ]=_dce ;};_afda ,_gbb :=_fb .Centroids (_ecd .Values );if _gbb !=nil {return _f .Wrap (_gbb ,_gadc ,"");};if _gbb =_afda .Add (_aed .CentroidPoints );_gbb !=nil {_e .Log .Trace ("\u004e\u006f\u0020\u0063en\u0074\u0072\u006f\u0069\u0064\u0073\u0020\u0074\u006f\u0020\u0061\u0064\u0064");};if _aed .Settings .RankHaus ==1.0{_gbb =_aed .classifyRankHouseOne (_cda ,_dccb ,_ecd ,_ged ,_afda ,_ebb );}else {_gbb =_aed .classifyRankHouseNonOne (_cda ,_dccb ,_ecd ,_ged ,_afda ,_ffdc ,_ebb );};if _gbb !=nil {return _f .Wrap (_gbb ,_gadc ,"");};return nil ;};var TwoByTwoWalk =[]int {0,0,0,1,-1,0,0,-1,1,0,-1,1,1,1,-1,-1,1,-1,0,-2,2,0,0,2,-2,0,-1,-2,1,-2,2,-1,2,1,1,2,-1,2,-2,1,-2,-1,-2,-2,2,-2,2,2,-2,2};type similarTemplatesFinder struct{Classer *Classer ;Width int ;Height int ;Index int ;CurrentNumbers []int ;N int ;};const (RankHaus Method =iota ;Correlation ;);func _dadd (_adbb *Classer ,_abf *_fb .Bitmap )*similarTemplatesFinder {return &similarTemplatesFinder {Width :_abf .Width ,Height :_abf .Height ,Classer :_adbb };};func (_da *Classer )AddPage (inputPage *_fb .Bitmap ,pageNumber int ,method Method )(_ac error ){const _de ="\u0043l\u0061s\u0073\u0065\u0072\u002e\u0041\u0064\u0064\u0050\u0061\u0067\u0065";_da .Widths [pageNumber ]=inputPage .Width ;_da .Heights [pageNumber ]=inputPage .Height ;if _ac =_da .verifyMethod (method );_ac !=nil {return _f .Wrap (_ac ,_de ,"");};_ge ,_dg ,_ac :=inputPage .GetComponents (_da .Settings .Components ,_da .Settings .MaxCompWidth ,_da .Settings .MaxCompHeight );if _ac !=nil {return _f .Wrap (_ac ,_de ,"");};_e .Log .Debug ("\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074s\u003a\u0020\u0025\u0076",_ge );if _ac =_da .addPageComponents (inputPage ,_dg ,_ge ,pageNumber ,method );_ac !=nil {return _f .Wrap (_ac ,_de ,"");};return nil ;};func (_dfb *Classer )classifyCorrelation (_aac *_fb .Boxes ,_ddb *_fb .Bitmaps ,_adb int )error {const _ccf ="\u0063\u006c\u0061\u0073si\u0066\u0079\u0043\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e";if _aac ==nil {return _f .Error (_ccf ,"\u006e\u0065\u0077\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0020\u0062\u006f\u0075\u006e\u0064\u0069\u006e\u0067\u0020\u0062o\u0078\u0065\u0073\u0020\u006eo\u0074\u0020f\u006f\u0075\u006e\u0064");};if _ddb ==nil {return _f .Error (_ccf ,"\u006e\u0065wC\u006f\u006d\u0070o\u006e\u0065\u006e\u0074s b\u0069tm\u0061\u0070\u0020\u0061\u0072\u0072\u0061y \u006e\u006f\u0074\u0020\u0066\u006f\u0075n\u0064");};_fcd :=len (_ddb .Values );if _fcd ==0{_e .Log .Debug ("\u0063l\u0061\u0073s\u0069\u0066\u0079C\u006f\u0072\u0072\u0065\u006c\u0061\u0074i\u006f\u006e\u0020\u002d\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0070\u0069\u0078\u0061s\u0020\u0069\u0073\u0020\u0065\u006d\u0070\u0074\u0079");return nil ;};var (_ggc ,_gff *_fb .Bitmap ;_cgc error ;);_cba :=&_fb .Bitmaps {Values :make ([]*_fb .Bitmap ,_fcd )};for _dea ,_ag :=range _ddb .Values {_gff ,_cgc =_ag .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);if _cgc !=nil {return _f .Wrap (_cgc ,_ccf ,"");};_cba .Values [_dea ]=_gff ;};_aef :=_dfb .FgTemplates ;_fg :=_fb .MakePixelSumTab8 ();_gge :=_fb .MakePixelCentroidTab8 ();_afd :=make ([]int ,_fcd );_bbc :=make ([][]int ,_fcd );_bacd :=_fb .Points (make ([]_fb .Point ,_fcd ));_edf :=&_bacd ;var (_fcc ,_dcf int ;_edfb ,_bba ,_fdb int ;_gad ,_ea int ;_eb byte ;);for _egf ,_edc :=range _cba .Values {_bbc [_egf ]=make ([]int ,_edc .Height );_fcc =0;_dcf =0;_bba =(_edc .Height -1)*_edc .RowStride ;_edfb =0;for _ea =_edc .Height -1;_ea >=0;_ea ,_bba =_ea -1,_bba -_edc .RowStride {_bbc [_egf ][_ea ]=_edfb ;_fdb =0;for _gad =0;_gad < _edc .RowStride ;_gad ++{_eb =_edc .Data [_bba +_gad ];_fdb +=_fg [_eb ];_fcc +=_gge [_eb ]+_gad *8*_fg [_eb ];};_edfb +=_fdb ;_dcf +=_fdb *_ea ;};_afd [_egf ]=_edfb ;if _edfb > 0{(*_edf )[_egf ]=_fb .Point {X :float32 (_fcc )/float32 (_edfb ),Y :float32 (_dcf )/float32 (_edfb )};}else {(*_edf )[_egf ]=_fb .Point {X :float32 (_edc .Width )/float32 (2),Y :float32 (_edc .Height )/float32 (2)};};};if _cgc =_dfb .CentroidPoints .Add (_edf );_cgc !=nil {return _f .Wrap (_cgc ,_ccf ,"\u0063\u0065\u006et\u0072\u006f\u0069\u0064\u0020\u0061\u0064\u0064");};var (_bed ,_ce ,_bcd int ;_egd float64 ;_fgf ,_bd ,_fca ,_cfg float32 ;_eed ,_gce _fb .Point ;_fbc bool ;_ecc *similarTemplatesFinder ;_eged int ;_bdg *_fb .Bitmap ;_fda *_g .Rectangle ;_cfd *_fb .Bitmaps ;);for _eged ,_gff =range _cba .Values {_ce =_afd [_eged ];if _fgf ,_bd ,_cgc =_edf .GetGeometry (_eged );_cgc !=nil {return _f .Wrap (_cgc ,_ccf ,"\u0070t\u0061\u0020\u002d\u0020\u0069");};_fbc =false ;_dff :=len (_dfb .UndilatedTemplates .Values );_ecc =_dadd (_dfb ,_gff );for _deg :=_ecc .Next ();_deg > -1;{if _bdg ,_cgc =_dfb .UndilatedTemplates .GetBitmap (_deg );_cgc !=nil {return _f .Wrap (_cgc ,_ccf ,"\u0075\u006e\u0069dl\u0061\u0074\u0065\u0064\u005b\u0069\u0063\u006c\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u0062\u006d\u0032");};if _bcd ,_cgc =_aef .GetInt (_deg );_cgc !=nil {_e .Log .Trace ("\u0046\u0047\u0020T\u0065\u006d\u0070\u006ca\u0074\u0065\u0020\u005b\u0069\u0063\u006ca\u0073\u0073\u005d\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_cgc );};if _fca ,_cfg ,_cgc =_dfb .CentroidPointsTemplates .GetGeometry (_deg );_cgc !=nil {return _f .Wrap (_cgc ,_ccf ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0050\u006f\u0069\u006e\u0074T\u0065\u006d\u0070\u006c\u0061\u0074e\u0073\u005b\u0069\u0063\u006c\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u00782\u002c\u0079\u0032\u0020");};if _dfb .Settings .WeightFactor > 0.0{if _bed ,_cgc =_dfb .TemplateAreas .Get (_deg );_cgc !=nil {_e .Log .Trace ("\u0054\u0065\u006dp\u006c\u0061\u0074\u0065A\u0072\u0065\u0061\u0073\u005b\u0069\u0063l\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u0061\u0072\u0065\u0061\u0020\u0025\u0076",_cgc );};_egd =_dfb .Settings .Thresh +(1.0-_dfb .Settings .Thresh )*_dfb .Settings .WeightFactor *float64 (_bcd )/float64 (_bed );}else {_egd =_dfb .Settings .Thresh ;};_dad ,_cbaa :=_fb .CorrelationScoreThresholded (_gff ,_bdg ,_ce ,_bcd ,_eed .X -_gce .X ,_eed .Y -_gce .Y ,MaxDiffWidth ,MaxDiffHeight ,_fg ,_bbc [_eged ],float32 (_egd ));if _cbaa !=nil {return _f .Wrap (_cbaa ,_ccf ,"");};if _dcc {var (_efg ,_faf float64 ;_bae ,_gfc int ;);_efg ,_cbaa =_fb .CorrelationScore (_gff ,_bdg ,_ce ,_bcd ,_fgf -_fca ,_bd -_cfg ,MaxDiffWidth ,MaxDiffHeight ,_fg );if _cbaa !=nil {return _f .Wrap (_cbaa ,_ccf ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");};_faf ,_cbaa =_fb .CorrelationScoreSimple (_gff ,_bdg ,_ce ,_bcd ,_fgf -_fca ,_bd -_cfg ,MaxDiffWidth ,MaxDiffHeight ,_fg );if _cbaa !=nil {return _f .Wrap (_cbaa ,_ccf ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");};_bae =int (_cd .Sqrt (_efg *float64 (_ce )*float64 (_bcd )));_gfc =int (_cd .Sqrt (_faf *float64 (_ce )*float64 (_bcd )));if (_efg >=_egd )!=(_faf >=_egd ){return _f .Errorf (_ccf ,"\u0064\u0065\u0062\u0075\u0067\u0020\u0043\u006f\u0072r\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020\u0073\u0063\u006f\u0072\u0065\u0020\u006d\u0069\u0073\u006d\u0061\u0074\u0063\u0068\u0020-\u0020\u0025d\u0028\u00250\u002e\u0034\u0066\u002c\u0020\u0025\u0076\u0029\u0020\u0076\u0073\u0020\u0025d(\u0025\u0030\u002e\u0034\u0066\u002c\u0020\u0025\u0076)\u0020\u0025\u0030\u002e\u0034\u0066",_bae ,_efg ,_efg >=_egd ,_gfc ,_faf ,_faf >=_egd ,_efg -_faf );};if _efg >=_egd !=_dad {return _f .Errorf (_ccf ,"\u0064\u0065\u0062\u0075\u0067\u0020\u0043o\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e \u0073\u0063\u006f\u0072\u0065 \u004d\u0069\u0073\u006d\u0061t\u0063\u0068 \u0062\u0065\u0074w\u0065\u0065\u006e\u0020\u0063\u006frr\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020/\u0020\u0074\u0068\u0072\u0065s\u0068\u006f\u006c\u0064\u002e\u0020\u0043\u006f\u006dpa\u0072\u0069\u0073\u006f\u006e:\u0020\u0025\u0030\u002e\u0034\u0066\u0028\u0025\u0030\u002e\u0034\u0066\u002c\u0020\u0025\u0064\u0029\u0020\u003e\u003d\u0020\u00250\u002e\u0034\u0066\u0028\u0025\u0030\u002e\u0034\u0066\u0029\u0020\u0076\u0073\u0020\u0025\u0076",_efg ,_efg *float64 (_ce )*float64 (_bcd ),_bae ,_egd ,float32 (_egd )*float32 (_ce )*float32 (_bcd ),_dad );};};if _dad {_fbc =true ;if _cbaa =_dfb .ClassIDs .Add (_deg );_cbaa !=nil {return _f .Wrap (_cbaa ,_ccf ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");};if _cbaa =_dfb .ComponentPageNumbers .Add (_adb );_cbaa !=nil {return _f .Wrap (_cbaa ,_ccf ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");};if _dfb .Settings .KeepClassInstances {if _ggc ,_cbaa =_ddb .GetBitmap (_eged );_cbaa !=nil {return _f .Wrap (_cbaa ,_ccf ,"\u004b\u0065\u0065\u0070Cl\u0061\u0073\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0073\u0020\u002d \u0069");};if _cfd ,_cbaa =_dfb .ClassInstances .GetBitmaps (_deg );_cbaa !=nil {return _f .Wrap (_cbaa ,_ccf ,"K\u0065\u0065\u0070\u0043\u006c\u0061s\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065s\u0020\u002d\u0020i\u0043l\u0061\u0073\u0073");};_cfd .AddBitmap (_ggc );if _fda ,_cbaa =_aac .Get (_eged );_cbaa !=nil {return _f .Wrap (_cbaa ,_ccf ,"\u004be\u0065p\u0043\u006c\u0061\u0073\u0073I\u006e\u0073t\u0061\u006e\u0063\u0065\u0073");};_cfd .AddBox (_fda );};break ;};};if !_fbc {if _cgc =_dfb .ClassIDs .Add (_dff );_cgc !=nil {return _f .Wrap (_cgc ,_ccf ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _cgc =_dfb .ComponentPageNumbers .Add (_adb );_cgc !=nil {return _f .Wrap (_cgc ,_ccf ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_cfd =&_fb .Bitmaps {};if _ggc ,_cgc =_ddb .GetBitmap (_eged );_cgc !=nil {return _f .Wrap (_cgc ,_ccf ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_cfd .AddBitmap (_ggc );_gfcd ,_bege :=_ggc .Width ,_ggc .Height ;_bbab :=uint64 (_bege )*uint64 (_gfcd );_dfb .TemplatesSize .Add (_bbab ,_dff );if _fda ,_cgc =_aac .Get (_eged );_cgc !=nil {return _f .Wrap (_cgc ,_ccf ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_cfd .AddBox (_fda );_dfb .ClassInstances .AddBitmaps (_cfd );_dfb .CentroidPointsTemplates .AddPoint (_fgf ,_bd );_dfb .FgTemplates .AddInt (_ce );_dfb .UndilatedTemplates .AddBitmap (_ggc );_bed =(_gff .Width -2*JbAddedPixels )*(_gff .Height -2*JbAddedPixels );if _cgc =_dfb .TemplateAreas .Add (_bed );_cgc !=nil {return _f .Wrap (_cgc ,_ccf ,"\u0021\u0066\u006f\u0075\u006e\u0064");};};};_dfb .NumberOfClasses =len (_dfb .UndilatedTemplates .Values );return nil ;};func (_age *similarTemplatesFinder )Next ()int {var (_bgea ,_acf ,_fcdb ,_gde int ;_bbbc bool ;_afe *_fb .Bitmap ;_gdc error ;);for {if _age .Index >=25{return -1;};_acf =_age .Width +TwoByTwoWalk [2*_age .Index ];_bgea =_age .Height +TwoByTwoWalk [2*_age .Index +1];if _bgea < 1||_acf < 1{_age .Index ++;continue ;};if len (_age .CurrentNumbers )==0{_age .CurrentNumbers ,_bbbc =_age .Classer .TemplatesSize .GetSlice (uint64 (_acf )*uint64 (_bgea ));if !_bbbc {_age .Index ++;continue ;};_age .N =0;};_fcdb =len (_age .CurrentNumbers );for ;_age .N < _fcdb ;_age .N ++{_gde =_age .CurrentNumbers [_age .N ];_afe ,_gdc =_age .Classer .DilatedTemplates .GetBitmap (_gde );if _gdc !=nil {_e .Log .Debug ("\u0046\u0069\u006e\u0064\u004e\u0065\u0078\u0074\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u003a\u0020\u0074\u0065\u006d\u0070\u006c\u0061t\u0065\u0020\u006e\u006f\u0074 \u0066\u006fu\u006e\u0064\u003a\u0020");return 0;};if _afe .Width -2*JbAddedPixels ==_acf &&_afe .Height -2*JbAddedPixels ==_bgea {return _gde ;};};_age .Index ++;_age .CurrentNumbers =nil ;};};const JbAddedPixels =6;var _dcc bool ;type Method int ;