[转]VS2015+Tesseract4配置与示例

接上一篇博客:Tesseract4编译,

原文链接:https://blog.csdn.net/andylanzhiyong/article/details/81746904

       上次编译Tesseract4.0后,在“C:/Programe Files(x86)/tesseract/”目录下生成了目录"include","lib","bin",这些就是我们编程需要的头文件和库。没配置之前,感觉挺简单的,无非是一些头文件和库,和opencv配置差不多的。其实一大波坑在等着我.......

        先在网上搜一下别人的配置,大多是直接用的Tesseract4.0安装文件,感觉不适用,看了很多篇文章,貌似找到了一篇靠谱的,原文链接:http://livezingy.com/compilation-tesseract4-in-vs2017-win10/

重点在此,如图:

前面2步整理lib时没问题。

dll感觉不需要那么多,后面再说

在整理头文件时麻烦来了,按照这个目录结构一层层去找,竟然没有“2a”文件夹...........

难道我的编译有问题?应该不会啊,cmake成功,VS里也编译成功,没道理啊......

机智如我,我在"C:Usersusername.cppanstorageobj"目录下用windows查找功能搜索"endianness.h",找到了。

然后在“C:Usersusername.cppanstoragesrc”目录下搜索“src”,悲剧了,找到的还是这个父目录

不知道leptonica的头文件是啥这可咋办?

难道真的是我没编译好?

迫于无奈,又重新编译了一遍,花了好几个小时,再找头文件,还是没找到.......

没辙了,看看别人编译好的头文件和库是哪些吧,又是一顿网络搜索,找到了一篇似乎靠谱的博客:

https://blog.csdn.net/yph001/article/details/78762518

按照这位老铁提供的网址下载了他的头文件和库,他的文件结构如下:

仿佛看到了希望,马上去“C:Usersusername.cppanstoragesrc”下搜索“allheaders.h”

惊喜的是:搜到了!这家伙躲在这个目录下:

然后把这个“src”整个目录拷过来,

还有个config_auto.h这个头文件,直接在“users/用户名/.cppan/”目录下搜“config_auto.h”,

也搜到了,这家伙躲在此处:

把config_auto.h也copy过来。

做到这里,想想也是够坑的,应该是cppan版本不同,然后下载这些文件后解压路径不一样,我们按前辈提供的

路径去找头文件肯定是找不到了。各位前辈说一下主要头文件是什么不就好了嘛。吐血。。。。

OCR识别文字还得有字库,下载链接:https://github.com/tesseract-ocr/tessdata,如图:

我下载了英文和中文简体,建个"tessdata"文件夹存放字库

给大家展示一下我整理的文件结构:(目前不知道动态库是哪些,在运行程序时再找)

头文件结构如下:

leptonica头文件很多,列一部分,注意两个重要头文件(画箭头的):

tesseract头文件也有很多,也列一部分,注意有个重要文件“capi.h”:

lib库全部copy过来:

字库文件夹"tessdata":

找的官网示例代码不能运行,编译一百多个错误,错误原因只有一个:没包含“windows.h”头文件。吐血。。。

福利来了,现贴出我将示例代码略作修改后的代码(代码中路径均为相对路径,没用环境变量):

#include<iostream>
#include <stdio.h>
#include<windows.h>
#include "leptonica/allheaders.h"
#include "capi.h"
using namespace std;


void die(const char *errstr) {
	fputs(errstr, stderr);
	exit(1);
}


void ConvertUtf8ToGBK(char **amp, char *strUtf8)  //转码
{
	int len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUtf8, -1, NULL, 0);
	unsigned short * wszGBK = new unsigned short[len + 1];
	memset(wszGBK, 0, len * 2 + 2);
	MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUtf8, -1, (LPWSTR)wszGBK, len);
	len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
	//char *szGBK=new char[len + 1]; 
	*amp = new char[len + 1];
	memset(*amp, 0, len + 1);
	WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wszGBK, -1, *amp, len, NULL, NULL);
}

int main(int argc, char *argv[]) {
	TessBaseAPI *handle;
	PIX *img;
	char *text = NULL;
	//读取图片,原图像的路径 
	if ((img = pixRead("E:\laplace.png")) == NULL)
		die("Error reading image
");

	handle = TessBaseAPICreate();
	//加载字库及设置语言
	if (TessBaseAPIInit3(handle, "D:/tesseract-4.1.0/tessdata", "eng+chi_sim") != 0)
		die("Error initialising tesseract
");

	//设置图片及识别
	TessBaseAPISetImage2(handle, img);
	if (TessBaseAPIRecognize(handle, NULL) != 0)
		die("Error in Tesseract recognition
");

	if ((text = TessBaseAPIGetUTF8Text(handle)) == NULL)
		die("Error getting text
");

	char *pResult = NULL;
	ConvertUtf8ToGBK(&pResult, text); //对结果转码
	cout << pResult << endl;   //输出OCR识别的文本信息
	delete pResult;

	system("pause");
	TessDeleteText(text);
	TessBaseAPIEnd(handle);
	TessBaseAPIDelete(handle);
	pixDestroy(&img);

	return 0;
}

按需为字库设置环境变量TESSDATA_PREFIX(本示例用的相对路径未用环境变量),值为字库文件的目录。

本示例工程 Tess4Test 文件结构如下:(tessdata为字库文件)

项目配置如下:

此时由于还不知道有哪些动态库,运行时会有错误,如图:

根据这些错误提示去搜相应的dll文件,

tesseract40(d).dll在“C:Program Files (x86) esseractin”目录下搜索到

其它的dll在“C:Users用户名.cppanstoragein”目录下搜索到

一共9个dll放到Debug/Release文件夹下(或者系统目录):

上一张测试图片:

运行后输出结果:

这张中、英文、数字混合的图片识别率在90%以上,还算可以了

到此,配置成功!

如需本示例的打包程序,请至https://download.csdn.net/download/andylanzhiyong/10616943下载。

下载后无需配置任何环境变量,头文件、库、字库都已打包好,只要你电脑装有VS2015就可以正常编译、调试、运行。

*****************  以上为个人吐血整理,堪称全网最详细!如有转载,请标明出处! *******************

另外,目前在网络上搜索Tesseract4的学习资料基本没有,看它的源码头文件中的函数声明,

这几百个函数连个注释都没有,这将又是一个大坑,探索之旅还很漫长。。。。

网友如有Tesseract4的学习资料,还望能发个链接一起互相学习。


---------------------
作者:andylan_zy
来源:CSDN
原文:https://blog.csdn.net/andylanzhiyong/article/details/81807425
版权声明:本文为作者原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12725226.html