tesseract api C++使用例子

转自:https://code.google.com/p/tesseract-ocr/wiki/APIExample

APIExample

API examples

Updated Aug 12, 2014 by [email protected]

This wiki provide simple example how to use tesseract-ocr API (v3.02.02) in C++. It is expected that tesseract-ocr is correctly installed including all dependecies. It is expected that user is familiar with C++, compiling and linking program on his platform, though basic compilation examples are included for beginners with Linux.

More details about tesseract-ocr API can found at baseapi.h

Basic example

Code:

#include <tesseract/baseapi.h>#include <leptonica/allheaders.h>

int main(){    char *outText;

    tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();    // Initialize tesseract-ocr with English, without specifying tessdata path    if (api->Init(NULL, "eng")) {        fprintf(stderr, "Could not initialize tesseract.\n");        exit(1);    }

    // Open input image with leptonica library    Pix *image = pixRead("/usr/src/tesseract-3.02/phototest.tif");    api->SetImage(image);    // Get OCR result    outText = api->GetUTF8Text();    printf("OCR output:\n%s", outText);

    // Destroy used object and release memory    api->End();    delete [] outText;    pixDestroy(&image);

    return 0;}

Program must be linked to tesseract-ocr library and leptonica library.

If you want to restrict recognition to a sub-rectangle of the image - call SetRectangle(left, top, width, height) after SetImage. Each SetRectangle clears the recogntion results so multiple rectangles can be recognized with the same image. E.g.

  api->SetRectangle(30, 86, 590, 100);

GetComponentImages example

  Pix *image = pixRead("/usr/src/tesseract-3.02/phototest.tif");  tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();  api->Init(NULL, "eng");  api->SetImage(image);  Boxa* boxes = api->GetComponentImages(tesseract::RIL_TEXTLINE, true, NULL, NULL);  printf("Found %d textline image components.\n", boxes->n);  for (int i = 0; i < boxes->n; i++) {    BOX* box = boxaGetBox(boxes, i, L_CLONE);    api->SetRectangle(box->x, box->y, box->w, box->h);    char* ocrResult = api->GetUTF8Text();    int conf = api->MeanTextConf();    fprintf(stdout, "Box[%d]: x=%d, y=%d, w=%d, h=%d, confidence: %d, text: %s",                    i, box->x, box->y, box->w, box->h, conf, ocrResult);  }

Result iterator example

There is posibility to get confidence value and BoundingBox per word from ResultIterator:

  Pix *image = pixRead("/usr/src/tesseract-3.02/phototest.tif");  tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();  api->Init(NULL, "eng");  api->SetImage(image);  api->Recognize(0);  tesseract::ResultIterator* ri = api->GetIterator();  tesseract::PageIteratorLevel level = tesseract::RIL_WORD;  if (ri != 0) {    do {      const char* word = ri->GetUTF8Text(level);      float conf = ri->Confidence(level);      int x1, y1, x2, y2;      ri->BoundingBox(level, &x1, &y1, &x2, &y2);      printf("word: ‘%s‘;  \tconf: %.2f; BoundingBox: %d,%d,%d,%d;\n",               word, conf, x1, y1, x2, y2);      delete[] word;    } while (ri->Next(level));  }

Of course there is posibility to use other PageiteratorLevel.

Orientation and script detection (OSD) example

  const char* inputfile = "/usr/src/tesseract-3.02/eurotext.tif";  tesseract::Orientation orientation;  tesseract::WritingDirection direction;  tesseract::TextlineOrder order;  float deskew_angle;

  PIX *image = pixRead(inputfile);  tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();  api->Init("/usr/src/tesseract-3.02/", "eng");  api->SetPageSegMode(tesseract::PSM_AUTO_OSD);  api->SetImage(image);  api->Recognize(0);

  tesseract::PageIterator* it =  api->AnalyseLayout();  it->Orientation(&orientation, &direction, &order, &deskew_angle);  printf("Orientation: %d;\nWritingDirection: %d\nTextlineOrder: %d\n" \         "Deskew angle: %.4f\n",         orientation, direction, order, deskew_angle);

