tesseract-ocr3.02字符識別過程操作步驟

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數據文件,示例代碼如下:

 

[cpp] view plaincopy
#include "allheaders.h"  
#include "baseapi.h"  
#include "basedir.h"  
#include "strngs.h"  
#include "tesseractmain.h"  
#include "tprintf.h"  
  
int main(int argc, char **argv)  
{  
  tesseract::TessBaseAPI api;  
  STRING tessdata_dir;  
  
  truncate_path(argv[0], &tessdata_dir);  
  
  int rc = api.Init(tessdata_dir.string(), NULL);  
  
  if (rc)   
  {  
    fprintf(stderr, ("Could not initialize tesseract.\n"));  
    exit(1);  
  }  
  
  api.End();  
  
  // Make the order of args a bit more forgiving than it used to be.  
  const char* lang = "chi_sim";//eng  
  const char* p_w_picpath = "E:\\OCR\\tesseract_ocr3.02\\tesseract-ocr-3.02-vs2008\\tesseract-ocr\\vs2008\\Debug\\ABC.tif";//NULL;  
  const char* output = "E:\\OCR\\tesseract_ocr3.02\\tesseract-ocr-3.02-vs2008\\tesseract-ocr\\vs2008\\Debug\\xxxxx";//NULL;  
    
  tesseract::PageSegMode pagesegmode = tesseract::PSM_AUTO;  
  int arg = 1;  
  
  api.SetOutputName(output);  
  
  rc = api.Init(tessdata_dir.string(), lang, tesseract::OEM_DEFAULT,  
                &(argv[arg]), argc - arg, NULL, NULL, false);  
  if (rc)  
  {  
    fprintf(stderr, ("Could not initialize tesseract.\n"));  
    exit(1);  
  }  
  
  if (api.GetPageSegMode() == tesseract::PSM_SINGLE_BLOCK)  
  {  
    api.SetPageSegMode(pagesegmode);  
  }  
  
  tprintf("Tesseract Open Source OCR Engine v%s with Leptonica\n", tesseract::TessBaseAPI::Version());  
  
  FILE* fin = fopen(p_w_picpath, "rb");  
  
  if (fin == NULL)   
  {  
    fprintf(stderr, ("Cannot open input file: %s\n"), p_w_picpath);  
    exit(2);  
  }  
  
  fclose(fin);  
  
  PIX   *pixs;  
  
  if ((pixs = pixRead(p_w_picpath)) == NULL)  
  {  
    fprintf(stderr, ("Unsupported p_w_picpath type.\n"));  
    exit(3);  
  }  
  
  pixDestroy(&pixs);  
  
  STRING text_out;  
  
  if (!api.ProcessPages(p_w_picpath, NULL, 0, &text_out))   
  {  
    fprintf(stderr, ("Error during processing.\n"));  
  }  
  
  bool output_hocr = false;  
  api.GetBoolVariable("tessedit_create_hocr", &output_hocr);  
  
  bool output_box = false;  
  api.GetBoolVariable("tessedit_create_boxfile", &output_box);  
  
  STRING outfile = output;  
  outfile += output_hocr ? ".html" : output_box ? ".box" : ".txt";  
  
  FILE* fout = fopen(outfile.string(), "wb");  
  if (fout == NULL)   
  {  
    fprintf(stderr, ("Cannot create output file %s\n"), outfile.string());  
    exit(1);  
  }  
  
  fwrite(text_out.string(), 1, text_out.length(), fout);  
  fclose(fout);  
  
  return 0;                      // Normal exit  
}


 

以上代碼編譯運行成功,直接輸入整幅圖像進行字符識別,效果一般。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章