zoukankan      html  css  js  c++  java
  • c/c++语言实现tesseract ocr引擎编程实例

    编译下面的程序操作系统必须在安装了tesseract库和leptonica库才可以

    Basic example

    c++ 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. ");
            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: %s", outText);

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

        return 0;
    }



    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. ", 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';   conf: %.2f; BoundingBox: %d,%d,%d,%d; ",
                   word, conf, x1, y1, x2, y2);
          delete[] word;
        } while (ri->Next(level));
      }

    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; WritingDirection: %d TextlineOrder: %d "
             "Deskew angle: %.4f ",
             orientation, direction, order, deskew_angle);




    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(" ");
                      printf(" - ");
                      const char* choice = ci.GetUTF8Text();
                      printf("%s conf: %f ", choice, ci.Confidence());
                      indent = true;
                  } while(ci.Next());
              }
              printf("--------------------------------------------- ");
              delete[] symbol;
          } while((ri->Next(level)));
      }


    在linux下面编译C++ 程序的方法:
    g++ -o myprogram myprogram.cpp -llept -ltesseract

    如果你安装tesssract的时候不是通常的路径,需要手动指定头文件的include和库lib的路径。加上选项-I和-L如:
    g++ -o myprogram myprogram.cpp -I/home/nick/local/include/tesseract -L/home/nick/local/lib -llept -ltesseract


    c语言程序的例子:
    #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 ");

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

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

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

            fputs(text, stdout);

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

            return 0;
    }
    在linux下面编译C语言程序的方法和c++的方法是一样的,只不过换个编译器就好:
    gcc -o myprogram myprogram.cpp -llept -ltesseract

    如果你安装tesssract的时候不是通常的路径,需要手动指定头文件的include和库lib的路径。加上选项-I和-L如:
    gcc -o myprogram myprogram.cpp -I/home/nick/local/include/tesseract -L/home/nick/local/lib -llept -ltesseract
    运行方法:
    把一个图片复制到当前目录下命名为
    img.png
    ./myprogram img.png

  • 相关阅读:
    迭代加深搜索 codevs 2541 幂运算
    二叉树结构 codevs 1029 遍历问题
    深搜+DP剪枝 codevs 1047 邮票面值设计
    2016.6.10 深度优先搜索练习
    二分+动态规划 POJ 1973 Software Company
    tarjan算法求桥双连通分量 POJ 3177 Redundant Paths
    tarjan算法+缩点:求强连通分量 POJ 2186
    tarjan算法求割点cojs 8
    关键路径 SDUTOJ 2498
    第二章 STM32的结构和组成
  • 原文地址:https://www.cnblogs.com/etangyushan/p/4225458.html
Copyright © 2011-2022 走看看