對於自動識別驗證碼,使用trsseract是個不錯的選擇,有興趣的的朋友能夠試試。python
編譯tesseractlinux
官網提供了vs2008的編譯說明和工程,但在vs2010下的編譯時基本相同的,所以我使用的方法就是把vs2008工程轉換爲vs2010工程,api
同時把編譯過程當中遇到的問題以及解決方法和你們分享一下,但願對正準備使用trsseract庫的朋友有所幫助。
ssh
下載代碼測試
google code下載一下源代碼,並創建build目錄。ui
建立tesseract-build文件夾,把下載的三個文件解壓,獲得如下目錄結構:google
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。spa
打開工程文件vs2010\tesseract.sln,按vs2010的提示自動轉換工程。code
完成後選擇編譯配置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文件。
注意運行時須要語言庫。