C++在Tesseract-OCR中使用自己訓練的字庫進行字體識別

1.在VS中配置好Tesseract-OCR的使用環境,配置的方法跟Opencv類似,可自行百度!相關配置截圖如下:



2.將訓練好的字庫拷貝到Tesseract-OCR的字庫文件夾tessdata中,如下圖,我訓練的字庫名爲:myself


3.先使用命令行進行調用測試自己訓練的字庫:



4.C++中進行調用Tesseract-OCR識別,代碼實現如下:

//寫本地日誌,在原來的基礎上追加內容!
void savefile(CString  filename, char * info)
{
	//將內容寫至本地保存起來。。。
	int j = 0;
	char ch[8000] = { 0 };
	SYSTEMTIME sys;
	GetLocalTime(&sys);
	j = sprintf(ch, "%s", info);
	j += sprintf(ch + j, "\r\n\r\ntime:%02d/%02d %02d:%02d:%02d.%03d \r\n", sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds);
	CFile file;
	file.Open(filename, CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate, NULL);
	file.SeekToEnd();
	//file.Write(info, strlen(info));
	file.Write(ch, j);
	file.Close();
}

TessBaseAPI ocr;
char* identifyText(char* language = "myself")
{
	remove("D:\\tain.txt");
	ocr.Init(NULL, language, OEM_DEFAULT);
	ocr.SetPageSegMode(PSM_AUTO);//設置自動進行版面分析
	STRING text_out;
	if (!ocr.ProcessPages("D:\\t1.jpg", NULL, 0, &text_out))
	{
		return NULL;
	}
	printf(text_out.string());
	char * ch = (char *)text_out.string();
	savefile("D:\\tain.txt", ch);
	return ch;
}
識別結果:



存在問題:
1.識別的出來的內容不知道怎麼分行,圖片中的內容原本是3行,現在識別出來是在一行的!望懂得怎麼解決的大神指教;
2.對於比用於做字庫訓練圖片大的圖片識別效果的時候效果不是很理想,不懂是不是因爲拿來做訓練字庫的圖片數量太少了,我就用了幾張而已!

發佈了32 篇原創文章 · 獲贊 25 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章