@@ -358,8 +358,71 @@ func (t *Tess) SetRectangle(left, top, width, height int) {
358
358
C .TessBaseAPISetRectangle (t .tba , C .int (left ), C .int (top ), C .int (width ), C .int (height ))
359
359
}
360
360
361
- // typedef struct TessPageIterator TessPageIterator;
361
+ // int TessBaseAPIRecognize(TessBaseAPI* handle, ETEXT_DESC* monitor);
362
+ func (t * Tess ) Recognize () error {
363
+ ret := C .TessBaseAPIRecognize (t .tba , nil )
364
+ if ret != 0 {
365
+ return errors .New ("recognition failed" )
366
+ }
367
+ return nil
368
+ }
369
+
370
+ // typedef enum TessPageIteratorLevel { RIL_BLOCK, RIL_PARA, RIL_TEXTLINE, RIL_WORD, RIL_SYMBOL} TessPageIteratorLevel;
371
+ type PageIteratorLevel int
372
+
373
+ const (
374
+ RIL_BLOCK PageIteratorLevel = iota
375
+ RIL_PARA
376
+ RIL_TEXTLINE
377
+ RIL_WORD
378
+ RIL_SYMBOL
379
+ )
380
+
381
+ // TessResultIterator* TessBaseAPIGetIterator(TessBaseAPI* handle);
382
+ func (t * Tess ) Iterator () (* ResultIterator , error ) {
383
+ ri := C .TessBaseAPIGetIterator (t .tba )
384
+
385
+ if ri == nil {
386
+ return nil , errors .New ("no results" )
387
+ }
388
+
389
+ resultIterator := & ResultIterator {
390
+ ri : ri ,
391
+ }
392
+
393
+ runtime .SetFinalizer (resultIterator , (* ResultIterator ).delete )
394
+ return resultIterator , nil
395
+ }
396
+
362
397
// typedef struct TessResultIterator TessResultIterator;
398
+ type ResultIterator struct {
399
+ ri * C.TessResultIterator
400
+ }
401
+
402
+ // void TessResultIteratorDelete(TessResultIterator* handle);
403
+ func (r * ResultIterator ) delete () {
404
+ if r .ri != nil {
405
+ C .TessResultIteratorDelete (r .ri )
406
+ }
407
+ }
408
+
409
+ // TESS_API BOOL TESS_CALL TessResultIteratorNext(TessResultIterator* handle, TessPageIteratorLevel level);
410
+ func (r * ResultIterator ) Next (level PageIteratorLevel ) bool {
411
+ return gobool (C .TessResultIteratorNext (r .ri , C .TessPageIteratorLevel (level )))
412
+ }
413
+
414
+ // char* TessResultIteratorGetUTF8Text(const TessResultIterator* handle, TessPageIteratorLevel level);
415
+ func (r * ResultIterator ) Text (level PageIteratorLevel ) (string , error ) {
416
+ cText := C .TessResultIteratorGetUTF8Text (r .ri , C .TessPageIteratorLevel (level ))
417
+ if cText == nil {
418
+ return "" , errors .New ("already at the end" )
419
+ }
420
+ defer C .free (unsafe .Pointer (cText ))
421
+ text := C .GoString (cText )
422
+ return text , nil
423
+ }
424
+
425
+ // typedef struct TessPageIterator TessPageIterator;
363
426
// typedef struct TessMutableIterator TessMutableIterator;
364
427
// typedef enum TessOcrEngineMode { OEM_TESSERACT_ONLY, OEM_CUBE_ONLY, OEM_TESSERACT_CUBE_COMBINED, OEM_DEFAULT } TessOcrEngineMode;
365
428
// typedef enum TessPageSegMode { PSM_OSD_ONLY, PSM_AUTO_OSD, PSM_AUTO_ONLY, PSM_AUTO, PSM_SINGLE_COLUMN, PSM_SINGLE_BLOCK_VERT_TEXT, PSM_SINGLE_BLOCK, PSM_SINGLE_LINE, PSM_SINGLE_WORD, PSM_CIRCLE_WORD, PSM_SINGLE_CHAR, PSM_COUNT } TessPageSegMode;
@@ -425,12 +488,10 @@ func (t *Tess) SetRectangle(left, top, width, height int) {
425
488
426
489
// TessPageIterator* TessBaseAPIAnalyseLayout(TessBaseAPI* handle);
427
490
428
- // int TessBaseAPIRecognize(TessBaseAPI* handle, ETEXT_DESC* monitor);
429
491
// int TessBaseAPIRecognizeForChopTest(TessBaseAPI* handle, ETEXT_DESC* monitor);
430
492
// char* TessBaseAPIProcessPages(TessBaseAPI* handle, const char* filename, const char* retry_config, int timeout_millisec);
431
493
// char* TessBaseAPIProcessPage(TessBaseAPI* handle, PIX* pix, int page_index, const char* filename, const char* retry_config, int timeout_millisec);
432
494
433
- // TessResultIterator* TessBaseAPIGetIterator(TessBaseAPI* handle);
434
495
// TessMutableIterator* TessBaseAPIGetMutableIterator(TessBaseAPI* handle);
435
496
436
497
// int TessBaseAPIMeanTextConf(TessBaseAPI* handle);
@@ -460,7 +521,6 @@ func (t *Tess) SetRectangle(left, top, width, height int) {
460
521
// void TessPageIteratorOrientation(TessPageIterator* handle, TessOrientation *orientation, TessWritingDirection *writing_direction, TessTextlineOrder *textline_order, float *deskew_angle);
461
522
462
523
// /* Result iterator */
463
- // void TessResultIteratorDelete(TessResultIterator* handle);
464
524
// TessResultIterator* TessResultIteratorCopy(const TessResultIterator* handle);
465
525
// TessPageIterator* TessResultIteratorGetPageIterator(TessResultIterator* handle);
466
526
// const TessPageIterator* TessResultIteratorGetPageIteratorConst(const TessResultIterator* handle);
0 commit comments