2021-06-21 14:01:56 +00:00

112 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 (_dd "github.com/unidoc/unipdf/v3/common";_b "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_ba "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_fe "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_f "image";_a "math";
);func Init (settings Settings )(*Classer ,error ){const _ff ="\u0063\u006c\u0061s\u0073\u0065\u0072\u002e\u0049\u006e\u0069\u0074";_bb :=&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 :&_ba .Points {},CentroidPointsTemplates :&_ba .Points {},UndilatedTemplates :&_ba .Bitmaps {},DilatedTemplates :&_ba .Bitmaps {},ClassInstances :&_ba .BitmapsArray {},FgTemplates :&_b .NumSlice {}};
if _ag :=_bb .Settings .Validate ();_ag !=nil {return nil ,_fe .Wrap (_ag ,_ff ,"");};return _bb ,nil ;};func (_aad *Classer )ComputeLLCorners ()(_bc error ){const _fb ="\u0043l\u0061\u0073\u0073\u0065\u0072\u002e\u0043\u006f\u006d\u0070\u0075t\u0065\u004c\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";
if _aad .PtaUL ==nil {return _fe .Error (_fb ,"\u0055\u004c\u0020\u0043or\u006e\u0065\u0072\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};_fbe :=len (*_aad .PtaUL );_aad .PtaLL =&_ba .Points {};var (_eg ,_ac float32 ;_df ,_ge int ;
_gg *_ba .Bitmap ;);for _bcg :=0;_bcg < _fbe ;_bcg ++{_eg ,_ac ,_bc =_aad .PtaUL .GetGeometry (_bcg );if _bc !=nil {_dd .Log .Debug ("\u0047e\u0074\u0074\u0069\u006e\u0067\u0020\u0050\u0074\u0061\u0055\u004c \u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_bc );
return _fe .Wrap (_bc ,_fb ,"\u0050\u0074\u0061\u0055\u004c\u0020\u0047\u0065\u006fm\u0065\u0074\u0072\u0079");};_df ,_bc =_aad .ClassIDs .Get (_bcg );if _bc !=nil {_dd .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",_bc );
return _fe .Wrap (_bc ,_fb ,"\u0043l\u0061\u0073\u0073\u0049\u0044");};_gg ,_bc =_aad .UndilatedTemplates .GetBitmap (_df );if _bc !=nil {_dd .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",_bc );
return _fe .Wrap (_bc ,_fb ,"\u0055\u006e\u0064\u0069la\u0074\u0065\u0064\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_ge =_gg .Height ;_aad .PtaLL .AddPoint (_eg ,_ac +float32 (_ge ));};return nil ;};func (_fdd *similarTemplatesFinder )Next ()int {var (_fdf ,_aee ,_ece ,_dec int ;
_gdg bool ;_bgag *_ba .Bitmap ;_dca error ;);for {if _fdd .Index >=25{return -1;};_aee =_fdd .Width +TwoByTwoWalk [2*_fdd .Index ];_fdf =_fdd .Height +TwoByTwoWalk [2*_fdd .Index +1];if _fdf < 1||_aee < 1{_fdd .Index ++;continue ;};if len (_fdd .CurrentNumbers )==0{_fdd .CurrentNumbers ,_gdg =_fdd .Classer .TemplatesSize .GetSlice (uint64 (_aee )*uint64 (_fdf ));
if !_gdg {_fdd .Index ++;continue ;};_fdd .N =0;};_ece =len (_fdd .CurrentNumbers );for ;_fdd .N < _ece ;_fdd .N ++{_dec =_fdd .CurrentNumbers [_fdd .N ];_bgag ,_dca =_fdd .Classer .DilatedTemplates .GetBitmap (_dec );if _dca !=nil {_dd .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 _bgag .Width -2*JbAddedPixels ==_aee &&_bgag .Height -2*JbAddedPixels ==_fdf {return _dec ;};};_fdd .Index ++;_fdd .CurrentNumbers =nil ;};};type similarTemplatesFinder struct{Classer *Classer ;Width int ;Height int ;Index int ;CurrentNumbers []int ;
N int ;};func _egc (_ea *_ba .Bitmap ,_gd ,_ec ,_cf ,_bbg int ,_fbb *_ba .Bitmap )(_agd _f .Point ,_gbg error ){const _ee ="\u0066i\u006e\u0061\u006c\u0041l\u0069\u0067\u006e\u006d\u0065n\u0074P\u006fs\u0069\u0074\u0069\u006f\u006e\u0069\u006eg";if _ea ==nil {return _agd ,_fe .Error (_ee ,"\u0073\u006f\u0075\u0072ce\u0020\u006e\u006f\u0074\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
};if _fbb ==nil {return _agd ,_fe .Error (_ee ,"t\u0065\u006d\u0070\u006cat\u0065 \u006e\u006f\u0074\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064");};_fece ,_fgg :=_fbb .Width ,_fbb .Height ;_cdf ,_eaa :=_gd -_cf -JbAddedPixels ,_ec -_bbg -JbAddedPixels ;
_dd .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",_gd ,_ec ,_fece ,_fgg ,_cdf ,_eaa );
_eb ,_gbg :=_ba .Rect (_cdf ,_eaa ,_fece ,_fgg );if _gbg !=nil {return _agd ,_fe .Wrap (_gbg ,_ee ,"");};_feg ,_ ,_gbg :=_ea .ClipRectangle (_eb );if _gbg !=nil {_dd .Log .Error ("\u0043a\u006e\u0027\u0074\u0020\u0063\u006c\u0069\u0070\u0020\u0072\u0065c\u0074\u0061\u006e\u0067\u006c\u0065\u003a\u0020\u0025\u0076",_eb );
return _agd ,_fe .Wrap (_gbg ,_ee ,"");};_ffb :=_ba .New (_feg .Width ,_feg .Height );_fab :=_a .MaxInt32 ;var _gbc ,_dbc ,_bf ,_ad ,_acd int ;for _gbc =-1;_gbc <=1;_gbc ++{for _dbc =-1;_dbc <=1;_dbc ++{if _ ,_gbg =_ba .Copy (_ffb ,_feg );_gbg !=nil {return _agd ,_fe .Wrap (_gbg ,_ee ,"");
};if _gbg =_ffb .RasterOperation (_dbc ,_gbc ,_fece ,_fgg ,_ba .PixSrcXorDst ,_fbb ,0,0);_gbg !=nil {return _agd ,_fe .Wrap (_gbg ,_ee ,"");};_bf =_ffb .CountPixels ();if _bf < _fab {_ad =_dbc ;_acd =_gbc ;_fab =_bf ;};};};_agd .X =_ad ;_agd .Y =_acd ;
return _agd ,nil ;};var _agb bool ;const (MaxDiffWidth =2;MaxDiffHeight =2;);func (_ggf Settings )Validate ()error {const _ccd ="\u0053\u0065\u0074\u0074\u0069\u006e\u0067\u0073\u002e\u0056\u0061\u006ci\u0064\u0061\u0074\u0065";if _ggf .Thresh < 0.4||_ggf .Thresh > 0.98{return _fe .Error (_ccd ,"\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 _ggf .WeightFactor < 0.0||_ggf .WeightFactor > 1.0{return _fe .Error (_ccd ,"\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 _ggf .RankHaus < 0.5||_ggf .RankHaus > 1.0{return _fe .Error (_ccd ,"\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 _ggf .SizeHaus < 1||_ggf .SizeHaus > 10{return _fe .Error (_ccd ,"\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 _ggf .Components {case _ba .ComponentConn ,_ba .ComponentCharacters ,_ba .ComponentWords :default:return _fe .Error (_ccd ,"\u0069n\u0076\u0061\u006c\u0069d\u0020\u0063\u006c\u0061\u0073s\u0065r\u0020c\u006f\u006d\u0070\u006f\u006e\u0065\u006et");
};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};func DefaultSettings ()Settings {_fcd :=&Settings {};_fcd .SetDefault ();return *_fcd };type Method int ;
func (_bdf *Classer )classifyRankHouseOne (_gef *_ba .Boxes ,_cad ,_cb ,_ddg *_ba .Bitmaps ,_cef *_ba .Points ,_adc int )(_egec error ){const _adb ="\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 (_edaf ,_de ,_ecf ,_bfd float32 ;_dbd int ;_gad ,_geff ,_bgf ,_gbe ,_dfe *_ba .Bitmap ;_ebc ,_caf bool ;);for _ffbb :=0;_ffbb < len (_cad .Values );_ffbb ++{_geff =_cb .Values [_ffbb ];_bgf =_ddg .Values [_ffbb ];_edaf ,_de ,_egec =_cef .GetGeometry (_ffbb );
if _egec !=nil {return _fe .Wrapf (_egec ,_adb ,"\u0066\u0069\u0072\u0073\u0074\u0020\u0067\u0065\u006fm\u0065\u0074\u0072\u0079");};_dfc :=len (_bdf .UndilatedTemplates .Values );_ebc =false ;_ggg :=_gcf (_bdf ,_geff );for _dbd =_ggg .Next ();_dbd > -1;
{_gbe ,_egec =_bdf .UndilatedTemplates .GetBitmap (_dbd );if _egec !=nil {return _fe .Wrap (_egec ,_adb ,"\u0062\u006d\u0033");};_dfe ,_egec =_bdf .DilatedTemplates .GetBitmap (_dbd );if _egec !=nil {return _fe .Wrap (_egec ,_adb ,"\u0062\u006d\u0034");
};_ecf ,_bfd ,_egec =_bdf .CentroidPointsTemplates .GetGeometry (_dbd );if _egec !=nil {return _fe .Wrap (_egec ,_adb ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0054\u0065\u006d\u0070l\u0061\u0074\u0065\u0073");};_caf ,_egec =_ba .HausTest (_geff ,_bgf ,_gbe ,_dfe ,_edaf -_ecf ,_de -_bfd ,MaxDiffWidth ,MaxDiffHeight );
if _egec !=nil {return _fe .Wrap (_egec ,_adb ,"");};if _caf {_ebc =true ;if _egec =_bdf .ClassIDs .Add (_dbd );_egec !=nil {return _fe .Wrap (_egec ,_adb ,"");};if _egec =_bdf .ComponentPageNumbers .Add (_adc );_egec !=nil {return _fe .Wrap (_egec ,_adb ,"");
};if _bdf .Settings .KeepClassInstances {_gbec ,_dfbc :=_bdf .ClassInstances .GetBitmaps (_dbd );if _dfbc !=nil {return _fe .Wrap (_dfbc ,_adb ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_gad ,_dfbc =_cad .GetBitmap (_ffbb );if _dfbc !=nil {return _fe .Wrap (_dfbc ,_adb ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");
};_gbec .AddBitmap (_gad );_fgc ,_dfbc :=_gef .Get (_ffbb );if _dfbc !=nil {return _fe .Wrap (_dfbc ,_adb ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_gbec .AddBox (_fgc );};break ;};};if !_ebc {if _egec =_bdf .ClassIDs .Add (_dfc );_egec !=nil {return _fe .Wrap (_egec ,_adb ,"");
};if _egec =_bdf .ComponentPageNumbers .Add (_adc );_egec !=nil {return _fe .Wrap (_egec ,_adb ,"");};_dgc :=&_ba .Bitmaps {};_gad ,_egec =_cad .GetBitmap (_ffbb );if _egec !=nil {return _fe .Wrap (_egec ,_adb ,"\u0021\u0066\u006f\u0075\u006e\u0064");};
_dgc .Values =append (_dgc .Values ,_gad );_dcc ,_afe :=_gad .Width ,_gad .Height ;_bdf .TemplatesSize .Add (uint64 (_afe )*uint64 (_dcc ),_dfc );_fgga ,_edf :=_gef .Get (_ffbb );if _edf !=nil {return _fe .Wrap (_edf ,_adb ,"\u0021\u0066\u006f\u0075\u006e\u0064");
};_dgc .AddBox (_fgga );_bdf .ClassInstances .AddBitmaps (_dgc );_bdf .CentroidPointsTemplates .AddPoint (_edaf ,_de );_bdf .UndilatedTemplates .AddBitmap (_geff );_bdf .DilatedTemplates .AddBitmap (_bgf );};};return nil ;};const (RankHaus Method =iota ;
Correlation ;);const (MaxConnCompWidth =350;MaxCharCompWidth =350;MaxWordCompWidth =1000;MaxCompHeight =120;);func (_aadg *Classer )getULCorners (_baf *_ba .Bitmap ,_af *_ba .Boxes )error {const _ca ="\u0067\u0065\u0074U\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";
if _baf ==nil {return _fe .Error (_ca ,"\u006e\u0069l\u0020\u0069\u006da\u0067\u0065\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _af ==nil {return _fe .Error (_ca ,"\u006e\u0069\u006c\u0020\u0062\u006f\u0075\u006e\u0064\u0073");};if _aadg .PtaUL ==nil {_aadg .PtaUL =&_ba .Points {};
};_ddb :=len (*_af );var (_cg ,_ddf ,_db ,_bcb int ;_dfg ,_ed ,_cd ,_egd float32 ;_fgd error ;_gbf *_f .Rectangle ;_gbb *_ba .Bitmap ;_bbc _f .Point ;);for _fec :=0;_fec < _ddb ;_fec ++{_cg =_aadg .BaseIndex +_fec ;if _dfg ,_ed ,_fgd =_aadg .CentroidPoints .GetGeometry (_cg );
_fgd !=nil {return _fe .Wrap (_fgd ,_ca ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0050o\u0069\u006e\u0074\u0073");};if _ddf ,_fgd =_aadg .ClassIDs .Get (_cg );_fgd !=nil {return _fe .Wrap (_fgd ,_ca ,"\u0043\u006c\u0061s\u0073\u0049\u0044\u0073\u002e\u0047\u0065\u0074");
};if _cd ,_egd ,_fgd =_aadg .CentroidPointsTemplates .GetGeometry (_ddf );_fgd !=nil {return _fe .Wrap (_fgd ,_ca ,"\u0043\u0065\u006etr\u006f\u0069\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_bbd :=_cd -_dfg ;
_be :=_egd -_ed ;if _bbd >=0{_db =int (_bbd +0.5);}else {_db =int (_bbd -0.5);};if _be >=0{_bcb =int (_be +0.5);}else {_bcb =int (_be -0.5);};if _gbf ,_fgd =_af .Get (_fec );_fgd !=nil {return _fe .Wrap (_fgd ,_ca ,"");};_gea ,_afb :=_gbf .Min .X ,_gbf .Min .Y ;
_gbb ,_fgd =_aadg .UndilatedTemplates .GetBitmap (_ddf );if _fgd !=nil {return _fe .Wrap (_fgd ,_ca ,"\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");
};_bbc ,_fgd =_egc (_baf ,_gea ,_afb ,_db ,_bcb ,_gbb );if _fgd !=nil {return _fe .Wrap (_fgd ,_ca ,"");};_aadg .PtaUL .AddPoint (float32 (_gea -_db +_bbc .X ),float32 (_afb -_bcb +_bbc .Y ));};return nil ;};func (_fc *Classer )addPageComponents (_ce *_ba .Bitmap ,_fg *_ba .Boxes ,_fcf *_ba .Bitmaps ,_geb int ,_dde Method )error {const _dc ="\u0043l\u0061\u0073\u0073\u0065r\u002e\u0041\u0064\u0064\u0050a\u0067e\u0043o\u006d\u0070\u006f\u006e\u0065\u006e\u0074s";
if _ce ==nil {return _fe .Error (_dc ,"\u006e\u0069\u006c\u0020\u0069\u006e\u0070\u0075\u0074 \u0070\u0061\u0067\u0065");};if _fg ==nil ||_fcf ==nil ||len (*_fg )==0{_dd .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",_ce );
return nil ;};var _gb error ;switch _dde {case RankHaus :_gb =_fc .classifyRankHaus (_fg ,_fcf ,_geb );case Correlation :_gb =_fc .classifyCorrelation (_fg ,_fcf ,_geb );default:_dd .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",_dde );
return _fe .Error (_dc ,"\u0075\u006e\u006bno\u0077\u006e\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0079\u0020\u006d\u0065\u0074\u0068\u006f\u0064");};if _gb !=nil {return _fe .Wrap (_gb ,_dc ,"");};if _gb =_fc .getULCorners (_ce ,_fg );_gb !=nil {return _fe .Wrap (_gb ,_dc ,"");
};_ab :=len (*_fg );_fc .BaseIndex +=_ab ;if _gb =_fc .ComponentsNumber .Add (_ab );_gb !=nil {return _fe .Wrap (_gb ,_dc ,"");};return nil ;};func (_gdf *Classer )classifyCorrelation (_dg *_ba .Boxes ,_agf *_ba .Bitmaps ,_bd int )error {const _da ="\u0063\u006c\u0061\u0073si\u0066\u0079\u0043\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e";
if _dg ==nil {return _fe .Error (_da ,"\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 _agf ==nil {return _fe .Error (_da ,"\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");};_afa :=len (_agf .Values );if _afa ==0{_dd .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 (_bdb ,_dgd *_ba .Bitmap ;_aaf error ;);_edb :=&_ba .Bitmaps {Values :make ([]*_ba .Bitmap ,_afa )};for _ade ,_gba :=range _agf .Values {_dgd ,_aaf =_gba .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);
if _aaf !=nil {return _fe .Wrap (_aaf ,_da ,"");};_edb .Values [_ade ]=_dgd ;};_cfg :=_gdf .FgTemplates ;_bg :=_ba .MakePixelSumTab8 ();_cc :=_ba .MakePixelCentroidTab8 ();_abb :=make ([]int ,_afa );_bfa :=make ([][]int ,_afa );_ega :=_ba .Points (make ([]_ba .Point ,_afa ));
_fd :=&_ega ;var (_ga ,_cag int ;_dfb ,_dga ,_bdd int ;_eda ,_add int ;_aac byte ;);for _bac ,_geg :=range _edb .Values {_bfa [_bac ]=make ([]int ,_geg .Height );_ga =0;_cag =0;_dga =(_geg .Height -1)*_geg .RowStride ;_dfb =0;for _add =_geg .Height -1;
_add >=0;_add ,_dga =_add -1,_dga -_geg .RowStride {_bfa [_bac ][_add ]=_dfb ;_bdd =0;for _eda =0;_eda < _geg .RowStride ;_eda ++{_aac =_geg .Data [_dga +_eda ];_bdd +=_bg [_aac ];_ga +=_cc [_aac ]+_eda *8*_bg [_aac ];};_dfb +=_bdd ;_cag +=_bdd *_add ;
};_abb [_bac ]=_dfb ;if _dfb > 0{(*_fd )[_bac ]=_ba .Point {X :float32 (_ga )/float32 (_dfb ),Y :float32 (_cag )/float32 (_dfb )};}else {(*_fd )[_bac ]=_ba .Point {X :float32 (_geg .Width )/float32 (2),Y :float32 (_geg .Height )/float32 (2)};};};if _aaf =_gdf .CentroidPoints .Add (_fd );
_aaf !=nil {return _fe .Wrap (_aaf ,_da ,"\u0063\u0065\u006et\u0072\u006f\u0069\u0064\u0020\u0061\u0064\u0064");};var (_edc ,_ccb ,_egcb int ;_egdf float64 ;_fee ,_dae ,_fad ,_fbee float32 ;_ffd ,_bcgb _ba .Point ;_dgb bool ;_cda *similarTemplatesFinder ;
_dgbb int ;_dfd *_ba .Bitmap ;_bdc *_f .Rectangle ;_fga *_ba .Bitmaps ;);for _dgbb ,_dgd =range _edb .Values {_ccb =_abb [_dgbb ];if _fee ,_dae ,_aaf =_fd .GetGeometry (_dgbb );_aaf !=nil {return _fe .Wrap (_aaf ,_da ,"\u0070t\u0061\u0020\u002d\u0020\u0069");
};_dgb =false ;_fed :=len (_gdf .UndilatedTemplates .Values );_cda =_gcf (_gdf ,_dgd );for _abc :=_cda .Next ();_abc > -1;{if _dfd ,_aaf =_gdf .UndilatedTemplates .GetBitmap (_abc );_aaf !=nil {return _fe .Wrap (_aaf ,_da ,"\u0075\u006e\u0069dl\u0061\u0074\u0065\u0064\u005b\u0069\u0063\u006c\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u0062\u006d\u0032");
};if _egcb ,_aaf =_cfg .GetInt (_abc );_aaf !=nil {_dd .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",_aaf );};if _fad ,_fbee ,_aaf =_gdf .CentroidPointsTemplates .GetGeometry (_abc );
_aaf !=nil {return _fe .Wrap (_aaf ,_da ,"\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 _gdf .Settings .WeightFactor > 0.0{if _edc ,_aaf =_gdf .TemplateAreas .Get (_abc );_aaf !=nil {_dd .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",_aaf );
};_egdf =_gdf .Settings .Thresh +(1.0-_gdf .Settings .Thresh )*_gdf .Settings .WeightFactor *float64 (_egcb )/float64 (_edc );}else {_egdf =_gdf .Settings .Thresh ;};_gf ,_bbb :=_ba .CorrelationScoreThresholded (_dgd ,_dfd ,_ccb ,_egcb ,_ffd .X -_bcgb .X ,_ffd .Y -_bcgb .Y ,MaxDiffWidth ,MaxDiffHeight ,_bg ,_bfa [_dgbb ],float32 (_egdf ));
if _bbb !=nil {return _fe .Wrap (_bbb ,_da ,"");};if _agb {var (_adef ,_bge float64 ;_egb ,_cdg int ;);_adef ,_bbb =_ba .CorrelationScore (_dgd ,_dfd ,_ccb ,_egcb ,_fee -_fad ,_dae -_fbee ,MaxDiffWidth ,MaxDiffHeight ,_bg );if _bbb !=nil {return _fe .Wrap (_bbb ,_da ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");
};_bge ,_bbb =_ba .CorrelationScoreSimple (_dgd ,_dfd ,_ccb ,_egcb ,_fee -_fad ,_dae -_fbee ,MaxDiffWidth ,MaxDiffHeight ,_bg );if _bbb !=nil {return _fe .Wrap (_bbb ,_da ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");
};_egb =int (_a .Sqrt (_adef *float64 (_ccb )*float64 (_egcb )));_cdg =int (_a .Sqrt (_bge *float64 (_ccb )*float64 (_egcb )));if (_adef >=_egdf )!=(_bge >=_egdf ){return _fe .Errorf (_da ,"\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",_egb ,_adef ,_adef >=_egdf ,_cdg ,_bge ,_bge >=_egdf ,_adef -_bge );
};if _adef >=_egdf !=_gf {return _fe .Errorf (_da ,"\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",_adef ,_adef *float64 (_ccb )*float64 (_egcb ),_egb ,_egdf ,float32 (_egdf )*float32 (_ccb )*float32 (_egcb ),_gf );
};};if _gf {_dgb =true ;if _bbb =_gdf .ClassIDs .Add (_abc );_bbb !=nil {return _fe .Wrap (_bbb ,_da ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");};if _bbb =_gdf .ComponentPageNumbers .Add (_bd );_bbb !=nil {return _fe .Wrap (_bbb ,_da ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");
};if _gdf .Settings .KeepClassInstances {if _bdb ,_bbb =_agf .GetBitmap (_dgbb );_bbb !=nil {return _fe .Wrap (_bbb ,_da ,"\u004b\u0065\u0065\u0070Cl\u0061\u0073\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0073\u0020\u002d \u0069");};if _fga ,_bbb =_gdf .ClassInstances .GetBitmaps (_abc );
_bbb !=nil {return _fe .Wrap (_bbb ,_da ,"K\u0065\u0065\u0070\u0043\u006c\u0061s\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065s\u0020\u002d\u0020i\u0043l\u0061\u0073\u0073");};_fga .AddBitmap (_bdb );if _bdc ,_bbb =_dg .Get (_dgbb );_bbb !=nil {return _fe .Wrap (_bbb ,_da ,"\u004be\u0065p\u0043\u006c\u0061\u0073\u0073I\u006e\u0073t\u0061\u006e\u0063\u0065\u0073");
};_fga .AddBox (_bdc );};break ;};};if !_dgb {if _aaf =_gdf .ClassIDs .Add (_fed );_aaf !=nil {return _fe .Wrap (_aaf ,_da ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _aaf =_gdf .ComponentPageNumbers .Add (_bd );_aaf !=nil {return _fe .Wrap (_aaf ,_da ,"\u0021\u0066\u006f\u0075\u006e\u0064");
};_fga =&_ba .Bitmaps {};if _bdb ,_aaf =_agf .GetBitmap (_dgbb );_aaf !=nil {return _fe .Wrap (_aaf ,_da ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_fga .AddBitmap (_bdb );_efc ,_cgd :=_bdb .Width ,_bdb .Height ;_efb :=uint64 (_cgd )*uint64 (_efc );_gdf .TemplatesSize .Add (_efb ,_fed );
if _bdc ,_aaf =_dg .Get (_dgbb );_aaf !=nil {return _fe .Wrap (_aaf ,_da ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_fga .AddBox (_bdc );_gdf .ClassInstances .AddBitmaps (_fga );_gdf .CentroidPointsTemplates .AddPoint (_fee ,_dae );_gdf .FgTemplates .AddInt (_ccb );
_gdf .UndilatedTemplates .AddBitmap (_bdb );_edc =(_dgd .Width -2*JbAddedPixels )*(_dgd .Height -2*JbAddedPixels );if _aaf =_gdf .TemplateAreas .Add (_edc );_aaf !=nil {return _fe .Wrap (_aaf ,_da ,"\u0021\u0066\u006f\u0075\u006e\u0064");};};};_gdf .NumberOfClasses =len (_gdf .UndilatedTemplates .Values );
return nil ;};func (_faf *Classer )classifyRankHouseNonOne (_fge *_ba .Boxes ,_gec ,_fdaf ,_eef *_ba .Bitmaps ,_fbbf *_ba .Points ,_dfca *_b .NumSlice ,_gagg int )(_abcc error ){const _egbb ="\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 (_dbe ,_ggdg ,_aaef ,_agg float32 ;_eae ,_fde ,_gdc int ;_dfcc ,_cfge ,_fgda ,_eefe ,_fbd *_ba .Bitmap ;_fabb ,_eac bool ;);_deg :=_ba .MakePixelSumTab8 ();for _fce :=0;_fce < len (_gec .Values );_fce ++{if _cfge ,_abcc =_fdaf .GetBitmap (_fce );_abcc !=nil {return _fe .Wrap (_abcc ,_egbb ,"b\u006d\u0073\u0031\u002e\u0047\u0065\u0074\u0028\u0069\u0029");
};if _eae ,_abcc =_dfca .GetInt (_fce );_abcc !=nil {_dd .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",_fce ,_abcc );
};if _fgda ,_abcc =_eef .GetBitmap (_fce );_abcc !=nil {return _fe .Wrap (_abcc ,_egbb ,"b\u006d\u0073\u0032\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};if _dbe ,_ggdg ,_abcc =_fbbf .GetGeometry (_fce );_abcc !=nil {return _fe .Wrapf (_abcc ,_egbb ,"\u0070t\u0061[\u0069\u005d\u002e\u0047\u0065\u006f\u006d\u0065\u0074\u0072\u0079");
};_abe :=len (_faf .UndilatedTemplates .Values );_fabb =false ;_gadb :=_gcf (_faf ,_cfge );for _gdc =_gadb .Next ();_gdc > -1;{if _eefe ,_abcc =_faf .UndilatedTemplates .GetBitmap (_gdc );_abcc !=nil {return _fe .Wrap (_abcc ,_egbb ,"\u0070\u0069\u0078\u0061\u0074\u002e\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");
};if _fde ,_abcc =_faf .FgTemplates .GetInt (_gdc );_abcc !=nil {_dd .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",_gdc ,_abcc );
};if _fbd ,_abcc =_faf .DilatedTemplates .GetBitmap (_gdc );_abcc !=nil {return _fe .Wrap (_abcc ,_egbb ,"\u0070\u0069\u0078\u0061\u0074\u0064\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");};if _aaef ,_agg ,_abcc =_faf .CentroidPointsTemplates .GetGeometry (_gdc );
_abcc !=nil {return _fe .Wrap (_abcc ,_egbb ,"\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");};_eac ,_abcc =_ba .RankHausTest (_cfge ,_fgda ,_eefe ,_fbd ,_dbe -_aaef ,_ggdg -_agg ,MaxDiffWidth ,MaxDiffHeight ,_eae ,_fde ,float32 (_faf .Settings .RankHaus ),_deg );
if _abcc !=nil {return _fe .Wrap (_abcc ,_egbb ,"");};if _eac {_fabb =true ;if _abcc =_faf .ClassIDs .Add (_gdc );_abcc !=nil {return _fe .Wrap (_abcc ,_egbb ,"");};if _abcc =_faf .ComponentPageNumbers .Add (_gagg );_abcc !=nil {return _fe .Wrap (_abcc ,_egbb ,"");
};if _faf .Settings .KeepClassInstances {_bbbg ,_ddgf :=_faf .ClassInstances .GetBitmaps (_gdc );if _ddgf !=nil {return _fe .Wrap (_ddgf ,_egbb ,"\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 _dfcc ,_ddgf =_gec .GetBitmap (_fce );_ddgf !=nil {return _fe .Wrap (_ddgf ,_egbb ,"\u0070i\u0078\u0061\u005b\u0069\u005d");};_bbbg .Values =append (_bbbg .Values ,_dfcc );_acc ,_ddgf :=_fge .Get (_fce );if _ddgf !=nil {return _fe .Wrap (_ddgf ,_egbb ,"b\u006f\u0078\u0061\u002e\u0047\u0065\u0074\u0028\u0069\u0029");
};_bbbg .Boxes =append (_bbbg .Boxes ,_acc );};break ;};};if !_fabb {if _abcc =_faf .ClassIDs .Add (_abe );_abcc !=nil {return _fe .Wrap (_abcc ,_egbb ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _abcc =_faf .ComponentPageNumbers .Add (_gagg );_abcc !=nil {return _fe .Wrap (_abcc ,_egbb ,"\u0021\u0066\u006f\u0075\u006e\u0064");
};_afef :=&_ba .Bitmaps {};_dfcc =_gec .Values [_fce ];_afef .AddBitmap (_dfcc );_bga ,_gc :=_dfcc .Width ,_dfcc .Height ;_faf .TemplatesSize .Add (uint64 (_bga )*uint64 (_gc ),_abe );_dce ,_dbea :=_fge .Get (_fce );if _dbea !=nil {return _fe .Wrap (_dbea ,_egbb ,"\u0021\u0066\u006f\u0075\u006e\u0064");
};_afef .AddBox (_dce );_faf .ClassInstances .AddBitmaps (_afef );_faf .CentroidPointsTemplates .AddPoint (_dbe ,_ggdg );_faf .UndilatedTemplates .AddBitmap (_cfge );_faf .DilatedTemplates .AddBitmap (_fgda );_faf .FgTemplates .AddInt (_eae );};};_faf .NumberOfClasses =len (_faf .UndilatedTemplates .Values );
return nil ;};func (_fa *Classer )verifyMethod (_ddc Method )error {if _ddc !=RankHaus &&_ddc !=Correlation {return _fe .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 ;};const JbAddedPixels =6;type Classer struct{BaseIndex int ;Settings Settings ;ComponentsNumber *_b .IntSlice ;TemplateAreas *_b .IntSlice ;Widths map[int ]int ;Heights map[int ]int ;NumberOfClasses int ;ClassInstances *_ba .BitmapsArray ;
UndilatedTemplates *_ba .Bitmaps ;DilatedTemplates *_ba .Bitmaps ;TemplatesSize _b .IntsMap ;FgTemplates *_b .NumSlice ;CentroidPoints *_ba .Points ;CentroidPointsTemplates *_ba .Points ;ClassIDs *_b .IntSlice ;ComponentPageNumbers *_b .IntSlice ;PtaUL *_ba .Points ;
PtaLL *_ba .Points ;};func (_ced *Settings )SetDefault (){if _ced .MaxCompWidth ==0{switch _ced .Components {case _ba .ComponentConn :_ced .MaxCompWidth =MaxConnCompWidth ;case _ba .ComponentCharacters :_ced .MaxCompWidth =MaxCharCompWidth ;case _ba .ComponentWords :_ced .MaxCompWidth =MaxWordCompWidth ;
};};if _ced .MaxCompHeight ==0{_ced .MaxCompHeight =MaxCompHeight ;};if _ced .Thresh ==0.0{_ced .Thresh =0.9;};if _ced .WeightFactor ==0.0{_ced .WeightFactor =0.75;};if _ced .RankHaus ==0.0{_ced .RankHaus =0.97;};if _ced .SizeHaus ==0{_ced .SizeHaus =2;
};};func _gcf (_gbed *Classer ,_aca *_ba .Bitmap )*similarTemplatesFinder {return &similarTemplatesFinder {Width :_aca .Width ,Height :_aca .Height ,Classer :_gbed };};type Settings struct{MaxCompWidth int ;MaxCompHeight int ;SizeHaus int ;RankHaus float64 ;
Thresh float64 ;WeightFactor float64 ;KeepClassInstances bool ;Components _ba .Component ;Method Method ;};func (_cgda *Classer )classifyRankHaus (_aba *_ba .Boxes ,_eed *_ba .Bitmaps ,_eea int )error {const _fda ="\u0063\u006ca\u0073\u0073\u0069f\u0079\u0052\u0061\u006e\u006b\u0048\u0061\u0075\u0073";
if _aba ==nil {return _fe .Error (_fda ,"\u0062\u006fx\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _eed ==nil {return _fe .Error (_fda ,"\u0070\u0069x\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};_ggd :=len (_eed .Values );if _ggd ==0{return _fe .Error (_fda ,"e\u006dp\u0074\u0079\u0020\u006e\u0065\u0077\u0020\u0063o\u006d\u0070\u006f\u006een\u0074\u0073");};_gbbd :=_eed .CountPixels ();_dag :=_cgda .Settings .SizeHaus ;_ae :=_ba .SelCreateBrick (_dag ,_dag ,_dag /2,_dag /2,_ba .SelHit );
_ege :=&_ba .Bitmaps {Values :make ([]*_ba .Bitmap ,_ggd )};_fea :=&_ba .Bitmaps {Values :make ([]*_ba .Bitmap ,_ggd )};var (_gag ,_eeb ,_fbc *_ba .Bitmap ;_aae error ;);for _adde :=0;_adde < _ggd ;_adde ++{_gag ,_aae =_eed .GetBitmap (_adde );if _aae !=nil {return _fe .Wrap (_aae ,_fda ,"");
};_eeb ,_aae =_gag .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);if _aae !=nil {return _fe .Wrap (_aae ,_fda ,"");};_fbc ,_aae =_ba .Dilate (nil ,_eeb ,_ae );if _aae !=nil {return _fe .Wrap (_aae ,_fda ,"");};_ege .Values [_ggd ]=_eeb ;
_fea .Values [_ggd ]=_fbc ;};_gde ,_aae :=_ba .Centroids (_ege .Values );if _aae !=nil {return _fe .Wrap (_aae ,_fda ,"");};if _aae =_gde .Add (_cgda .CentroidPoints );_aae !=nil {_dd .Log .Trace ("\u004e\u006f\u0020\u0063en\u0074\u0072\u006f\u0069\u0064\u0073\u0020\u0074\u006f\u0020\u0061\u0064\u0064");
};if _cgda .Settings .RankHaus ==1.0{_aae =_cgda .classifyRankHouseOne (_aba ,_eed ,_ege ,_fea ,_gde ,_eea );}else {_aae =_cgda .classifyRankHouseNonOne (_aba ,_eed ,_ege ,_fea ,_gde ,_gbbd ,_eea );};if _aae !=nil {return _fe .Wrap (_aae ,_fda ,"");};return nil ;
};func (_c *Classer )AddPage (inputPage *_ba .Bitmap ,pageNumber int ,method Method )(_g error ){const _e ="\u0043l\u0061s\u0073\u0065\u0072\u002e\u0041\u0064\u0064\u0050\u0061\u0067\u0065";_c .Widths [pageNumber ]=inputPage .Width ;_c .Heights [pageNumber ]=inputPage .Height ;
if _g =_c .verifyMethod (method );_g !=nil {return _fe .Wrap (_g ,_e ,"");};_fef ,_aa ,_g :=inputPage .GetComponents (_c .Settings .Components ,_c .Settings .MaxCompWidth ,_c .Settings .MaxCompHeight );if _g !=nil {return _fe .Wrap (_g ,_e ,"");};_dd .Log .Debug ("\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074s\u003a\u0020\u0025\u0076",_fef );
if _g =_c .addPageComponents (inputPage ,_aa ,_fef ,pageNumber ,method );_g !=nil {return _fe .Wrap (_g ,_e ,"");};return nil ;};