Win10 + vs2017 編譯並配置tesseract4.1.0


  tesseract 是一個開源的OCR (Optical Character Recognition , 光學字符識別) 引擎,本文就介紹一下自己在編譯 tesseract4.1.0時遇到的一些坑,希望能給大家帶來一些幫助。

一、下載 tesseract

  tesseract 是一個開源項目,可以在 GitHub 上下載源碼:https://github.com/tesseract-ocr/tesseract/releases/ 

  當然,也可以下載安裝版的:https://github.com/UB-Mannheim/tesseract/wiki 

   安裝版的下載完后直接安裝,然后配置環境變量(這個后面會講到)即可使用。這個方法筆者也嘗試過,但是很遺憾,沒能在 vs 上找到相關的庫文件,也就是不能在 vs 中調用 tesseract 相關的函數方法,只能在控制台上使用,這就比較蛋疼了,暫時在網上也沒找到相關的方法,所以只能下個源碼包自己編譯配置了,折騰了一天才搞定,不得不吐槽一下在 Windows 上想自己編譯一個東西真是麻煩。

 

二、所需要用到的工具

  在 Windows 上編譯 tesseract 主要需要用到兩個工具:cmake和 cppan。

2.1 cmake

  cmake 是一個跨平台的編譯工具 ,可以使用 cmake 在 Windows 上將源碼編譯成你想要的文件(比如說電腦上裝了 visual studio,那么就可以生成 .sln 文件),在 Linux 上使用 cmake 的話,則可以生成 makefile 文件,可以說功能非常強大了。

  Windows 上安裝 cmake 很簡單,直接下載可安裝文件后一鍵安裝就行:https://cmake.org/download/

 

   需要下載哪個是自己系統而定,筆者下載的是cmake-3.14.2-win64-x64.msi ,這個是可以直接安裝的。安裝完后,記得將 cmake 安裝目錄下的 /bin 目錄添加到 path 環境變量中去(本人的相應目錄是 D:\Program Files\CMake\bin )。配置完環境變量后,就可以在命令行使用 cmake 命令了。

 

2.2 cppan

  cppan 是一個跨平台的 C/C++ 依賴管理器。它建立在CMake之上,還具有構建系統功能。CPPAN支持快速腳本式編碼和原型設計以及處理大型項目。查找,共享和重用庫,發布項目。 使用 CPPAN 可以讓你把時間花費在處理代碼而不是管理依賴項上。CPPAN 可以為您將獲取包的時間減少到秒!它支持輕松交叉編譯,繼承和推送您自己的設置,標記每個依賴項。(注:以上介紹來自 CPPAN 英文介紹機翻,英文不好望見諒)。

  可以在 https://cppan.org/client/ 這里下載 cppan 的安裝包,本人下載的是 cppan-master-Windows-client.zip 文件。

  下載好安裝包后直接解壓,可以發現一個 cppan.exe 文件,也不需要雙擊這個文件安裝什么的,只需要將這個文件所在目錄添加到 path 環境變量中去就行了。(筆者的目錄是 D:\cppan,則直接把這個目錄添加到環境變量 path 中去就行)。配置好環境變量后就可以在命令行使用 cppan 命令了。

  

三、從源代碼編譯安裝 tesseract

  從源代碼編譯安裝 tesseract 的基本步驟 GitHub 上有講,按照 GitHub 上提供的方法來就行:https://github.com/tesseract-ocr/tesseract/wiki/Compiling

1)下載安裝 cppan

2)下載安裝 cmake

3)打開 Windows 命令行並進入 tesseract 源碼目錄(目錄最好為全英文);

4)在 tesseract 目錄下依次運行下述命令:

cppan

mkdir build && cd build

cmake ..

   完成后,可以在 /tesseract/build 目錄下看到一個 tesseract.sln 文件,說明 tesseract 源碼編譯成功了。(注:在運行 cppan 命令后,會下載一系列東西,耐心等待即可)。

5)上述命令編譯完成后是 x86 平台上的解決方案,若需要 x64 平台上的解決方案可以這樣:

mkdir bulid_win64 && cd bulid_win64
cppan ..
cmake ..
-G "Visual Studio 15 2017 Win64"

  如果需要在 vs2015 上使用 tesseract,只需要將 15 2017 改成 14 2015 即可。

 

四、在 vs2017 上編譯 tesseract

  用 cmake 編譯完源碼后,雖然生成了解決方案,但是還需要在 vs2017 上對該解決方案進行編譯才能生成 tesseract 的可執行文件及相關庫文件,步驟如下:

1)進入目錄 /tesseract/bulid ,找到 tesseract.sln 文件,使用 vs2017 以管理員方式打開它!(這很重要,我第一次就是沒用管理員方式打開才會報錯的)。 以管理員方式啟動 vs 程序的方法可以參考:https://blog.csdn.net/lien0906/article/details/47300881 ;

2)選擇解決方案平台,x86 平台則選擇 x86,x64 平台則選擇 x64;

3)在解決方案資源管理器中,右鍵解決方案 tesseract,選擇生成解決方案。

  理論上說,已經完成了,但是現實總是殘酷的,錯誤警報。。。

1)cppan-d-b-d 亂碼問題:大部分錯誤都是亂碼引起的,這是文件編碼的問題。cppan 下載的文件是 UTF-8(不帶簽名),而 vs2017 中文版默認保存的文本文件是 GB2312 編碼。

解決方法如下:雙擊錯誤行,打開相應的文件,然后點擊菜單欄中的“文件”下拉欄,選擇“高級保存選項”,將編碼方式保存為 “簡體中文(GB2312)- 代碼頁 936” 即可。vs2017 的文件下拉菜單中默認是沒有 “高級保存選項” 這一項的,可以自己手工添加。