Explanation for result codes are in publictypes.h

Example of iterator over the classifier choices for a single symbol

  Pix *image = pixRead("/usr/src/tesseract-3.02/phototest.tif");  tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();  api->Init(NULL, "eng");  api->SetImage(image);  api->SetVariable("save_blob_choices", "T");  api->SetRectangle(37, 228, 548, 31);  api->Recognize(NULL);

  tesseract::ResultIterator* ri = api->GetIterator();  tesseract::PageIteratorLevel level = tesseract::RIL_SYMBOL;  if(ri != 0) {      do {          const char* symbol = ri->GetUTF8Text(level);          float conf = ri->Confidence(level);          if(symbol != 0) {              printf("symbol %s, conf: %f", symbol, conf);              bool indent = false;              tesseract::ChoiceIterator ci(*ri);              do {                  if (indent) printf("\t\t ");                  printf("\t- ");                  const char* choice = ci.GetUTF8Text();                  printf("%s conf: %f\n", choice, ci.Confidence());                  indent = true;              } while(ci.Next());          }          printf("---------------------------------------------\n");          delete[] symbol;      } while((ri->Next(level)));  }

Compiling C++ API programs on Linux

Including and linking to Tesseract‘s API is done in a standard Linux way. To compile a basic program against the API, you can use a command like this:

g++ -o myprogram myprogram.cpp -llept -ltesseract

If Tesseract is installed in an unusual place, you can specify the include and lib directories explicitly with g++‘s -I and -L flags, like this:

g++ -o myprogram myprogram.cpp -I/home/nick/local/include/tesseract -L/home/nick/local/lib -llept -ltesseract

C-API in python

Tesseract-ocr from version 3.02.02 provide C-API. This enable to use tesseract-ocr shared library in python (and other languages that can use C libraries):

import osimport ctypes

lang = "eng"filename = "/usr/src/tesseract-ocr/phototest.tif"libname = "/usr/local/lib64/libtesseract.so.3"TESSDATA_PREFIX = os.environ.get(‘TESSDATA_PREFIX‘)if not TESSDATA_PREFIX:    TESSDATA_PREFIX = "../"

tesseract = ctypes.cdll.LoadLibrary(libname)tesseract.TessVersion.restype = ctypes.c_char_ptesseract_version = tesseract.TessVersion()api = tesseract.TessBaseAPICreate()rc = tesseract.TessBaseAPIInit3(api, TESSDATA_PREFIX, lang)if (rc):    tesseract.TessBaseAPIDelete(api)    print("Could not initialize tesseract.\n")    exit(3)

text_out = tesseract.TessBaseAPIProcessPages(api, filename, None, 0)result_text = ctypes.string_at(text_out)

print ‘Tesseract-ocr version‘, tesseract_versionprint result_text

Example of passing python file object to C-API can be found at pastebin.

Example using the C-API in a C program

The C-API can of course also be used by regular C programs, as in this very basic example.

#include <stdio.h>#include <allheaders.h>#include <capi.h>

void die(const char *errstr) {        fputs(errstr, stderr);        exit(1);}

int main(int argc, char *argv[]) {        TessBaseAPI *handle;        PIX *img;        char *text;

        if((img = pixRead("img.png")) == NULL)                die("Error reading image\n");

        handle = TessBaseAPICreate();        if(TessBaseAPIInit3(handle, NULL, "eng") != 0)                die("Error initialising tesseract\n");

        TessBaseAPISetImage2(handle, img);        if(TessBaseAPIRecognize(handle, NULL) != 0)                die("Error in Tesseract recognition\n");

        if((text = TessBaseAPIGetUTF8Text(handle)) == NULL)                die("Error getting text\n");

        fputs(text, stdout);

        TessDeleteText(text);        TessBaseAPIEnd(handle);        TessBaseAPIDelete(handle);        pixDestroy(&img);

        return 0;}

