关闭

C++调用Tesseract

371人阅读 评论(0) 收藏 举报

Refer from http://blog.csdn.net/fengbingchun/article/details/8493877

1、  从http://code.google.com/p/tesseract-ocr/downloads/list下载tesseract-ocr-3.02-vs2008tesseract-ocr-3.02.chi_sim.tartesseract-ocr-3.02.02.tartesseract-ocr-3.02.02-doc-html.tarleptonica-1.68-win32-lib-include-dirs相关文件;

2、  将所有文件存放在E:\OCR\tesseract_ocr3.02文件夹下并解压缩;

3、  打开tesseract-ocr-3.02-vs2008文件夹下的tesseract.sln工程;

4、  将tesseract-ocr-3.02.02文件夹下的对应文件如apiccmain等复制到E:\OCR\tesseract_ocr3.02\tesseract-ocr-3.02-vs2008\tesseract-ocr文件夹下,把leptonica-1.68-win32-lib-include-dirs文件夹下的include文件夹复制到E:\OCR\tesseract_ocr3.02\tesseract-ocr-3.02-vs2008文件夹下,将tesseract_ocr3.02\tesseract-ocr-3.02.02\tesseract-ocr\vs2008\port文件夹下的文件复制到E:\OCR\tesseract_ocr3.02\tesseract-ocr-3.02-vs2008\tesseract-ocr\vs2008\port文件夹下,将leptonica-1.68-win32-lib-include-dirs文件夹下lib文件夹复制到tesseract_ocr3.02\tesseract-ocr-3.02-vs2008文件夹下;

5、  将ccmain文件夹下的equationdetect.cpp文件中的static const STRING kCharsToEx[] = {"'", "`","\"", "\\", ",", ".", "〈", "〉", "《", "》", "」", "「", ""};修改成static const STRING kCharsToEx[] = {"'", "`","\"", "\\", ",",".","<", ">",   "<<",">>",  ""};(注:不改动编译时始终出错,其它方法暂未发现,3.01版本中没有此文件,编译3.01不用对源文件作任何修改)

6、 重新编译整个Solution;

7、 创建一个控制台空工程,配置环境仿照tesseract工程,并在执行文件夹下创建一个tessdata文件夹,里面存放chi_sim.traineddata数据文件,示例代码如下:

 

  1. #include "allheaders.h"  
  2. #include "baseapi.h"  
  3. #include "basedir.h"  
  4. #include "strngs.h"  
  5. #include "tesseractmain.h"  
  6. #include "tprintf.h"  
  7.   
  8. int main(int argc, char **argv)  
  9. {  
  10.   tesseract::TessBaseAPI api;  
  11.   STRING tessdata_dir;  
  12.   
  13.   truncate_path(argv[0], &tessdata_dir);  
  14.   
  15.   int rc = api.Init(tessdata_dir.string(), NULL);  
  16.   
  17.   if (rc)   
  18.   {  
  19.     fprintf(stderr, ("Could not initialize tesseract.\n"));  
  20.     exit(1);  
  21.   }  
  22.   
  23.   api.End();  
  24.   
  25.   // Make the order of args a bit more forgiving than it used to be.  
  26.   const char* lang = "chi_sim";//eng  
  27.   const char* image = "E:\\OCR\\tesseract_ocr3.02\\tesseract-ocr-3.02-vs2008\\tesseract-ocr\\vs2008\\Debug\\ABC.tif";//NULL;  
  28.   const char* output = "E:\\OCR\\tesseract_ocr3.02\\tesseract-ocr-3.02-vs2008\\tesseract-ocr\\vs2008\\Debug\\xxxxx";//NULL;  
  29.     
  30.   tesseract::PageSegMode pagesegmode = tesseract::PSM_AUTO;  
  31.   int arg = 1;  
  32.   
  33.   api.SetOutputName(output);  
  34.   
  35.   rc = api.Init(tessdata_dir.string(), lang, tesseract::OEM_DEFAULT,  
  36.                 &(argv[arg]), argc - arg, NULL, NULL, false);  
  37.   if (rc)  
  38.   {  
  39.     fprintf(stderr, ("Could not initialize tesseract.\n"));  
  40.     exit(1);  
  41.   }  
  42.   
  43.   if (api.GetPageSegMode() == tesseract::PSM_SINGLE_BLOCK)  
  44.   {  
  45.     api.SetPageSegMode(pagesegmode);  
  46.   }  
  47.   
  48.   tprintf("Tesseract Open Source OCR Engine v%s with Leptonica\n", tesseract::TessBaseAPI::Version());  
  49.   
  50.   FILE* fin = fopen(image, "rb");  
  51.   
  52.   if (fin == NULL)   
  53.   {  
  54.     fprintf(stderr, ("Cannot open input file: %s\n"), image);  
  55.     exit(2);  
  56.   }  
  57.   
  58.   fclose(fin);  
  59.   
  60.   PIX   *pixs;  
  61.   
  62.   if ((pixs = pixRead(image)) == NULL)  
  63.   {  
  64.     fprintf(stderr, ("Unsupported image type.\n"));  
  65.     exit(3);  
  66.   }  
  67.   
  68.   pixDestroy(&pixs);  
  69.   
  70.   STRING text_out;  
  71.   
  72.   if (!api.ProcessPages(image, NULL, 0, &text_out))   
  73.   {  
  74.     fprintf(stderr, ("Error during processing.\n"));  
  75.   }  
  76.   
  77.   bool output_hocr = false;  
  78.   api.GetBoolVariable("tessedit_create_hocr", &output_hocr);  
  79.   
  80.   bool output_box = false;  
  81.   api.GetBoolVariable("tessedit_create_boxfile", &output_box);  
  82.   
  83.   STRING outfile = output;  
  84.   outfile += output_hocr ? ".html" : output_box ? ".box" : ".txt";  
  85.   
  86.   FILE* fout = fopen(outfile.string(), "wb");  
  87.   if (fout == NULL)   
  88.   {  
  89.     fprintf(stderr, ("Cannot create output file %s\n"), outfile.string());  
  90.     exit(1);  
  91.   }  
  92.   
  93.   fwrite(text_out.string(), 1, text_out.length(), fout);  
  94.   fclose(fout);  
  95.   
  96.   return 0;                      // Normal exit  
  97. }  

 

以上代码编译运行成功,直接输入整幅图像进行字符识别,效果一般。

0
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:312047次
    • 积分:4278
    • 等级:
    • 排名:第7400名
    • 原创:89篇
    • 转载:379篇
    • 译文:2篇
    • 评论:12条
    文章分类
    最新评论