版權聲明:本文為博主原創文章,未經博主允許不得轉載。
對於自動識別驗證碼,使用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
- #include "stdafx.h"
- #include "tesseract\baseapi.h"
- #include "tesseract\strngs.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- const char * image = "image.jpg";
- tesseract::TessBaseAPI api;
- api.Init(NULL, "eng", tesseract::OEM_DEFAULT);
- api.SetVariable( "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" );
- STRING text_out;
- if (!api.ProcessPages(image, NULL, 0, &text_out))
- {
- return 0;
- }
- printf(text_out.string());
- return 0;
- }
編譯后用剛才下載的image.jpg文件。
注意運行時需要語言庫。