On Linux you can compile it as you would build a program using the C++ API.

时间: 2024-10-11 15:12:25

tesseract api C++使用例子的相关文章

【Tesseract】Tesseract API在VS 2013中的配置以及调用

想要在VS中使用Tesseract库,必须使用经过相对应的VS版本编译过的dll以及lib.比如在VS 2013中,就必须使用在VS 2013中编译过的Tesseract库. 这里我给出经过VS 2013编译的Tesseract库, 下载地址: http://pan.baidu.com/s/1o7JqXmU 解压后内容如下图, 有了Tesseract库之后,我们便在VS 2013中配置环境以及包含库了. 引入头文件 在“解决方案管理器”窗口–>右键“photo”工程–>“属性(R)”–>

Tesseract API在VS 2013中的配置以及调用

[Tesseract]Tesseract API在VS 2013中的配置以及调用 时间:2016-05-31 20:35:19      阅读:127      评论:0      收藏:0      [点我收藏+] 想要在VS中使用Tesseract库,必须使用经过相对应的VS版本编译过的dll以及lib.比如在VS 2013中,就必须使用在VS 2013中编译过的Tesseract库. 这里我给出经过VS 2013编译的Tesseract库, 下载地址: http://pan.baidu.c

jquery api 常见api 效果操作例子

addClass_removeClass_toggleClass_hasClass.html 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2 <html> 3 <head> 4 <title>method_1.html</title> 5 <meta http-equiv="content-type" conten

【windows核心编程】一个API拦截的例子

API拦截 修改PE文件导入段中的导入函数地址 为 新的函数地址 这涉及PE文件格式中的导入表和IAT,PE文件中每个隐式链接的DLL对应一个IMAGE_IMPORT_DESCRIPTOR描述符结构,而每个IMAGE_IMPORT_DESCRIPTOR结构中的FirstThunk指向一个IMAGE_THUNK_DATA结构数组的首地址. 在这个IAMGE_THUNK_DATA数组中,每一项对应一个该DLL模块的导入函数(对使用该DLL模块的PE文件来说是 导入).  结构大致如下 拦截某DLL模

jquery api 常见api 元素操作例子

append_prepend.html 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2 <html> 3 <head> 4 <title>method_1.html</title> 5 <meta http-equiv="content-type" content="text/html; charset=

C# Web Api一个小例子

1) 认识Web Api(C#) ASP.NET Web API是一个框架,可以轻松构建HTTP服务,覆盖广泛的客户端,包括浏览器和移动设备. ASP.NET Web API是在.NET Framework上构建RESTful应用程序的理想平台. 那么RESTful又是什么? 简单的解释,RESTful属于一种设计风格,REST中的GET,POST,PUT DELETE来进行数据的增删改查,如果开发人员的应用程序符合RESTful原则,则它的服务称为"RESTful风格应用服务". 2

VC API常用函数简单例子大全[转]

第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄 函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCSTR lpWindowName); 第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时填两个参数的,也就是说,你只要知道窗口的类名或窗口的标题就可以了,没有的那个就用NULL代替. 比如现在有一个窗口名为"无标题.txt - 记事本"的记事本程序.那么我就可以用上面的函数获得这个

Tesseract+opencv+VS+win实现OCR

参考网站: http://www.cnblogs.com/wzben/p/5930538.html (第一次) http://wangjunle23.blog.163.com/blog/static/117838171201323031458171/ (分析) http://blog.csdn.net/a443475601/article/details/9854003 (简洁) tesseract训练 命名 为了方便 tif文面命名格式[lang].[fontname].exp[num].ti

C#调用windows API的一些方法

使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2.  调用 COM 对象上的接口方法 我主要讨论从dll中导出函数,基本步骤如下: 1.使用 C# 关键字 static 和 extern 声明方法. 2.将 DllImport 属性附加到该方法.DllImport 属性允许您指定包含该方法的 DLL 的名称. 3.如果需要,为方法的参数和返回值指定