2022-07-13 21:28:43 +00:00

111 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 (_c "github.com/unidoc/unipdf/v3/common";_ca "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_d "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_cb "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_b "image";_e "math";
);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};func (_febc *Classer )classifyRankHaus (_edc *_d .Boxes ,_gcb *_d .Bitmaps ,_ffe int )error {const _bdb ="\u0063\u006ca\u0073\u0073\u0069f\u0079\u0052\u0061\u006e\u006b\u0048\u0061\u0075\u0073";
if _edc ==nil {return _cb .Error (_bdb ,"\u0062\u006fx\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _gcb ==nil {return _cb .Error (_bdb ,"\u0070\u0069x\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};_bfa :=len (_gcb .Values );if _bfa ==0{return _cb .Error (_bdb ,"e\u006dp\u0074\u0079\u0020\u006e\u0065\u0077\u0020\u0063o\u006d\u0070\u006f\u006een\u0074\u0073");};_cab :=_gcb .CountPixels ();_gbe :=_febc .Settings .SizeHaus ;_gff :=_d .SelCreateBrick (_gbe ,_gbe ,_gbe /2,_gbe /2,_d .SelHit );
_ddg :=&_d .Bitmaps {Values :make ([]*_d .Bitmap ,_bfa )};_dga :=&_d .Bitmaps {Values :make ([]*_d .Bitmap ,_bfa )};var (_fbe ,_acd ,_bdbd *_d .Bitmap ;_bbc error ;);for _fcc :=0;_fcc < _bfa ;_fcc ++{_fbe ,_bbc =_gcb .GetBitmap (_fcc );if _bbc !=nil {return _cb .Wrap (_bbc ,_bdb ,"");
};_acd ,_bbc =_fbe .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);if _bbc !=nil {return _cb .Wrap (_bbc ,_bdb ,"");};_bdbd ,_bbc =_d .Dilate (nil ,_acd ,_gff );if _bbc !=nil {return _cb .Wrap (_bbc ,_bdb ,"");};_ddg .Values [_bfa ]=_acd ;
_dga .Values [_bfa ]=_bdbd ;};_beb ,_bbc :=_d .Centroids (_ddg .Values );if _bbc !=nil {return _cb .Wrap (_bbc ,_bdb ,"");};if _bbc =_beb .Add (_febc .CentroidPoints );_bbc !=nil {_c .Log .Trace ("\u004e\u006f\u0020\u0063en\u0074\u0072\u006f\u0069\u0064\u0073\u0020\u0074\u006f\u0020\u0061\u0064\u0064");
};if _febc .Settings .RankHaus ==1.0{_bbc =_febc .classifyRankHouseOne (_edc ,_gcb ,_ddg ,_dga ,_beb ,_ffe );}else {_bbc =_febc .classifyRankHouseNonOne (_edc ,_gcb ,_ddg ,_dga ,_beb ,_cab ,_ffe );};if _bbc !=nil {return _cb .Wrap (_bbc ,_bdb ,"");};return nil ;
};func (_bfca *Classer )classifyRankHouseNonOne (_bec *_d .Boxes ,_efe ,_gecd ,_bedd *_d .Bitmaps ,_ccd *_d .Points ,_gad *_ca .NumSlice ,_dee int )(_deg error ){const _ggaa ="\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 (_fbc ,_ecc ,_fga ,_dbc float32 ;_beda ,_dgaf ,_cbdg int ;_gfa ,_dfg ,_abcb ,_egd ,_ada *_d .Bitmap ;_dba ,_eccg bool ;);_eac :=_d .MakePixelSumTab8 ();for _caa :=0;_caa < len (_efe .Values );_caa ++{if _dfg ,_deg =_gecd .GetBitmap (_caa );_deg !=nil {return _cb .Wrap (_deg ,_ggaa ,"b\u006d\u0073\u0031\u002e\u0047\u0065\u0074\u0028\u0069\u0029");
};if _beda ,_deg =_gad .GetInt (_caa );_deg !=nil {_c .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",_caa ,_deg );
};if _abcb ,_deg =_bedd .GetBitmap (_caa );_deg !=nil {return _cb .Wrap (_deg ,_ggaa ,"b\u006d\u0073\u0032\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};if _fbc ,_ecc ,_deg =_ccd .GetGeometry (_caa );_deg !=nil {return _cb .Wrapf (_deg ,_ggaa ,"\u0070t\u0061[\u0069\u005d\u002e\u0047\u0065\u006f\u006d\u0065\u0074\u0072\u0079");
};_bfe :=len (_bfca .UndilatedTemplates .Values );_dba =false ;_ggc :=_gfb (_bfca ,_dfg );for _cbdg =_ggc .Next ();_cbdg > -1;{if _egd ,_deg =_bfca .UndilatedTemplates .GetBitmap (_cbdg );_deg !=nil {return _cb .Wrap (_deg ,_ggaa ,"\u0070\u0069\u0078\u0061\u0074\u002e\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");
};if _dgaf ,_deg =_bfca .FgTemplates .GetInt (_cbdg );_deg !=nil {_c .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",_cbdg ,_deg );
};if _ada ,_deg =_bfca .DilatedTemplates .GetBitmap (_cbdg );_deg !=nil {return _cb .Wrap (_deg ,_ggaa ,"\u0070\u0069\u0078\u0061\u0074\u0064\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");};if _fga ,_dbc ,_deg =_bfca .CentroidPointsTemplates .GetGeometry (_cbdg );
_deg !=nil {return _cb .Wrap (_deg ,_ggaa ,"\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");};_eccg ,_deg =_d .RankHausTest (_dfg ,_abcb ,_egd ,_ada ,_fbc -_fga ,_ecc -_dbc ,MaxDiffWidth ,MaxDiffHeight ,_beda ,_dgaf ,float32 (_bfca .Settings .RankHaus ),_eac );
if _deg !=nil {return _cb .Wrap (_deg ,_ggaa ,"");};if _eccg {_dba =true ;if _deg =_bfca .ClassIDs .Add (_cbdg );_deg !=nil {return _cb .Wrap (_deg ,_ggaa ,"");};if _deg =_bfca .ComponentPageNumbers .Add (_dee );_deg !=nil {return _cb .Wrap (_deg ,_ggaa ,"");
};if _bfca .Settings .KeepClassInstances {_ffa ,_gbeb :=_bfca .ClassInstances .GetBitmaps (_cbdg );if _gbeb !=nil {return _cb .Wrap (_gbeb ,_ggaa ,"\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 _gfa ,_gbeb =_efe .GetBitmap (_caa );_gbeb !=nil {return _cb .Wrap (_gbeb ,_ggaa ,"\u0070i\u0078\u0061\u005b\u0069\u005d");};_ffa .Values =append (_ffa .Values ,_gfa );_bbg ,_gbeb :=_bec .Get (_caa );if _gbeb !=nil {return _cb .Wrap (_gbeb ,_ggaa ,"b\u006f\u0078\u0061\u002e\u0047\u0065\u0074\u0028\u0069\u0029");
};_ffa .Boxes =append (_ffa .Boxes ,_bbg );};break ;};};if !_dba {if _deg =_bfca .ClassIDs .Add (_bfe );_deg !=nil {return _cb .Wrap (_deg ,_ggaa ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _deg =_bfca .ComponentPageNumbers .Add (_dee );_deg !=nil {return _cb .Wrap (_deg ,_ggaa ,"\u0021\u0066\u006f\u0075\u006e\u0064");
};_eacf :=&_d .Bitmaps {};_gfa =_efe .Values [_caa ];_eacf .AddBitmap (_gfa );_fdg ,_cdce :=_gfa .Width ,_gfa .Height ;_bfca .TemplatesSize .Add (uint64 (_fdg )*uint64 (_cdce ),_bfe );_bcfd ,_edfe :=_bec .Get (_caa );if _edfe !=nil {return _cb .Wrap (_edfe ,_ggaa ,"\u0021\u0066\u006f\u0075\u006e\u0064");
};_eacf .AddBox (_bcfd );_bfca .ClassInstances .AddBitmaps (_eacf );_bfca .CentroidPointsTemplates .AddPoint (_fbc ,_ecc );_bfca .UndilatedTemplates .AddBitmap (_dfg );_bfca .DilatedTemplates .AddBitmap (_abcb );_bfca .FgTemplates .AddInt (_beda );};};
_bfca .NumberOfClasses =len (_bfca .UndilatedTemplates .Values );return nil ;};func (_ege *Classer )getULCorners (_gd *_d .Bitmap ,_gdb *_d .Boxes )error {const _ec ="\u0067\u0065\u0074U\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";if _gd ==nil {return _cb .Error (_ec ,"\u006e\u0069l\u0020\u0069\u006da\u0067\u0065\u0020\u0062\u0069\u0074\u006d\u0061\u0070");
};if _gdb ==nil {return _cb .Error (_ec ,"\u006e\u0069\u006c\u0020\u0062\u006f\u0075\u006e\u0064\u0073");};if _ege .PtaUL ==nil {_ege .PtaUL =&_d .Points {};};_da :=len (*_gdb );var (_fd ,_gc ,_cba ,_cbd int ;_cda ,_gcd ,_gga ,_cf float32 ;_ef error ;_ed *_b .Rectangle ;
_ad *_d .Bitmap ;_cgb _b .Point ;);for _efd :=0;_efd < _da ;_efd ++{_fd =_ege .BaseIndex +_efd ;if _cda ,_gcd ,_ef =_ege .CentroidPoints .GetGeometry (_fd );_ef !=nil {return _cb .Wrap (_ef ,_ec ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0050o\u0069\u006e\u0074\u0073");
};if _gc ,_ef =_ege .ClassIDs .Get (_fd );_ef !=nil {return _cb .Wrap (_ef ,_ec ,"\u0043\u006c\u0061s\u0073\u0049\u0044\u0073\u002e\u0047\u0065\u0074");};if _gga ,_cf ,_ef =_ege .CentroidPointsTemplates .GetGeometry (_gc );_ef !=nil {return _cb .Wrap (_ef ,_ec ,"\u0043\u0065\u006etr\u006f\u0069\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");
};_ac :=_gga -_cda ;_bf :=_cf -_gcd ;if _ac >=0{_cba =int (_ac +0.5);}else {_cba =int (_ac -0.5);};if _bf >=0{_cbd =int (_bf +0.5);}else {_cbd =int (_bf -0.5);};if _ed ,_ef =_gdb .Get (_efd );_ef !=nil {return _cb .Wrap (_ef ,_ec ,"");};_eca ,_bcd :=_ed .Min .X ,_ed .Min .Y ;
_ad ,_ef =_ege .UndilatedTemplates .GetBitmap (_gc );if _ef !=nil {return _cb .Wrap (_ef ,_ec ,"\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");
};_cgb ,_ef =_be (_gd ,_eca ,_bcd ,_cba ,_cbd ,_ad );if _ef !=nil {return _cb .Wrap (_ef ,_ec ,"");};_ege .PtaUL .AddPoint (float32 (_eca -_cba +_cgb .X ),float32 (_bcd -_cbd +_cgb .Y ));};return nil ;};const (MaxDiffWidth =2;MaxDiffHeight =2;);func (_acc *Classer )verifyMethod (_efb Method )error {if _efb !=RankHaus &&_efb !=Correlation {return _cb .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 (_ag *Classer )addPageComponents (_bc *_d .Bitmap ,_fe *_d .Boxes ,_baf *_d .Bitmaps ,_cd int ,_afa Method )error {const _bca ="\u0043l\u0061\u0073\u0073\u0065r\u002e\u0041\u0064\u0064\u0050a\u0067e\u0043o\u006d\u0070\u006f\u006e\u0065\u006e\u0074s";
if _bc ==nil {return _cb .Error (_bca ,"\u006e\u0069\u006c\u0020\u0069\u006e\u0070\u0075\u0074 \u0070\u0061\u0067\u0065");};if _fe ==nil ||_baf ==nil ||len (*_fe )==0{_c .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",_bc );
return nil ;};var _cg error ;switch _afa {case RankHaus :_cg =_ag .classifyRankHaus (_fe ,_baf ,_cd );case Correlation :_cg =_ag .classifyCorrelation (_fe ,_baf ,_cd );default:_c .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",_afa );
return _cb .Error (_bca ,"\u0075\u006e\u006bno\u0077\u006e\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0079\u0020\u006d\u0065\u0074\u0068\u006f\u0064");};if _cg !=nil {return _cb .Wrap (_cg ,_bca ,"");};if _cg =_ag .getULCorners (_bc ,_fe );_cg !=nil {return _cb .Wrap (_cg ,_bca ,"");
};_abb :=len (*_fe );_ag .BaseIndex +=_abb ;if _cg =_ag .ComponentsNumber .Add (_abb );_cg !=nil {return _cb .Wrap (_cg ,_bca ,"");};return nil ;};func (_eaa *Classer )classifyCorrelation (_dg *_d .Boxes ,_ecae *_d .Bitmaps ,_geb int )error {const _bcdb ="\u0063\u006c\u0061\u0073si\u0066\u0079\u0043\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e";
if _dg ==nil {return _cb .Error (_bcdb ,"\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 _ecae ==nil {return _cb .Error (_bcdb ,"\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");};_agg :=len (_ecae .Values );if _agg ==0{_c .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 (_dea ,_cff *_d .Bitmap ;_fca error ;);_ffd :=&_d .Bitmaps {Values :make ([]*_d .Bitmap ,_agg )};for _cac ,_afd :=range _ecae .Values {_cff ,_fca =_afd .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);
if _fca !=nil {return _cb .Wrap (_fca ,_bcdb ,"");};_ffd .Values [_cac ]=_cff ;};_bef :=_eaa .FgTemplates ;_bdd :=_d .MakePixelSumTab8 ();_cgbf :=_d .MakePixelCentroidTab8 ();_dfe :=make ([]int ,_agg );_bg :=make ([][]int ,_agg );_cbab :=_d .Points (make ([]_d .Point ,_agg ));
_cbg :=&_cbab ;var (_ged ,_fff int ;_bdf ,_cbe ,_cca int ;_fa ,_gce int ;_fab byte ;);for _cbc ,_cdg :=range _ffd .Values {_bg [_cbc ]=make ([]int ,_cdg .Height );_ged =0;_fff =0;_cbe =(_cdg .Height -1)*_cdg .RowStride ;_bdf =0;for _gce =_cdg .Height -1;
_gce >=0;_gce ,_cbe =_gce -1,_cbe -_cdg .RowStride {_bg [_cbc ][_gce ]=_bdf ;_cca =0;for _fa =0;_fa < _cdg .RowStride ;_fa ++{_fab =_cdg .Data [_cbe +_fa ];_cca +=_bdd [_fab ];_ged +=_cgbf [_fab ]+_fa *8*_bdd [_fab ];};_bdf +=_cca ;_fff +=_cca *_gce ;};
_dfe [_cbc ]=_bdf ;if _bdf > 0{(*_cbg )[_cbc ]=_d .Point {X :float32 (_ged )/float32 (_bdf ),Y :float32 (_fff )/float32 (_bdf )};}else {(*_cbg )[_cbc ]=_d .Point {X :float32 (_cdg .Width )/float32 (2),Y :float32 (_cdg .Height )/float32 (2)};};};if _fca =_eaa .CentroidPoints .Add (_cbg );
_fca !=nil {return _cb .Wrap (_fca ,_bcdb ,"\u0063\u0065\u006et\u0072\u006f\u0069\u0064\u0020\u0061\u0064\u0064");};var (_aa ,_gec ,_ae int ;_eae float64 ;_acg ,_aaf ,_bfd ,_gcf float32 ;_efab ,_fgg _d .Point ;_efac bool ;_bag *similarTemplatesFinder ;
_aae int ;_gbb *_d .Bitmap ;_cbca *_b .Rectangle ;_bea *_d .Bitmaps ;);for _aae ,_cff =range _ffd .Values {_gec =_dfe [_aae ];if _acg ,_aaf ,_fca =_cbg .GetGeometry (_aae );_fca !=nil {return _cb .Wrap (_fca ,_bcdb ,"\u0070t\u0061\u0020\u002d\u0020\u0069");
};_efac =false ;_ccf :=len (_eaa .UndilatedTemplates .Values );_bag =_gfb (_eaa ,_cff );for _ebf :=_bag .Next ();_ebf > -1;{if _gbb ,_fca =_eaa .UndilatedTemplates .GetBitmap (_ebf );_fca !=nil {return _cb .Wrap (_fca ,_bcdb ,"\u0075\u006e\u0069dl\u0061\u0074\u0065\u0064\u005b\u0069\u0063\u006c\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u0062\u006d\u0032");
};if _ae ,_fca =_bef .GetInt (_ebf );_fca !=nil {_c .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",_fca );};if _bfd ,_gcf ,_fca =_eaa .CentroidPointsTemplates .GetGeometry (_ebf );
_fca !=nil {return _cb .Wrap (_fca ,_bcdb ,"\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 _eaa .Settings .WeightFactor > 0.0{if _aa ,_fca =_eaa .TemplateAreas .Get (_ebf );_fca !=nil {_c .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",_fca );
};_eae =_eaa .Settings .Thresh +(1.0-_eaa .Settings .Thresh )*_eaa .Settings .WeightFactor *float64 (_ae )/float64 (_aa );}else {_eae =_eaa .Settings .Thresh ;};_fb ,_fbd :=_d .CorrelationScoreThresholded (_cff ,_gbb ,_gec ,_ae ,_efab .X -_fgg .X ,_efab .Y -_fgg .Y ,MaxDiffWidth ,MaxDiffHeight ,_bdd ,_bg [_aae ],float32 (_eae ));
if _fbd !=nil {return _cb .Wrap (_fbd ,_bcdb ,"");};if _ecd {var (_edf ,_abceg float64 ;_adg ,_fgf int ;);_edf ,_fbd =_d .CorrelationScore (_cff ,_gbb ,_gec ,_ae ,_acg -_bfd ,_aaf -_gcf ,MaxDiffWidth ,MaxDiffHeight ,_bdd );if _fbd !=nil {return _cb .Wrap (_fbd ,_bcdb ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");
};_abceg ,_fbd =_d .CorrelationScoreSimple (_cff ,_gbb ,_gec ,_ae ,_acg -_bfd ,_aaf -_gcf ,MaxDiffWidth ,MaxDiffHeight ,_bdd );if _fbd !=nil {return _cb .Wrap (_fbd ,_bcdb ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");
};_adg =int (_e .Sqrt (_edf *float64 (_gec )*float64 (_ae )));_fgf =int (_e .Sqrt (_abceg *float64 (_gec )*float64 (_ae )));if (_edf >=_eae )!=(_abceg >=_eae ){return _cb .Errorf (_bcdb ,"\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",_adg ,_edf ,_edf >=_eae ,_fgf ,_abceg ,_abceg >=_eae ,_edf -_abceg );
};if _edf >=_eae !=_fb {return _cb .Errorf (_bcdb ,"\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",_edf ,_edf *float64 (_gec )*float64 (_ae ),_adg ,_eae ,float32 (_eae )*float32 (_gec )*float32 (_ae ),_fb );
};};if _fb {_efac =true ;if _fbd =_eaa .ClassIDs .Add (_ebf );_fbd !=nil {return _cb .Wrap (_fbd ,_bcdb ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");};if _fbd =_eaa .ComponentPageNumbers .Add (_geb );_fbd !=nil {return _cb .Wrap (_fbd ,_bcdb ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");
};if _eaa .Settings .KeepClassInstances {if _dea ,_fbd =_ecae .GetBitmap (_aae );_fbd !=nil {return _cb .Wrap (_fbd ,_bcdb ,"\u004b\u0065\u0065\u0070Cl\u0061\u0073\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0073\u0020\u002d \u0069");};if _bea ,_fbd =_eaa .ClassInstances .GetBitmaps (_ebf );
_fbd !=nil {return _cb .Wrap (_fbd ,_bcdb ,"K\u0065\u0065\u0070\u0043\u006c\u0061s\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065s\u0020\u002d\u0020i\u0043l\u0061\u0073\u0073");};_bea .AddBitmap (_dea );if _cbca ,_fbd =_dg .Get (_aae );_fbd !=nil {return _cb .Wrap (_fbd ,_bcdb ,"\u004be\u0065p\u0043\u006c\u0061\u0073\u0073I\u006e\u0073t\u0061\u006e\u0063\u0065\u0073");
};_bea .AddBox (_cbca );};break ;};};if !_efac {if _fca =_eaa .ClassIDs .Add (_ccf );_fca !=nil {return _cb .Wrap (_fca ,_bcdb ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _fca =_eaa .ComponentPageNumbers .Add (_geb );_fca !=nil {return _cb .Wrap (_fca ,_bcdb ,"\u0021\u0066\u006f\u0075\u006e\u0064");
};_bea =&_d .Bitmaps {};if _dea ,_fca =_ecae .GetBitmap (_aae );_fca !=nil {return _cb .Wrap (_fca ,_bcdb ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_bea .AddBitmap (_dea );_bagf ,_fae :=_dea .Width ,_dea .Height ;_cae :=uint64 (_fae )*uint64 (_bagf );
_eaa .TemplatesSize .Add (_cae ,_ccf );if _cbca ,_fca =_dg .Get (_aae );_fca !=nil {return _cb .Wrap (_fca ,_bcdb ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_bea .AddBox (_cbca );_eaa .ClassInstances .AddBitmaps (_bea );_eaa .CentroidPointsTemplates .AddPoint (_acg ,_aaf );
_eaa .FgTemplates .AddInt (_gec );_eaa .UndilatedTemplates .AddBitmap (_dea );_aa =(_cff .Width -2*JbAddedPixels )*(_cff .Height -2*JbAddedPixels );if _fca =_eaa .TemplateAreas .Add (_aa );_fca !=nil {return _cb .Wrap (_fca ,_bcdb ,"\u0021\u0066\u006f\u0075\u006e\u0064");
};};};_eaa .NumberOfClasses =len (_eaa .UndilatedTemplates .Values );return nil ;};var _ecd bool ;const (RankHaus Method =iota ;Correlation ;);type Settings struct{MaxCompWidth int ;MaxCompHeight int ;SizeHaus int ;RankHaus float64 ;Thresh float64 ;WeightFactor float64 ;
KeepClassInstances bool ;Components _d .Component ;Method Method ;};func _gfb (_ggb *Classer ,_ecdb *_d .Bitmap )*similarTemplatesFinder {return &similarTemplatesFinder {Width :_ecdb .Width ,Height :_ecdb .Height ,Classer :_ggb };};func (_bfc *Classer )classifyRankHouseOne (_gedc *_d .Boxes ,_ga ,_bcf ,_db *_d .Bitmaps ,_cbed *_d .Points ,_ddb int )(_dcd error ){const _dfec ="\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 (_dgc ,_gag ,_ebe ,_ddbd float32 ;_gfc int ;_abcd ,_agf ,_bgd ,_dgcc ,_dad *_d .Bitmap ;_caea ,_afaa bool ;);for _dde :=0;_dde < len (_ga .Values );_dde ++{_agf =_bcf .Values [_dde ];_bgd =_db .Values [_dde ];_dgc ,_gag ,_dcd =_cbed .GetGeometry (_dde );
if _dcd !=nil {return _cb .Wrapf (_dcd ,_dfec ,"\u0066\u0069\u0072\u0073\u0074\u0020\u0067\u0065\u006fm\u0065\u0074\u0072\u0079");};_cdc :=len (_bfc .UndilatedTemplates .Values );_caea =false ;_bed :=_gfb (_bfc ,_agf );for _gfc =_bed .Next ();_gfc > -1;
{_dgcc ,_dcd =_bfc .UndilatedTemplates .GetBitmap (_gfc );if _dcd !=nil {return _cb .Wrap (_dcd ,_dfec ,"\u0062\u006d\u0033");};_dad ,_dcd =_bfc .DilatedTemplates .GetBitmap (_gfc );if _dcd !=nil {return _cb .Wrap (_dcd ,_dfec ,"\u0062\u006d\u0034");};
_ebe ,_ddbd ,_dcd =_bfc .CentroidPointsTemplates .GetGeometry (_gfc );if _dcd !=nil {return _cb .Wrap (_dcd ,_dfec ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0054\u0065\u006d\u0070l\u0061\u0074\u0065\u0073");};_afaa ,_dcd =_d .HausTest (_agf ,_bgd ,_dgcc ,_dad ,_dgc -_ebe ,_gag -_ddbd ,MaxDiffWidth ,MaxDiffHeight );
if _dcd !=nil {return _cb .Wrap (_dcd ,_dfec ,"");};if _afaa {_caea =true ;if _dcd =_bfc .ClassIDs .Add (_gfc );_dcd !=nil {return _cb .Wrap (_dcd ,_dfec ,"");};if _dcd =_bfc .ComponentPageNumbers .Add (_ddb );_dcd !=nil {return _cb .Wrap (_dcd ,_dfec ,"");
};if _bfc .Settings .KeepClassInstances {_afg ,_afae :=_bfc .ClassInstances .GetBitmaps (_gfc );if _afae !=nil {return _cb .Wrap (_afae ,_dfec ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_abcd ,_afae =_ga .GetBitmap (_dde );if _afae !=nil {return _cb .Wrap (_afae ,_dfec ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");
};_afg .AddBitmap (_abcd );_edb ,_afae :=_gedc .Get (_dde );if _afae !=nil {return _cb .Wrap (_afae ,_dfec ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_afg .AddBox (_edb );};break ;};};if !_caea {if _dcd =_bfc .ClassIDs .Add (_cdc );_dcd !=nil {return _cb .Wrap (_dcd ,_dfec ,"");
};if _dcd =_bfc .ComponentPageNumbers .Add (_ddb );_dcd !=nil {return _cb .Wrap (_dcd ,_dfec ,"");};_ccgf :=&_d .Bitmaps {};_abcd ,_dcd =_ga .GetBitmap (_dde );if _dcd !=nil {return _cb .Wrap (_dcd ,_dfec ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_ccgf .Values =append (_ccgf .Values ,_abcd );
_dcb ,_cbb :=_abcd .Width ,_abcd .Height ;_bfc .TemplatesSize .Add (uint64 (_cbb )*uint64 (_dcb ),_cdc );_ade ,_abbc :=_gedc .Get (_dde );if _abbc !=nil {return _cb .Wrap (_abbc ,_dfec ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_ccgf .AddBox (_ade );_bfc .ClassInstances .AddBitmaps (_ccgf );
_bfc .CentroidPointsTemplates .AddPoint (_dgc ,_gag );_bfc .UndilatedTemplates .AddBitmap (_agf );_bfc .DilatedTemplates .AddBitmap (_bgd );};};return nil ;};func (_fac Settings )Validate ()error {const _bcda ="\u0053\u0065\u0074\u0074\u0069\u006e\u0067\u0073\u002e\u0056\u0061\u006ci\u0064\u0061\u0074\u0065";
if _fac .Thresh < 0.4||_fac .Thresh > 0.98{return _cb .Error (_bcda ,"\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 _fac .WeightFactor < 0.0||_fac .WeightFactor > 1.0{return _cb .Error (_bcda ,"\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 _fac .RankHaus < 0.5||_fac .RankHaus > 1.0{return _cb .Error (_bcda ,"\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 _fac .SizeHaus < 1||_fac .SizeHaus > 10{return _cb .Error (_bcda ,"\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 _fac .Components {case _d .ComponentConn ,_d .ComponentCharacters ,_d .ComponentWords :default:return _cb .Error (_bcda ,"\u0069n\u0076\u0061\u006c\u0069d\u0020\u0063\u006c\u0061\u0073s\u0065r\u0020c\u006f\u006d\u0070\u006f\u006e\u0065\u006et");
};return nil ;};type Method int ;type Classer struct{BaseIndex int ;Settings Settings ;ComponentsNumber *_ca .IntSlice ;TemplateAreas *_ca .IntSlice ;Widths map[int ]int ;Heights map[int ]int ;NumberOfClasses int ;ClassInstances *_d .BitmapsArray ;UndilatedTemplates *_d .Bitmaps ;
DilatedTemplates *_d .Bitmaps ;TemplatesSize _ca .IntsMap ;FgTemplates *_ca .NumSlice ;CentroidPoints *_d .Points ;CentroidPointsTemplates *_d .Points ;ClassIDs *_ca .IntSlice ;ComponentPageNumbers *_ca .IntSlice ;PtaUL *_d .Points ;PtaLL *_d .Points ;
};func _be (_gb *_d .Bitmap ,_bd ,_dc ,_dab ,_df int ,_eaf *_d .Bitmap )(_ge _b .Point ,_abc error ){const _fg ="\u0066i\u006e\u0061\u006c\u0041l\u0069\u0067\u006e\u006d\u0065n\u0074P\u006fs\u0069\u0074\u0069\u006f\u006e\u0069\u006eg";if _gb ==nil {return _ge ,_cb .Error (_fg ,"\u0073\u006f\u0075\u0072ce\u0020\u006e\u006f\u0074\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
};if _eaf ==nil {return _ge ,_cb .Error (_fg ,"t\u0065\u006d\u0070\u006cat\u0065 \u006e\u006f\u0074\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064");};_feb ,_dae :=_eaf .Width ,_eaf .Height ;_daa ,_dd :=_bd -_dab -JbAddedPixels ,_dc -_df -JbAddedPixels ;
_c .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",_bd ,_dc ,_feb ,_dae ,_daa ,_dd );
_cge ,_abc :=_d .Rect (_daa ,_dd ,_feb ,_dae );if _abc !=nil {return _ge ,_cb .Wrap (_abc ,_fg ,"");};_aca ,_ ,_abc :=_gb .ClipRectangle (_cge );if _abc !=nil {_c .Log .Error ("\u0043a\u006e\u0027\u0074\u0020\u0063\u006c\u0069\u0070\u0020\u0072\u0065c\u0074\u0061\u006e\u0067\u006c\u0065\u003a\u0020\u0025\u0076",_cge );
return _ge ,_cb .Wrap (_abc ,_fg ,"");};_de :=_d .New (_aca .Width ,_aca .Height );_bdc :=_e .MaxInt32 ;var _cgf ,_abce ,_efa ,_abd ,_ebd int ;for _cgf =-1;_cgf <=1;_cgf ++{for _abce =-1;_abce <=1;_abce ++{if _ ,_abc =_d .Copy (_de ,_aca );_abc !=nil {return _ge ,_cb .Wrap (_abc ,_fg ,"");
};if _abc =_de .RasterOperation (_abce ,_cgf ,_feb ,_dae ,_d .PixSrcXorDst ,_eaf ,0,0);_abc !=nil {return _ge ,_cb .Wrap (_abc ,_fg ,"");};_efa =_de .CountPixels ();if _efa < _bdc {_abd =_abce ;_ebd =_cgf ;_bdc =_efa ;};};};_ge .X =_abd ;_ge .Y =_ebd ;
return _ge ,nil ;};const (MaxConnCompWidth =350;MaxCharCompWidth =350;MaxWordCompWidth =1000;MaxCompHeight =120;);func (_ea *Classer )ComputeLLCorners ()(_f error ){const _af ="\u0043l\u0061\u0073\u0073\u0065\u0072\u002e\u0043\u006f\u006d\u0070\u0075t\u0065\u004c\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";
if _ea .PtaUL ==nil {return _cb .Error (_af ,"\u0055\u004c\u0020\u0043or\u006e\u0065\u0072\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};_bb :=len (*_ea .PtaUL );_ea .PtaLL =&_d .Points {};var (_gg ,_ff float32 ;_fc ,_ee int ;
_fcb *_d .Bitmap ;);for _eg :=0;_eg < _bb ;_eg ++{_gg ,_ff ,_f =_ea .PtaUL .GetGeometry (_eg );if _f !=nil {_c .Log .Debug ("\u0047e\u0074\u0074\u0069\u006e\u0067\u0020\u0050\u0074\u0061\u0055\u004c \u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_f );
return _cb .Wrap (_f ,_af ,"\u0050\u0074\u0061\u0055\u004c\u0020\u0047\u0065\u006fm\u0065\u0074\u0072\u0079");};_fc ,_f =_ea .ClassIDs .Get (_eg );if _f !=nil {_c .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",_f );
return _cb .Wrap (_f ,_af ,"\u0043l\u0061\u0073\u0073\u0049\u0044");};_fcb ,_f =_ea .UndilatedTemplates .GetBitmap (_fc );if _f !=nil {_c .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",_f );
return _cb .Wrap (_f ,_af ,"\u0055\u006e\u0064\u0069la\u0074\u0065\u0064\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_ee =_fcb .Height ;_ea .PtaLL .AddPoint (_gg ,_ff +float32 (_ee ));};return nil ;};func (_a *Classer )AddPage (inputPage *_d .Bitmap ,pageNumber int ,method Method )(_ab error ){const _gf ="\u0043l\u0061s\u0073\u0065\u0072\u002e\u0041\u0064\u0064\u0050\u0061\u0067\u0065";
_a .Widths [pageNumber ]=inputPage .Width ;_a .Heights [pageNumber ]=inputPage .Height ;if _ab =_a .verifyMethod (method );_ab !=nil {return _cb .Wrap (_ab ,_gf ,"");};_abe ,_ccg ,_ab :=inputPage .GetComponents (_a .Settings .Components ,_a .Settings .MaxCompWidth ,_a .Settings .MaxCompHeight );
if _ab !=nil {return _cb .Wrap (_ab ,_gf ,"");};_c .Log .Debug ("\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074s\u003a\u0020\u0025\u0076",_abe );if _ab =_a .addPageComponents (inputPage ,_ccg ,_abe ,pageNumber ,method );_ab !=nil {return _cb .Wrap (_ab ,_gf ,"");
};return nil ;};func (_eaeg *Settings )SetDefault (){if _eaeg .MaxCompWidth ==0{switch _eaeg .Components {case _d .ComponentConn :_eaeg .MaxCompWidth =MaxConnCompWidth ;case _d .ComponentCharacters :_eaeg .MaxCompWidth =MaxCharCompWidth ;case _d .ComponentWords :_eaeg .MaxCompWidth =MaxWordCompWidth ;
};};if _eaeg .MaxCompHeight ==0{_eaeg .MaxCompHeight =MaxCompHeight ;};if _eaeg .Thresh ==0.0{_eaeg .Thresh =0.9;};if _eaeg .WeightFactor ==0.0{_eaeg .WeightFactor =0.75;};if _eaeg .RankHaus ==0.0{_eaeg .RankHaus =0.97;};if _eaeg .SizeHaus ==0{_eaeg .SizeHaus =2;
};};type similarTemplatesFinder struct{Classer *Classer ;Width int ;Height int ;Index int ;CurrentNumbers []int ;N int ;};func Init (settings Settings )(*Classer ,error ){const _ba ="\u0063\u006c\u0061s\u0073\u0065\u0072\u002e\u0049\u006e\u0069\u0074";
_cc :=&Classer {Settings :settings ,Widths :map[int ]int {},Heights :map[int ]int {},TemplatesSize :_ca .IntsMap {},TemplateAreas :&_ca .IntSlice {},ComponentPageNumbers :&_ca .IntSlice {},ClassIDs :&_ca .IntSlice {},ComponentsNumber :&_ca .IntSlice {},CentroidPoints :&_d .Points {},CentroidPointsTemplates :&_d .Points {},UndilatedTemplates :&_d .Bitmaps {},DilatedTemplates :&_d .Bitmaps {},ClassInstances :&_d .BitmapsArray {},FgTemplates :&_ca .NumSlice {}};
if _eb :=_cc .Settings .Validate ();_eb !=nil {return nil ,_cb .Wrap (_eb ,_ba ,"");};return _cc ,nil ;};func DefaultSettings ()Settings {_cgg :=&Settings {};_cgg .SetDefault ();return *_cgg };const JbAddedPixels =6;func (_bff *similarTemplatesFinder )Next ()int {var (_dce ,_bcg ,_dega ,_cgef int ;
_cad bool ;_gfe *_d .Bitmap ;_bbf error ;);for {if _bff .Index >=25{return -1;};_bcg =_bff .Width +TwoByTwoWalk [2*_bff .Index ];_dce =_bff .Height +TwoByTwoWalk [2*_bff .Index +1];if _dce < 1||_bcg < 1{_bff .Index ++;continue ;};if len (_bff .CurrentNumbers )==0{_bff .CurrentNumbers ,_cad =_bff .Classer .TemplatesSize .GetSlice (uint64 (_bcg )*uint64 (_dce ));
if !_cad {_bff .Index ++;continue ;};_bff .N =0;};_dega =len (_bff .CurrentNumbers );for ;_bff .N < _dega ;_bff .N ++{_cgef =_bff .CurrentNumbers [_bff .N ];_gfe ,_bbf =_bff .Classer .DilatedTemplates .GetBitmap (_cgef );if _bbf !=nil {_c .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 _gfe .Width -2*JbAddedPixels ==_bcg &&_gfe .Height -2*JbAddedPixels ==_dce {return _cgef ;};};_bff .Index ++;_bff .CurrentNumbers =nil ;};};