[轉]在VS2010下編譯和使用tesseract_ocr


在VS2010下編譯和使用tesseract_ocr識別驗證碼

 
轉載地址:http://blog.csdn.net/zhymax/article/details/8435303

 

對於自動識別驗證碼,使用trsseract是個不錯的選擇,有興趣的的朋友可以試試。


編譯tesseract

官網提供了vs2008的編譯說明和工程,但在vs2010下的編譯時基本相同的,因此我使用的方法就是把vs2008工程轉換為vs2010工程,

同時把編譯過程中遇到的問題以及解決方法和大家分享一下,希望對正准備使用trsseract庫的朋友有所幫助。

下載代碼

google code 下載一下源代碼,並建立build目錄。
  •   tesseract-ocr-3.02.02.tar.gz   tesseract源代碼
  •   tesseract-ocr-3.02-vs2008.zip vs2008工程文件
  •   leptonica-1.68-win32-lib-include-dirs.zip    tesseract依賴的leptonica的lib和dll文件

創建tesseract-build文件夾,把下載的三個文件解壓,得到以下目錄結構:

tesseract-build
├─include              // 保存leptonica-1.68-win32-lib-include-dirs.zip解壓后頭文件
│  └─leptonica
├─lib    // 保存leptonica-1.68-win32-lib-include-dirs.zip解壓后庫文件
├─tesseract-ocr    // 保存tesseract源代碼以及vs2008工程文件
     └─vs2008

在tesseract-ocr目錄下復制一份vs2008文件夾,改為名vs2010。

打開工程文件vs2010\tesseract.sln,按vs2010的提示自動轉換工程。

完成后選擇編譯配置DLL_Debug,編譯。

編譯過程會出現以下錯誤:

1>  equationdetect.cpp
1>..\..\ccmain\equationdetect.cpp : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數據丟失
1>..\..\ccmain\equationdetect.cpp(251): error C2146: 語法錯誤: 缺少“}”(在標識符“銆”的前面)
1>..\..\ccmain\equationdetect.cpp(251): error C2146: 語法錯誤: 缺少“;”(在標識符“銆”的前面)
1>..\..\ccmain\equationdetect.cpp(251): error C2065: “銆”: 未聲明的標識符
1>..\..\ccmain\equationdetect.cpp(251): error C2146: 語法錯誤: 缺少“;”(在標識符“銆”的前面)
1>..\..\ccmain\equationdetect.cpp(251): error C2065: “銆”: 未聲明的標識符
1>..\..\ccmain\equationdetect.cpp(251): error C2146: 語法錯誤: 缺少“;”(在標識符“銆”的前面)
1>..\..\ccmain\equationdetect.cpp(251): error C2065: “銆”: 未聲明的標識符
1>..\..\ccmain\equationdetect.cpp(251): error C2143: 語法錯誤 : 缺少“;”(在“}”的前面)
1>..\..\ccmain\equationdetect.cpp(253): error C2065: “kCharsToEx”: 未聲明的標識符
1>..\..\ccmain\equationdetect.cpp(253): fatal error C1903: 無法從以前的錯誤中恢復;正在停止編譯

這是錯誤由於文件編碼格式引起的。

解決方法:

  選擇vs2010的菜單“文件 -- 高級保存選項”,在窗口中選擇“簡體中文(gb2312)-代碼頁936”,保存后重新編譯。

編譯完成后生成dll文件:vs2010\DLL_Debug\libtesseract302d.dll


測試tesseract

編譯tesseract工程,生成DLL_Debug\tesseract.exe

下載英文語言庫tesseract-ocr-3.02.eng.tar.gz,解壓到DLL_Debug文件夾。

還需要把tesseract-build\lib\liblept168d.dll復制到DLL_Debug目錄。

運行tesseract.exe,但系統提示運行失敗:



原因是我使用的liblept168d.dll是vs2008編譯的(leptonica-1.68-win32-lib-include-dirs.zip),系統中沒有安裝vs2008的運行環境,因此無法啟動。

解決方法

  1 根據官網說明,可以使用liblept168d靜態庫編譯。

    選擇LIB_Debug編譯配置,重新生成以上文件。

  2 使用vs2010重新編譯liblept168d.dll,可以參考編譯方法

    文中介紹的還是vs2008,但vs2010過程完全一樣,具體這里不做說明了,一步一步照做就行。

    我這里提供編譯好的庫,需要的可以 下載

生成后,使用京東商城的驗證碼進行測試

 

另存圖片為image.jpg  

tesseract.exe image.jpg image

輸出image.txt,結果是QYRH


使用tesseract.lib進行二次開發

創建test工程,保存在編譯目錄下:

tesseract-build
└─testtess // 測試工程

     └─testtess.sln

 

復制tesseract頭文件

官網提供了一個Python腳本,可以把開發使用的頭文件復制到指定目錄下:

python.exe tesshelper.py .. copy ..\..\include

代碼
[cpp]  view plain  copy
 
  1. #include "stdafx.h"  
  2. #include "tesseract\baseapi.h"  
  3. #include "tesseract\strngs.h"  
  4.   
  5.   
  6. int _tmain(int argc, _TCHAR* argv[])  
  7. {  
  8.     const char * image = "image.jpg";  
  9.       
  10.     tesseract::TessBaseAPI  api;  
  11.     api.Init(NULL, "eng", tesseract::OEM_DEFAULT);  
  12.     api.SetVariable( "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" );  
  13.   
  14.     STRING text_out;  
  15.     if (!api.ProcessPages(image, NULL, 0, &text_out))  
  16.     {  
  17.         return 0;  
  18.     }  
  19.   
  20.     printf(text_out.string());   
  21.   
  22.     return 0;  
  23. }  

 

編譯后用剛才下載的image.jpg文件。

注意運行時需要語言庫

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM