Tesseract-ocr在vs2008環境下的調用方法

       本文將介紹vs平臺上如何使用tesseract實現OCR。 tesseract出生於HP實驗室,如今由Google負責維護,是最好的開源OCR Engine之一,並且3.0版本以上的都支持中文。官網上有很詳細的用英文介紹如何在vs2008上編譯生成lib和dll,感興趣的可以去看看。 使用tesseract-ocr後,又發現tesseract -ocr依賴leptonica,於是,乾脆把leptonica也弄弄好了。尤其感謝以下作者的分享帶給我的幫助和啓發:

cxf7394373的 字符識別Google開源Tesseract-ocr的DLL調用方法

arvin_xiaoting【圖像識別】 圖像處理和圖像分析(leptonica)leptonica-1.68安裝配置 (vs2008)

智慧視覺【Tesseract-OCR】在VS2010環境下調用API方法---簡單快速之總結


一、本文用的是tesseract-ocr-3.02.02的下載地址:http://code.google.com/p/tesseract-ocr/downloads/list 

tesseract-ocr-setup-3.02.02.exe Windows installer of tesseract-ocr 3.02.02 (including English language data)   Featured
http://www.leptonica.com/ 可以下載: leptonica-1.68.tar.gz    leptonica-1.68-win32-lib-include-dirs.zip  //頭文件和lib

然後開始安裝tesseract-ocr,直接安裝在C:\Program Files\Tesseracr-OCR中,如此很方便,省去很多配置,如很多修改環境變量 [如果不採用如下修改環境變量方式,則需要對每個工程目錄建立tesseract文件夾,並且在裏面放置所需要的chi_sim.traineddata等語言包]也不再需要下載tesseract-3.02.02-win32-lib-include-dirs.zip, 更方便以後訓練出自己的traineddata 文件。

解壓 leptonica-1.68-win32-lib-include-dirs.zip  //頭文件和lib,把其中需要的dll放到你的工程目錄下。因爲運行過程中需要調用liblept168.dll這個動態鏈接庫。否剛的話,肯定會報這個“liblept168.dll找不到”的。 即把liblept168.dll 和 liblept168d.dll這兩個文件一併放到C:\Program Files\Tesseracr-OCR\lib裏面。

二、修改環境變量Path

在環境變量Path中增加指向安裝目錄下lib的路徑,比如C:\Program Files\Tesseract-OCR\lib  ,以便exe運行時能找到所需要的dll

三、工程中屬性中增加路徑

在自己的工程屬性中工具->選項->項目和解決方案->VC++目錄下增加包含目錄和庫目錄,以便VS2008查找文件。

在顯示以下內容的目錄中   

包含文件  下新增:C:\Program Files\Tesseract-OCR\include\tesseract

庫文件    下新增: C:\Program Files\Tesseract-OCR\lib 

四、增加語言訓練包

直接將語言訓練包放置在安裝目錄tessdata文件夾下就好,比如將tesseract-ocr-3.02.chi_sim.tar.gz中的chi_sim.traineddata 文件直接抽取出來放在  C:\Program Files\Tesseract-OCR\tessdata 下面,就可以支持中文簡體字符的識別。當然,自己訓練出來的sam.traineddata 文件也是要放在這裏的才生效。

五、API簡單使用方法

所有配置完成後,可以建立工程進行測試。

這裏可以參照cxf7394373的 字符識別Google開源Tesseract-ocr的DLL調用方法

使用API的一種模式大致是這樣:先包含頭文件,連接庫;然後再定義一個api類,配置好參數之後提取識別結果

#include <cv.h>
#include <highgui.h>
#include "strngs.h"
#include "baseapi.h"  
#include <iostream>
using namespace std;
#pragma  comment(lib,"libtesseract302d.lib")  
  
int main()
{
IplImage *img=NULL;
img=cvLoadImage("C:\\Users\\Administrator\\Desktop\\zifu\\tif_AccuractlyLocation\\plate26.jpg",-1);
tesseract::TessBaseAPI api;
api.Init(NULL,"sam",tesseract::OEM_DEFAULT);//初始化,設置語言包,中文簡體:chi_sim;英文:eng;也可以自己訓練語言包  
//api.SetVariable( "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" );    


api.SetImage((unsigned char*)(img->imageData), img->width, img->height,img->nChannels  , img->widthStep);//設置圖像
char* text = api.GetUTF8Text();//識別圖像中的文字
FILE* fout = fopen("txt_file.TXT", "w");
fprintf(fout,"%s\n",text);
fclose(fout);
return 0; 
}




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