2)error msb3073 命令 setlocal :這個就是沒有用管理員身份打開 .sln 文件所遇到的問題了,用管理員身份打開即可。

  解決了這兩個問題后,再次生成解決方案,應該沒問題了。

  最后,在 release 環境下再編譯一次。

 

五、環境變量配置

  在 vs2017 上編譯完成后,可以在 C 盤下發現一個 tesseract 安裝文件夾,我的是在 C:\Program Files\tesseract:

  可以在 /bin 目錄下找到 tesseract.exe 文件,將 C:\Program Files\tesseract\bin 添加到環境變量 path 中去(如何在 win10 上添加環境變量就不詳細說明了,網上有許多教程)。此外,在 /bin 目錄下新建兩個文件夾 Debug 和 Release,分別將 D:\tesseract_4.1.0\build\bin\Debug 和 D:\tesseract_4.1.0\build\bin\Release 目錄下的 .dll 文件復制到所新建的兩個文件夾下去;然后將 C:\Program Files\tesseract\bin\Debug 和 C:\Program Files\tesseract\bin\Release 也添加到環境變量 path 中去,如下:

  此外,新建一個系統變量TESSDATA_PREFIX,變量值為 D:\tesseract_4.1.0\tessdata,這個目錄下存放的是 tesseract-ocr 語言包文件,可以在 GitHub 上下載,下載后放到該目錄下去即可,下載地址為:https://github.com/tesseract-ocr/tessdata/

  

  配置好這兩步后,應該就可以在命令行使用 tesseract 命令了,可以簡單測試一下 tesseract 是否安裝成功,如下:

 

六、配置 vs2017 以使用 tesseract

  新建一個項目,在屬性管理器,Debug | x64 下面,右鍵 Microsoft.Cpp.x64.user 選擇屬性:

 

1)在 VC++ 目錄中:

  選擇包含目錄,編輯,分別添加這三個目錄:

C:\Program Files\tesseract\include

C:\Program Files\tesseract\include\tesseract

C:\Program Files\tesseract\include\leptonica

  這里有個問題是,你在 C:\Program Files\tesseract\include 下可能並找不到 leptonica 這個目錄,沒辦法,自己動手豐衣足食吧:在 C:\Program Files\tesseract\include 下新建文件夾 leptonica,然后將 C:\Users\lenovo\.cppan\storage\src\8f\a3\90d7\src 目錄下的文件全部復制到 C:\Program Files\tesseract\include\leptonica 下即可(不同電腦具體的目錄可能會不同,不過都在 C:\Users\lenovo\.cppan\storage\src\ 下)

 

 

2)在 VC++ 目錄中,選擇庫目錄,編輯,分別添加這三個目錄:

C:\Program Files\tesseract\lib

C:\Program Files\tesseract\lib\Release

C:\Program Files\tesseract\lib\Debug
  
同樣的,先在 C:\Program Files\tesseract\lib 目錄下新建兩個文件夾 Debug 和 Release,然后將 C:\Users\lenovo\.cppan\storage\lib\ab45fb78\Debug 目錄下的 .lib 文件全部復制到 C:\Program Files\tesseract\lib\Debug 目錄下;將 C:\Users\lenovo\.cppan\storage\lib\ab45fb78\Release 目錄下的 .lib 文件全部復制到 C:\Program Files\tesseract\lib\Release 目錄下。

 

3)在 鏈接器 -> 輸入 -> 附加依賴項 中,編輯,添加以下兩項:

pvt.cppan.demo.danbloomberg.leptonica-1.76.0.lib
tesseract41d.lib

  完成后,重啟一下電腦,應該就可以在 vs2017 上使用 tesseract 了。  

 

七、一個使用 tesseract 識別數字的例程

  經過一天的折騰,終於可以使用 tesseract 了,寫了一個小程序來試驗一下 tesseract 的效果:

#include <opencv2/opencv.hpp>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <string>

using namespace std;
using namespace cv;

PIX* cvtMat2PIX(Mat imgGray);

int main(int argc, char *argv[])
{
    Mat sourceImage = imread("E:\\visual studio\\Opencv_Test\\Opencv_Test\\1.png",cv::IMREAD_GRAYSCALE);
    if (sourceImage.empty()) {
        perror("Failed to load image!\n");
        exit(EXIT_FAILURE);
    }

    Mat binImage;
    threshold(sourceImage,binImage,90,255,cv::THRESH_BINARY_INV);

    PIX *pixImage = cvtMat2PIX(binImage);                // 將圖片由 Mat 轉換成 Pix 格式

    // 使用 tesseract 進行數字識別
    const char* lang = "eng";
    string numText;
    tesseract::TessBaseAPI *tess = new tesseract::TessBaseAPI;        // 新建 tesseract 基類
    tess->Init(NULL,lang, tesseract::OEM_LSTM_ONLY);        // 初始化
    tess->SetPageSegMode(tesseract::PSM_AUTO);    // 設置識別模式
    tess->SetImage(pixImage);
    numText = string(tess->GetUTF8Text());
    cout << numText << endl;

    waitKey(0);
}


PIX* cvtMat2PIX(Mat imgGray)
{
    int cols = imgGray.cols;
    int rows = imgGray.rows;

    PIX *pixS = pixCreate(cols, rows, 8);

    for (int i = 0; i < rows; i++)
        for (int j = 0; j < cols; j++)
            pixSetPixel(pixS, j, i, (l_uint32)imgGray.at<uchar>(i, j));
    return pixS;
}

 

   所使用的圖片如下:

   識別結果如下:

   效果還算不錯。

 

  因為 tesseract 的安裝過程是在一周前完成了,故而有些地方記不太清楚,圖也不是很多,可能會有一些錯誤,但是還是希望能對有需要的人有一些幫助。

 

 


免責聲明!

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



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