在C++中使用tesseract4.0

在上一章中我們從源碼生成了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處理下圖片,識別率可以接近百分百。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章