在上一章中我們從源碼生成了tesseract4.0的執行程序exe以及所有的動態庫依賴,這個exe程序其實就和你在網上下載的tesseract安裝包是一樣的,只不過自己編譯的執行程序可以在vs2015環境中運行。
我們把E:\tesseract-4.0.0\build_x86\bin\Release這個目錄添加到環境變量裏去,這個目錄是tesseract.exe所在的目錄。
將tesseract.exe所在目錄添加到環境變量path裏
tesseract4.0的語言庫tessdata也需要添加到環境變量裏,如下爲語言庫
在系統環境變量裏設置語言庫的環境變量
變量名爲:TESSDATA_PREFIX
變量值爲tessdata目錄:E:\tesseract-4.0.0\tessdata
然後我們可以在控制檯測試已經可以成功使用
測試tesseract
測試語言庫tessdata
tesseract --list-langs
接下來就可以在vs2015中使用tesseract了
.h頭文件爲
E:\tesseract-4.0.0\build_x86\api
E:\tesseract-4.0.0\src\wordrec
E:\tesseract-4.0.0\src\vs2010
E:\tesseract-4.0.0\src\viewer
E:\tesseract-4.0.0\src\training
E:\tesseract-4.0.0\src\textord
E:\tesseract-4.0.0\src\opencl
E:\tesseract-4.0.0\src\lstm
E:\tesseract-4.0.0\src\cutil
E:\tesseract-4.0.0\src\classify
E:\tesseract-4.0.0\src\ccutil
E:\tesseract-4.0.0\src\ccstruct
E:\tesseract-4.0.0\src\ccmain
E:\tesseract-4.0.0\src\arch
E:\tesseract-4.0.0\src\api
lib文件爲:tesseract40.lib
動態庫dll由於已經添加到環境變量裏,所以不用管。
一下爲使用實例:
#include<iostream>
#include<string.h>
#include<baseapi.h>
#include <codecvt>
#include<opencv2/opencv.hpp>
#include<fstream>
using namespace std;
using namespace cv;
std::wstring to_wchar_t(std::string str);
std::string to_utf8(std::wstring wstr);
int main()
{
string outText;
string imgPath = "3.jpg";
//定義tesseract
tesseract::TessBaseAPI *ocr = new tesseract::TessBaseAPI();
//把tessdata拷貝到exe的所在目錄,或者設置TESSDATA_PREFIX環境變量
ocr->Init("./tessdata", "chi_sim+eng+chi_sim_vert", tesseract::OEM_DEFAULT);
ocr->SetPageSegMode(tesseract::PSM_AUTO);
//使用OpenCV讀取圖片
Mat image = imread(imgPath,1);
//使用OCR識別圖片
ocr->SetImage(image.data, image.cols, image.rows, 3, image.step);
//ocr獲取的數據直接就是utf8格式的,存入文本文件也是utf8格式
char* u8_array = ocr->GetUTF8Text();
string u8_str= u8_array;
ocr->End();
//utf8轉Unicode
std::wstring w_str = to_wchar_t(u8_str);
//unicode轉ANSI
std::wstring_convert<codecvt<wchar_t, char, mbstate_t>> converter(new codecvt<wchar_t, char, mbstate_t>("CHS"));
string ansi_str = converter.to_bytes(w_str);
cout << ansi_str << endl;
system("pause");
return 0;
}
std::wstring to_wchar_t(std::string str)
{
return std::wstring_convert< std::codecvt_utf8<wchar_t>, wchar_t >{}.from_bytes(str);
}
std::string to_utf8(std::wstring wstr)
{
return std::wstring_convert< std::codecvt_utf8<wchar_t>, wchar_t >{}.to_bytes(wstr);
}
下圖爲程序執行結果,可以看出,識別率非常高。其實tesseract要想提高識別率,應該從圖片源頭做起,利用OpenCV處理下圖片,識別率可以接近百分百。