mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-04 22:17:22 +08:00
111 lines
32 KiB
Go
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 (_e "github.com/unidoc/unipdf/v3/common";_g "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_ee "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_gf "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_a "image";_d "math";
|
|
);var _agd bool ;const JbAddedPixels =6;const (RankHaus Method =iota ;Correlation ;);func (_ec *Classer )addPageComponents (_gd *_ee .Bitmap ,_dg *_ee .Boxes ,_be *_ee .Bitmaps ,_beg int ,_ca Method )error {const _fbb ="\u0043l\u0061\u0073\u0073\u0065r\u002e\u0041\u0064\u0064\u0050a\u0067e\u0043o\u006d\u0070\u006f\u006e\u0065\u006e\u0074s";
|
|
if _gd ==nil {return _gf .Error (_fbb ,"\u006e\u0069\u006c\u0020\u0069\u006e\u0070\u0075\u0074 \u0070\u0061\u0067\u0065");};if _dg ==nil ||_be ==nil ||len (*_dg )==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",_gd );
|
|
return nil ;};var _aec error ;switch _ca {case RankHaus :_aec =_ec .classifyRankHaus (_dg ,_be ,_beg );case Correlation :_aec =_ec .classifyCorrelation (_dg ,_be ,_beg );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",_ca );
|
|
return _gf .Error (_fbb ,"\u0075\u006e\u006bno\u0077\u006e\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0079\u0020\u006d\u0065\u0074\u0068\u006f\u0064");};if _aec !=nil {return _gf .Wrap (_aec ,_fbb ,"");};if _aec =_ec .getULCorners (_gd ,_dg );_aec !=nil {return _gf .Wrap (_aec ,_fbb ,"");
|
|
};_bee :=len (*_dg );_ec .BaseIndex +=_bee ;if _aec =_ec .ComponentsNumber .Add (_bee );_aec !=nil {return _gf .Wrap (_aec ,_fbb ,"");};return nil ;};const (MaxDiffWidth =2;MaxDiffHeight =2;);type Method int ;type Classer struct{BaseIndex int ;Settings Settings ;
|
|
ComponentsNumber *_g .IntSlice ;TemplateAreas *_g .IntSlice ;Widths map[int ]int ;Heights map[int ]int ;NumberOfClasses int ;ClassInstances *_ee .BitmapsArray ;UndilatedTemplates *_ee .Bitmaps ;DilatedTemplates *_ee .Bitmaps ;TemplatesSize _g .IntsMap ;
|
|
FgTemplates *_g .NumSlice ;CentroidPoints *_ee .Points ;CentroidPointsTemplates *_ee .Points ;ClassIDs *_g .IntSlice ;ComponentPageNumbers *_g .IntSlice ;PtaUL *_ee .Points ;PtaLL *_ee .Points ;};func (_dff *Classer )classifyRankHaus (_dfb *_ee .Boxes ,_dab *_ee .Bitmaps ,_afaa int )error {const _adb ="\u0063\u006ca\u0073\u0073\u0069f\u0079\u0052\u0061\u006e\u006b\u0048\u0061\u0075\u0073";
|
|
if _dfb ==nil {return _gf .Error (_adb ,"\u0062\u006fx\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _dab ==nil {return _gf .Error (_adb ,"\u0070\u0069x\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};_aab :=len (_dab .Values );if _aab ==0{return _gf .Error (_adb ,"e\u006dp\u0074\u0079\u0020\u006e\u0065\u0077\u0020\u0063o\u006d\u0070\u006f\u006een\u0074\u0073");};_dae :=_dab .CountPixels ();_ecc :=_dff .Settings .SizeHaus ;_bcf :=_ee .SelCreateBrick (_ecc ,_ecc ,_ecc /2,_ecc /2,_ee .SelHit );
|
|
_bcfe :=&_ee .Bitmaps {Values :make ([]*_ee .Bitmap ,_aab )};_fae :=&_ee .Bitmaps {Values :make ([]*_ee .Bitmap ,_aab )};var (_fbbb ,_fd ,_gea *_ee .Bitmap ;_feea error ;);for _bab :=0;_bab < _aab ;_bab ++{_fbbb ,_feea =_dab .GetBitmap (_bab );if _feea !=nil {return _gf .Wrap (_feea ,_adb ,"");
|
|
};_fd ,_feea =_fbbb .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);if _feea !=nil {return _gf .Wrap (_feea ,_adb ,"");};_gea ,_feea =_ee .Dilate (nil ,_fd ,_bcf );if _feea !=nil {return _gf .Wrap (_feea ,_adb ,"");};_bcfe .Values [_aab ]=_fd ;
|
|
_fae .Values [_aab ]=_gea ;};_gedc ,_feea :=_ee .Centroids (_bcfe .Values );if _feea !=nil {return _gf .Wrap (_feea ,_adb ,"");};if _feea =_gedc .Add (_dff .CentroidPoints );_feea !=nil {_e .Log .Trace ("\u004e\u006f\u0020\u0063en\u0074\u0072\u006f\u0069\u0064\u0073\u0020\u0074\u006f\u0020\u0061\u0064\u0064");
|
|
};if _dff .Settings .RankHaus ==1.0{_feea =_dff .classifyRankHouseOne (_dfb ,_dab ,_bcfe ,_fae ,_gedc ,_afaa );}else {_feea =_dff .classifyRankHouseNonOne (_dfb ,_dab ,_bcfe ,_fae ,_gedc ,_dae ,_afaa );};if _feea !=nil {return _gf .Wrap (_feea ,_adb ,"");
|
|
};return nil ;};func (_fffd *Settings )SetDefault (){if _fffd .MaxCompWidth ==0{switch _fffd .Components {case _ee .ComponentConn :_fffd .MaxCompWidth =MaxConnCompWidth ;case _ee .ComponentCharacters :_fffd .MaxCompWidth =MaxCharCompWidth ;case _ee .ComponentWords :_fffd .MaxCompWidth =MaxWordCompWidth ;
|
|
};};if _fffd .MaxCompHeight ==0{_fffd .MaxCompHeight =MaxCompHeight ;};if _fffd .Thresh ==0.0{_fffd .Thresh =0.9;};if _fffd .WeightFactor ==0.0{_fffd .WeightFactor =0.75;};if _fffd .RankHaus ==0.0{_fffd .RankHaus =0.97;};if _fffd .SizeHaus ==0{_fffd .SizeHaus =2;
|
|
};};func _ecd (_ged *_ee .Bitmap ,_cbd ,_bbf ,_cdag ,_aef int ,_cee *_ee .Bitmap )(_ff _a .Point ,_ef error ){const _aed ="\u0066i\u006e\u0061\u006c\u0041l\u0069\u0067\u006e\u006d\u0065n\u0074P\u006fs\u0069\u0074\u0069\u006f\u006e\u0069\u006eg";if _ged ==nil {return _ff ,_gf .Error (_aed ,"\u0073\u006f\u0075\u0072ce\u0020\u006e\u006f\u0074\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
|
|
};if _cee ==nil {return _ff ,_gf .Error (_aed ,"t\u0065\u006d\u0070\u006cat\u0065 \u006e\u006f\u0074\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064");};_bge ,_fef :=_cee .Width ,_cee .Height ;_ecf ,_cc :=_cbd -_cdag -JbAddedPixels ,_bbf -_aef -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",_cbd ,_bbf ,_bge ,_fef ,_ecf ,_cc );
|
|
_cdf ,_ef :=_ee .Rect (_ecf ,_cc ,_bge ,_fef );if _ef !=nil {return _ff ,_gf .Wrap (_ef ,_aed ,"");};_bgg ,_ ,_ef :=_ged .ClipRectangle (_cdf );if _ef !=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",_cdf );
|
|
return _ff ,_gf .Wrap (_ef ,_aed ,"");};_fac :=_ee .New (_bgg .Width ,_bgg .Height );_bef :=_d .MaxInt32 ;var _dade ,_ad ,_ag ,_bc ,_eb int ;for _dade =-1;_dade <=1;_dade ++{for _ad =-1;_ad <=1;_ad ++{if _ ,_ef =_ee .Copy (_fac ,_bgg );_ef !=nil {return _ff ,_gf .Wrap (_ef ,_aed ,"");
|
|
};if _ef =_fac .RasterOperation (_ad ,_dade ,_bge ,_fef ,_ee .PixSrcXorDst ,_cee ,0,0);_ef !=nil {return _ff ,_gf .Wrap (_ef ,_aed ,"");};_ag =_fac .CountPixels ();if _ag < _bef {_bc =_ad ;_eb =_dade ;_bef =_ag ;};};};_ff .X =_bc ;_ff .Y =_eb ;return _ff ,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 ;};func (_dfdd *similarTemplatesFinder )Next ()int {var (_fadd ,_abc ,_bffa ,_dcbe int ;_bde bool ;_fgf *_ee .Bitmap ;_agc error ;);for {if _dfdd .Index >=25{return -1;};_abc =_dfdd .Width +TwoByTwoWalk [2*_dfdd .Index ];_fadd =_dfdd .Height +TwoByTwoWalk [2*_dfdd .Index +1];
|
|
if _fadd < 1||_abc < 1{_dfdd .Index ++;continue ;};if len (_dfdd .CurrentNumbers )==0{_dfdd .CurrentNumbers ,_bde =_dfdd .Classer .TemplatesSize .GetSlice (uint64 (_abc )*uint64 (_fadd ));if !_bde {_dfdd .Index ++;continue ;};_dfdd .N =0;};_bffa =len (_dfdd .CurrentNumbers );
|
|
for ;_dfdd .N < _bffa ;_dfdd .N ++{_dcbe =_dfdd .CurrentNumbers [_dfdd .N ];_fgf ,_agc =_dfdd .Classer .DilatedTemplates .GetBitmap (_dcbe );if _agc !=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 _fgf .Width -2*JbAddedPixels ==_abc &&_fgf .Height -2*JbAddedPixels ==_fadd {return _dcbe ;};};_dfdd .Index ++;_dfdd .CurrentNumbers =nil ;};};func (_fe *Classer )getULCorners (_dc *_ee .Bitmap ,_cda *_ee .Boxes )error {const _ed ="\u0067\u0065\u0074U\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";
|
|
if _dc ==nil {return _gf .Error (_ed ,"\u006e\u0069l\u0020\u0069\u006da\u0067\u0065\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _cda ==nil {return _gf .Error (_ed ,"\u006e\u0069\u006c\u0020\u0062\u006f\u0075\u006e\u0064\u0073");};if _fe .PtaUL ==nil {_fe .PtaUL =&_ee .Points {};
|
|
};_gb :=len (*_cda );var (_bg ,_bed ,_gfde ,_gdc int ;_ab ,_geb ,_beb ,_ac float32 ;_bd error ;_aff *_a .Rectangle ;_acd *_ee .Bitmap ;_afa _a .Point ;);for _gba :=0;_gba < _gb ;_gba ++{_bg =_fe .BaseIndex +_gba ;if _ab ,_geb ,_bd =_fe .CentroidPoints .GetGeometry (_bg );
|
|
_bd !=nil {return _gf .Wrap (_bd ,_ed ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0050o\u0069\u006e\u0074\u0073");};if _bed ,_bd =_fe .ClassIDs .Get (_bg );_bd !=nil {return _gf .Wrap (_bd ,_ed ,"\u0043\u006c\u0061s\u0073\u0049\u0044\u0073\u002e\u0047\u0065\u0074");
|
|
};if _beb ,_ac ,_bd =_fe .CentroidPointsTemplates .GetGeometry (_bed );_bd !=nil {return _gf .Wrap (_bd ,_ed ,"\u0043\u0065\u006etr\u006f\u0069\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_ced :=_beb -_ab ;
|
|
_da :=_ac -_geb ;if _ced >=0{_gfde =int (_ced +0.5);}else {_gfde =int (_ced -0.5);};if _da >=0{_gdc =int (_da +0.5);}else {_gdc =int (_da -0.5);};if _aff ,_bd =_cda .Get (_gba );_bd !=nil {return _gf .Wrap (_bd ,_ed ,"");};_aag ,_bf :=_aff .Min .X ,_aff .Min .Y ;
|
|
_acd ,_bd =_fe .UndilatedTemplates .GetBitmap (_bed );if _bd !=nil {return _gf .Wrap (_bd ,_ed ,"\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");
|
|
};_afa ,_bd =_ecd (_dc ,_aag ,_bf ,_gfde ,_gdc ,_acd );if _bd !=nil {return _gf .Wrap (_bd ,_ed ,"");};_fe .PtaUL .AddPoint (float32 (_aag -_gfde +_afa .X ),float32 (_bf -_gdc +_afa .Y ));};return nil ;};func DefaultSettings ()Settings {_bdbd :=&Settings {};
|
|
_bdbd .SetDefault ();return *_bdbd };func (_egd *Classer )classifyCorrelation (_gc *_ee .Boxes ,_ba *_ee .Bitmaps ,_eeb int )error {const _cca ="\u0063\u006c\u0061\u0073si\u0066\u0079\u0043\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e";if _gc ==nil {return _gf .Error (_cca ,"\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 _ba ==nil {return _gf .Error (_cca ,"\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");};_dd :=len (_ba .Values );if _dd ==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 (_cf ,_beef *_ee .Bitmap ;_fab error ;);_bdb :=&_ee .Bitmaps {Values :make ([]*_ee .Bitmap ,_dd )};for _fc ,_ga :=range _ba .Values {_beef ,_fab =_ga .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);if _fab !=nil {return _gf .Wrap (_fab ,_cca ,"");
|
|
};_bdb .Values [_fc ]=_beef ;};_dcc :=_egd .FgTemplates ;_ffb :=_ee .MakePixelSumTab8 ();_dce :=_ee .MakePixelCentroidTab8 ();_bfa :=make ([]int ,_dd );_cdd :=make ([][]int ,_dd );_acb :=_ee .Points (make ([]_ee .Point ,_dd ));_aeg :=&_acb ;var (_ede ,_aea int ;
|
|
_bgf ,_dea ,_ega int ;_dgf ,_caf int ;_baa byte ;);for _bec ,_cbg :=range _bdb .Values {_cdd [_bec ]=make ([]int ,_cbg .Height );_ede =0;_aea =0;_dea =(_cbg .Height -1)*_cbg .RowStride ;_bgf =0;for _caf =_cbg .Height -1;_caf >=0;_caf ,_dea =_caf -1,_dea -_cbg .RowStride {_cdd [_bec ][_caf ]=_bgf ;
|
|
_ega =0;for _dgf =0;_dgf < _cbg .RowStride ;_dgf ++{_baa =_cbg .Data [_dea +_dgf ];_ega +=_ffb [_baa ];_ede +=_dce [_baa ]+_dgf *8*_ffb [_baa ];};_bgf +=_ega ;_aea +=_ega *_caf ;};_bfa [_bec ]=_bgf ;if _bgf > 0{(*_aeg )[_bec ]=_ee .Point {X :float32 (_ede )/float32 (_bgf ),Y :float32 (_aea )/float32 (_bgf )};
|
|
}else {(*_aeg )[_bec ]=_ee .Point {X :float32 (_cbg .Width )/float32 (2),Y :float32 (_cbg .Height )/float32 (2)};};};if _fab =_egd .CentroidPoints .Add (_aeg );_fab !=nil {return _gf .Wrap (_fab ,_cca ,"\u0063\u0065\u006et\u0072\u006f\u0069\u0064\u0020\u0061\u0064\u0064");
|
|
};var (_cg ,_aaga ,_cgd int ;_gaf float64 ;_bdf ,_db ,_baaf ,_cgdc float32 ;_ffbf ,_ddb _ee .Point ;_fg bool ;_bebd *similarTemplatesFinder ;_bea int ;_fed *_ee .Bitmap ;_aac *_a .Rectangle ;_ddf *_ee .Bitmaps ;);for _bea ,_beef =range _bdb .Values {_aaga =_bfa [_bea ];
|
|
if _bdf ,_db ,_fab =_aeg .GetGeometry (_bea );_fab !=nil {return _gf .Wrap (_fab ,_cca ,"\u0070t\u0061\u0020\u002d\u0020\u0069");};_fg =false ;_ceg :=len (_egd .UndilatedTemplates .Values );_bebd =_bgc (_egd ,_beef );for _cfa :=_bebd .Next ();_cfa > -1;
|
|
{if _fed ,_fab =_egd .UndilatedTemplates .GetBitmap (_cfa );_fab !=nil {return _gf .Wrap (_fab ,_cca ,"\u0075\u006e\u0069dl\u0061\u0074\u0065\u0064\u005b\u0069\u0063\u006c\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u0062\u006d\u0032");};if _cgd ,_fab =_dcc .GetInt (_cfa );
|
|
_fab !=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",_fab );};if _baaf ,_cgdc ,_fab =_egd .CentroidPointsTemplates .GetGeometry (_cfa );
|
|
_fab !=nil {return _gf .Wrap (_fab ,_cca ,"\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 _egd .Settings .WeightFactor > 0.0{if _cg ,_fab =_egd .TemplateAreas .Get (_cfa );_fab !=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",_fab );
|
|
};_gaf =_egd .Settings .Thresh +(1.0-_egd .Settings .Thresh )*_egd .Settings .WeightFactor *float64 (_cgd )/float64 (_cg );}else {_gaf =_egd .Settings .Thresh ;};_ddc ,_gad :=_ee .CorrelationScoreThresholded (_beef ,_fed ,_aaga ,_cgd ,_ffbf .X -_ddb .X ,_ffbf .Y -_ddb .Y ,MaxDiffWidth ,MaxDiffHeight ,_ffb ,_cdd [_bea ],float32 (_gaf ));
|
|
if _gad !=nil {return _gf .Wrap (_gad ,_cca ,"");};if _agd {var (_ea ,_cddb float64 ;_gdd ,_dcf int ;);_ea ,_gad =_ee .CorrelationScore (_beef ,_fed ,_aaga ,_cgd ,_bdf -_baaf ,_db -_cgdc ,MaxDiffWidth ,MaxDiffHeight ,_ffb );if _gad !=nil {return _gf .Wrap (_gad ,_cca ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");
|
|
};_cddb ,_gad =_ee .CorrelationScoreSimple (_beef ,_fed ,_aaga ,_cgd ,_bdf -_baaf ,_db -_cgdc ,MaxDiffWidth ,MaxDiffHeight ,_ffb );if _gad !=nil {return _gf .Wrap (_gad ,_cca ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");
|
|
};_gdd =int (_d .Sqrt (_ea *float64 (_aaga )*float64 (_cgd )));_dcf =int (_d .Sqrt (_cddb *float64 (_aaga )*float64 (_cgd )));if (_ea >=_gaf )!=(_cddb >=_gaf ){return _gf .Errorf (_cca ,"\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",_gdd ,_ea ,_ea >=_gaf ,_dcf ,_cddb ,_cddb >=_gaf ,_ea -_cddb );
|
|
};if _ea >=_gaf !=_ddc {return _gf .Errorf (_cca ,"\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",_ea ,_ea *float64 (_aaga )*float64 (_cgd ),_gdd ,_gaf ,float32 (_gaf )*float32 (_aaga )*float32 (_cgd ),_ddc );
|
|
};};if _ddc {_fg =true ;if _gad =_egd .ClassIDs .Add (_cfa );_gad !=nil {return _gf .Wrap (_gad ,_cca ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");};if _gad =_egd .ComponentPageNumbers .Add (_eeb );_gad !=nil {return _gf .Wrap (_gad ,_cca ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");
|
|
};if _egd .Settings .KeepClassInstances {if _cf ,_gad =_ba .GetBitmap (_bea );_gad !=nil {return _gf .Wrap (_gad ,_cca ,"\u004b\u0065\u0065\u0070Cl\u0061\u0073\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0073\u0020\u002d \u0069");};if _ddf ,_gad =_egd .ClassInstances .GetBitmaps (_cfa );
|
|
_gad !=nil {return _gf .Wrap (_gad ,_cca ,"K\u0065\u0065\u0070\u0043\u006c\u0061s\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065s\u0020\u002d\u0020i\u0043l\u0061\u0073\u0073");};_ddf .AddBitmap (_cf );if _aac ,_gad =_gc .Get (_bea );_gad !=nil {return _gf .Wrap (_gad ,_cca ,"\u004be\u0065p\u0043\u006c\u0061\u0073\u0073I\u006e\u0073t\u0061\u006e\u0063\u0065\u0073");
|
|
};_ddf .AddBox (_aac );};break ;};};if !_fg {if _fab =_egd .ClassIDs .Add (_ceg );_fab !=nil {return _gf .Wrap (_fab ,_cca ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _fab =_egd .ComponentPageNumbers .Add (_eeb );_fab !=nil {return _gf .Wrap (_fab ,_cca ,"\u0021\u0066\u006f\u0075\u006e\u0064");
|
|
};_ddf =&_ee .Bitmaps {};if _cf ,_fab =_ba .GetBitmap (_bea );_fab !=nil {return _gf .Wrap (_fab ,_cca ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_ddf .AddBitmap (_cf );_fcg ,_fee :=_cf .Width ,_cf .Height ;_agg :=uint64 (_fee )*uint64 (_fcg );_egd .TemplatesSize .Add (_agg ,_ceg );
|
|
if _aac ,_fab =_gc .Get (_bea );_fab !=nil {return _gf .Wrap (_fab ,_cca ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_ddf .AddBox (_aac );_egd .ClassInstances .AddBitmaps (_ddf );_egd .CentroidPointsTemplates .AddPoint (_bdf ,_db );_egd .FgTemplates .AddInt (_aaga );
|
|
_egd .UndilatedTemplates .AddBitmap (_cf );_cg =(_beef .Width -2*JbAddedPixels )*(_beef .Height -2*JbAddedPixels );if _fab =_egd .TemplateAreas .Add (_cg );_fab !=nil {return _gf .Wrap (_fab ,_cca ,"\u0021\u0066\u006f\u0075\u006e\u0064");};};};_egd .NumberOfClasses =len (_egd .UndilatedTemplates .Values );
|
|
return nil ;};const (MaxConnCompWidth =350;MaxCharCompWidth =350;MaxWordCompWidth =1000;MaxCompHeight =120;);func (_ge *Classer )AddPage (inputPage *_ee .Bitmap ,pageNumber int ,method Method )(_gfd error ){const _af ="\u0043l\u0061s\u0073\u0065\u0072\u002e\u0041\u0064\u0064\u0050\u0061\u0067\u0065";
|
|
_ge .Widths [pageNumber ]=inputPage .Width ;_ge .Heights [pageNumber ]=inputPage .Height ;if _gfd =_ge .verifyMethod (method );_gfd !=nil {return _gf .Wrap (_gfd ,_af ,"");};_fa ,_bb ,_gfd :=inputPage .GetComponents (_ge .Settings .Components ,_ge .Settings .MaxCompWidth ,_ge .Settings .MaxCompHeight );
|
|
if _gfd !=nil {return _gf .Wrap (_gfd ,_af ,"");};_e .Log .Debug ("\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074s\u003a\u0020\u0025\u0076",_fa );if _gfd =_ge .addPageComponents (inputPage ,_bb ,_fa ,pageNumber ,method );_gfd !=nil {return _gf .Wrap (_gfd ,_af ,"");
|
|
};return nil ;};func (_df *Classer )ComputeLLCorners ()(_ce error ){const _cd ="\u0043l\u0061\u0073\u0073\u0065\u0072\u002e\u0043\u006f\u006d\u0070\u0075t\u0065\u004c\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";if _df .PtaUL ==nil {return _gf .Error (_cd ,"\u0055\u004c\u0020\u0043or\u006e\u0065\u0072\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");
|
|
};_de :=len (*_df .PtaUL );_df .PtaLL =&_ee .Points {};var (_eg ,_aa float32 ;_fb ,_ceb int ;_ae *_ee .Bitmap ;);for _cb :=0;_cb < _de ;_cb ++{_eg ,_aa ,_ce =_df .PtaUL .GetGeometry (_cb );if _ce !=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",_ce );
|
|
return _gf .Wrap (_ce ,_cd ,"\u0050\u0074\u0061\u0055\u004c\u0020\u0047\u0065\u006fm\u0065\u0074\u0072\u0079");};_fb ,_ce =_df .ClassIDs .Get (_cb );if _ce !=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",_ce );
|
|
return _gf .Wrap (_ce ,_cd ,"\u0043l\u0061\u0073\u0073\u0049\u0044");};_ae ,_ce =_df .UndilatedTemplates .GetBitmap (_fb );if _ce !=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",_ce );
|
|
return _gf .Wrap (_ce ,_cd ,"\u0055\u006e\u0064\u0069la\u0074\u0065\u0064\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_ceb =_ae .Height ;_df .PtaLL .AddPoint (_eg ,_aa +float32 (_ceb ));};return nil ;};type Settings struct{MaxCompWidth int ;
|
|
MaxCompHeight int ;SizeHaus int ;RankHaus float64 ;Thresh float64 ;WeightFactor float64 ;KeepClassInstances bool ;Components _ee .Component ;Method Method ;};func (_edf *Classer )verifyMethod (_dad Method )error {if _dad !=RankHaus &&_dad !=Correlation {return _gf .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 (_gede Settings )Validate ()error {const _eee ="\u0053\u0065\u0074\u0074\u0069\u006e\u0067\u0073\u002e\u0056\u0061\u006ci\u0064\u0061\u0074\u0065";if _gede .Thresh < 0.4||_gede .Thresh > 0.98{return _gf .Error (_eee ,"\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 _gede .WeightFactor < 0.0||_gede .WeightFactor > 1.0{return _gf .Error (_eee ,"\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 _gede .RankHaus < 0.5||_gede .RankHaus > 1.0{return _gf .Error (_eee ,"\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 _gede .SizeHaus < 1||_gede .SizeHaus > 10{return _gf .Error (_eee ,"\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 _gede .Components {case _ee .ComponentConn ,_ee .ComponentCharacters ,_ee .ComponentWords :default:return _gf .Error (_eee ,"\u0069n\u0076\u0061\u006c\u0069d\u0020\u0063\u006c\u0061\u0073s\u0065r\u0020c\u006f\u006d\u0070\u006f\u006e\u0065\u006et");
|
|
};return nil ;};func Init (settings Settings )(*Classer ,error ){const _b ="\u0063\u006c\u0061s\u0073\u0065\u0072\u002e\u0049\u006e\u0069\u0074";_gfe :=&Classer {Settings :settings ,Widths :map[int ]int {},Heights :map[int ]int {},TemplatesSize :_g .IntsMap {},TemplateAreas :&_g .IntSlice {},ComponentPageNumbers :&_g .IntSlice {},ClassIDs :&_g .IntSlice {},ComponentsNumber :&_g .IntSlice {},CentroidPoints :&_ee .Points {},CentroidPointsTemplates :&_ee .Points {},UndilatedTemplates :&_ee .Bitmaps {},DilatedTemplates :&_ee .Bitmaps {},ClassInstances :&_ee .BitmapsArray {},FgTemplates :&_g .NumSlice {}};
|
|
if _f :=_gfe .Settings .Validate ();_f !=nil {return nil ,_gf .Wrap (_f ,_b ,"");};return _gfe ,nil ;};func _bgc (_ebg *Classer ,_cfd *_ee .Bitmap )*similarTemplatesFinder {return &similarTemplatesFinder {Width :_cfd .Width ,Height :_cfd .Height ,Classer :_ebg };
|
|
};func (_cgf *Classer )classifyRankHouseOne (_fcge *_ee .Boxes ,_cbf ,_cdc ,_ffe *_ee .Bitmaps ,_abb *_ee .Points ,_bae int )(_dbe error ){const _cba ="\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 (_dfbf ,_gag ,_adf ,_gcd float32 ;_feg int ;_gddf ,_affg ,_bfd ,_cegd ,_bbb *_ee .Bitmap ;_cde ,_age bool ;);for _dee :=0;_dee < len (_cbf .Values );_dee ++{_affg =_cdc .Values [_dee ];_bfd =_ffe .Values [_dee ];_dfbf ,_gag ,_dbe =_abb .GetGeometry (_dee );
|
|
if _dbe !=nil {return _gf .Wrapf (_dbe ,_cba ,"\u0066\u0069\u0072\u0073\u0074\u0020\u0067\u0065\u006fm\u0065\u0074\u0072\u0079");};_gcf :=len (_cgf .UndilatedTemplates .Values );_cde =false ;_gadg :=_bgc (_cgf ,_affg );for _feg =_gadg .Next ();_feg > -1;
|
|
{_cegd ,_dbe =_cgf .UndilatedTemplates .GetBitmap (_feg );if _dbe !=nil {return _gf .Wrap (_dbe ,_cba ,"\u0062\u006d\u0033");};_bbb ,_dbe =_cgf .DilatedTemplates .GetBitmap (_feg );if _dbe !=nil {return _gf .Wrap (_dbe ,_cba ,"\u0062\u006d\u0034");};_adf ,_gcd ,_dbe =_cgf .CentroidPointsTemplates .GetGeometry (_feg );
|
|
if _dbe !=nil {return _gf .Wrap (_dbe ,_cba ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0054\u0065\u006d\u0070l\u0061\u0074\u0065\u0073");};_age ,_dbe =_ee .HausTest (_affg ,_bfd ,_cegd ,_bbb ,_dfbf -_adf ,_gag -_gcd ,MaxDiffWidth ,MaxDiffHeight );
|
|
if _dbe !=nil {return _gf .Wrap (_dbe ,_cba ,"");};if _age {_cde =true ;if _dbe =_cgf .ClassIDs .Add (_feg );_dbe !=nil {return _gf .Wrap (_dbe ,_cba ,"");};if _dbe =_cgf .ComponentPageNumbers .Add (_bae );_dbe !=nil {return _gf .Wrap (_dbe ,_cba ,"");
|
|
};if _cgf .Settings .KeepClassInstances {_dfd ,_gde :=_cgf .ClassInstances .GetBitmaps (_feg );if _gde !=nil {return _gf .Wrap (_gde ,_cba ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_gddf ,_gde =_cbf .GetBitmap (_dee );if _gde !=nil {return _gf .Wrap (_gde ,_cba ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");
|
|
};_dfd .AddBitmap (_gddf );_gbf ,_gde :=_fcge .Get (_dee );if _gde !=nil {return _gf .Wrap (_gde ,_cba ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_dfd .AddBox (_gbf );};break ;};};if !_cde {if _dbe =_cgf .ClassIDs .Add (_gcf );_dbe !=nil {return _gf .Wrap (_dbe ,_cba ,"");
|
|
};if _dbe =_cgf .ComponentPageNumbers .Add (_bae );_dbe !=nil {return _gf .Wrap (_dbe ,_cba ,"");};_bcg :=&_ee .Bitmaps {};_gddf ,_dbe =_cbf .GetBitmap (_dee );if _dbe !=nil {return _gf .Wrap (_dbe ,_cba ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_bcg .Values =append (_bcg .Values ,_gddf );
|
|
_eaa ,_gab :=_gddf .Width ,_gddf .Height ;_cgf .TemplatesSize .Add (uint64 (_gab )*uint64 (_eaa ),_gcf );_deb ,_dabg :=_fcge .Get (_dee );if _dabg !=nil {return _gf .Wrap (_dabg ,_cba ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_bcg .AddBox (_deb );_cgf .ClassInstances .AddBitmaps (_bcg );
|
|
_cgf .CentroidPointsTemplates .AddPoint (_dfbf ,_gag );_cgf .UndilatedTemplates .AddBitmap (_affg );_cgf .DilatedTemplates .AddBitmap (_bfd );};};return nil ;};func (_bff *Classer )classifyRankHouseNonOne (_dfg *_ee .Boxes ,_bfg ,_edc ,_bca *_ee .Bitmaps ,_bfe *_ee .Points ,_bdc *_g .NumSlice ,_dgb int )(_ffc error ){const _fec ="\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 (_gdb ,_bfda ,_ecb ,_fecf float32 ;_beeg ,_fff ,_dfa int ;_aba ,_becd ,_fegg ,_gdf ,_dec *_ee .Bitmap ;_fga ,_dcca bool ;);_fad :=_ee .MakePixelSumTab8 ();for _ffg :=0;_ffg < len (_bfg .Values );_ffg ++{if _becd ,_ffc =_edc .GetBitmap (_ffg );_ffc !=nil {return _gf .Wrap (_ffc ,_fec ,"b\u006d\u0073\u0031\u002e\u0047\u0065\u0074\u0028\u0069\u0029");
|
|
};if _beeg ,_ffc =_bdc .GetInt (_ffg );_ffc !=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",_ffg ,_ffc );
|
|
};if _fegg ,_ffc =_bca .GetBitmap (_ffg );_ffc !=nil {return _gf .Wrap (_ffc ,_fec ,"b\u006d\u0073\u0032\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};if _gdb ,_bfda ,_ffc =_bfe .GetGeometry (_ffg );_ffc !=nil {return _gf .Wrapf (_ffc ,_fec ,"\u0070t\u0061[\u0069\u005d\u002e\u0047\u0065\u006f\u006d\u0065\u0074\u0072\u0079");
|
|
};_gcc :=len (_bff .UndilatedTemplates .Values );_fga =false ;_cfc :=_bgc (_bff ,_becd );for _dfa =_cfc .Next ();_dfa > -1;{if _gdf ,_ffc =_bff .UndilatedTemplates .GetBitmap (_dfa );_ffc !=nil {return _gf .Wrap (_ffc ,_fec ,"\u0070\u0069\u0078\u0061\u0074\u002e\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");
|
|
};if _fff ,_ffc =_bff .FgTemplates .GetInt (_dfa );_ffc !=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",_dfa ,_ffc );
|
|
};if _dec ,_ffc =_bff .DilatedTemplates .GetBitmap (_dfa );_ffc !=nil {return _gf .Wrap (_ffc ,_fec ,"\u0070\u0069\u0078\u0061\u0074\u0064\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");};if _ecb ,_fecf ,_ffc =_bff .CentroidPointsTemplates .GetGeometry (_dfa );
|
|
_ffc !=nil {return _gf .Wrap (_ffc ,_fec ,"\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");};_dcca ,_ffc =_ee .RankHausTest (_becd ,_fegg ,_gdf ,_dec ,_gdb -_ecb ,_bfda -_fecf ,MaxDiffWidth ,MaxDiffHeight ,_beeg ,_fff ,float32 (_bff .Settings .RankHaus ),_fad );
|
|
if _ffc !=nil {return _gf .Wrap (_ffc ,_fec ,"");};if _dcca {_fga =true ;if _ffc =_bff .ClassIDs .Add (_dfa );_ffc !=nil {return _gf .Wrap (_ffc ,_fec ,"");};if _ffc =_bff .ComponentPageNumbers .Add (_dgb );_ffc !=nil {return _gf .Wrap (_ffc ,_fec ,"");
|
|
};if _bff .Settings .KeepClassInstances {_gff ,_bbd :=_bff .ClassInstances .GetBitmaps (_dfa );if _bbd !=nil {return _gf .Wrap (_bbd ,_fec ,"\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 _aba ,_bbd =_bfg .GetBitmap (_ffg );_bbd !=nil {return _gf .Wrap (_bbd ,_fec ,"\u0070i\u0078\u0061\u005b\u0069\u005d");};_gff .Values =append (_gff .Values ,_aba );_gca ,_bbd :=_dfg .Get (_ffg );if _bbd !=nil {return _gf .Wrap (_bbd ,_fec ,"b\u006f\u0078\u0061\u002e\u0047\u0065\u0074\u0028\u0069\u0029");
|
|
};_gff .Boxes =append (_gff .Boxes ,_gca );};break ;};};if !_fga {if _ffc =_bff .ClassIDs .Add (_gcc );_ffc !=nil {return _gf .Wrap (_ffc ,_fec ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _ffc =_bff .ComponentPageNumbers .Add (_dgb );_ffc !=nil {return _gf .Wrap (_ffc ,_fec ,"\u0021\u0066\u006f\u0075\u006e\u0064");
|
|
};_adc :=&_ee .Bitmaps {};_aba =_bfg .Values [_ffg ];_adc .AddBitmap (_aba );_cdcg ,_deeb :=_aba .Width ,_aba .Height ;_bff .TemplatesSize .Add (uint64 (_cdcg )*uint64 (_deeb ),_gcc );_gadd ,_fdd :=_dfg .Get (_ffg );if _fdd !=nil {return _gf .Wrap (_fdd ,_fec ,"\u0021\u0066\u006f\u0075\u006e\u0064");
|
|
};_adc .AddBox (_gadd );_bff .ClassInstances .AddBitmaps (_adc );_bff .CentroidPointsTemplates .AddPoint (_gdb ,_bfda );_bff .UndilatedTemplates .AddBitmap (_becd );_bff .DilatedTemplates .AddBitmap (_fegg );_bff .FgTemplates .AddInt (_beeg );};};_bff .NumberOfClasses =len (_bff .UndilatedTemplates .Values );
|
|
return nil ;}; |