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

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


編譯tesseractlinux

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

同時把編譯過程當中遇到的問題以及解決方法和你們分享一下,但願對正準備使用trsseract庫的朋友有所幫助。

ssh

下載代碼測試

google code下載一下源代碼,並創建build目錄。ui

  •   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文件夾,把下載的三個文件解壓,獲得如下目錄結構: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,但系統提示運行失敗:

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

緣由是我使用的liblept168d.dll是vs2008編譯的(leptonica-1.68-win32-lib-include-dirs.zip),系統中沒有安裝vs2008的運行環境,所以沒法啓動。

解決方法

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

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

  2 使用vs2010從新編譯liblept168d.dll,能夠參考編譯方法。

    文中介紹的仍是vs2008,但vs2010過程徹底同樣,具體這裏不作說明了,一步一步照作就行。

    我這裏提供編譯好的庫,須要的能夠下載。

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

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

另存圖片爲image.jpg  在VS2010下編譯和使用tesseract_ocr識別驗證碼

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文件。

注意運行時須要語言庫。

相關文章
相關標籤/搜索