C++在Tesseract-OCR中使用自己训练的字库进行字体识别

本文介绍如何在Visual Studio中配置Tesseract-OCR环境,并使用自定义字库进行文字识别。包括配置步骤、命令行及C++代码调用方法,并讨论了识别效果存在的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.对于比用于做字库训练图片大的图片识别效果的时候效果不是很理想,不懂是不是因为拿来做训练字库的图片数量太少了,我就用了几张而已!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值