Tesseract4.0+VS2017+win10源码编译攻略
本文记录以下内容:一,记录我目前在win10 X64和VS2017的环境下成功编译Tesseract4.0(目前最新的版本20180106)的一种方式;二,记录在VS2017 C++工程中调用Tesseract4.0的方法;三,记录编译和调用Tesseract4.0过程中踩到的坑和相应的解决方案或看法。
本文编译好的库文件已上传至CSDN,需要的同学请自取:https://download.csdn.net/download/southgater/10416461
谷歌云盘下载链接(The
down load link of the compiled version 4.1 with training
tools):https://drive.google.com/file/d/1ALfBsy5C2l9vJkJ_treAqCvcwS7cfoLX/view?usp=sharing
编译Tesseract4.0之前的准备工作
1 下载最新的CPPAN版本。解压缩后,将cppan.exe所在的路径添加到系统变量中;
2 下载cmake,本文用的是cmake-3.10.1-win64-x64,将cmake.exe所在的路径添加到系统变量中;
3 下载Tesseract源码,本文用的是tesseract-master(20180106).
在win10 X64和VS2017的环境下编译Tesseract4.0
1 参考Tesseract给出的编译攻略:Compiling#windows,如下图所示:
在命令行中进入到tesseract-master的解压目录下,本文路径为D:\Tesseract4\tesseract-master,依次执行如下命令:
1 2 3 4 5 |
cppan mkdir build && cd build cmake .. -G "Visual Studio 15 2017 Win64" |
2 上述命令执行完成后,在D:\Tesseract4\tesseract-master\build目录下会生成tesseract.sln,管理员权限打开并编译。
一般这一步都会因为字符集的问题出错,我遇到的错误与pango-language-sample-table.h和equationdetect.cpp这两个文件有关, 解决方案:
打开pango-language-sample-table.h(文件路径 C:\Users\username\.cppan\storage\src\6d\18\4aef\pango),打开VS2017的“高级保存选项”选择”Unicode(UTF-8 带签名)”并保存;
打开equationdetect.cpp(文件路径 D:\Tesseract4\tesseract-master\ccmain),打开VS2017的“高级保存选项”选择”简体中文(GB2312-80)”并保存;
上述处理完成后,可以顺利完成编译。那么VS2017的”高级保存选项”在哪里呢?本文后面的踩坑记录中会有说明。
3 编译完成后,在“解决方案资源管理器”中点选“解决方案 tesseract”–>“CMakeTargets”–>“INSTALL”,单击右键,在出现的菜单中选择“生成”。这里再提醒一下,因为Tesseract默认的安装目录是C盘,因此需要管理员权限打开编译才可以安装成功。Debug和release模式下需要分别执行上述步骤,默认的安装内容和路径如下图:
在VS2017 C++工程中调用Tesseract4.0
在VS中调用Tesseract4.0是一个十分复杂的过程,经过百折不挠的尝试,我终于在VS2017 C++工程中成功调用了Tesseract4.0,步骤如下:
1. 找到所有依赖lib文件并整理
编译tesseract.sln并安装之后,在C:/Program Files/tesseract/lib路径下仅有tesseract400.lib和tesseract400d.lib,但在工程中调用Tesseract4.0时,仅有这两个文件是不够的,为了方便调用,我们要找到其他的lib文件,它们在这里:C:\Users\username\.cppan\storage\lib,包含重要的pvt.cppan.demo.danbloomberg.leptonica-1.74.4.lib。
在C:/Program Files/tesseract/lib路径下分别创建Debug和Release文件夹,将编译得到的所有lib文件分别拷贝到新建的Debug和Release文件夹中。
2.找到所有依赖dll文件并整理
在C:/Program Files/tesseract/bin路径下仅有tesseract400.dll和tesseract400d.dll,其他的dll文件在这里:D:\Tesseract4\tesseract-master\build\bin。在C:/Program Files/tesseract/bin路径下分别创建Debug和Release文件夹,将编译得到的所有dll文件分别拷贝到新建的Debug和Release文件夹中。
3. 找到leptonica所需要的头文件并整理
在C:/Program Files/tesseract/include路径下仅有tesseract的头文件,而调用Tesseract4.0也需要leptonica的头文件,它们在这里:C:\Users\username\.cppan\storage\src\2a\b4\6dbf\src。在C:/Program Files/tesseract/include路径下新建leptonica文件夹,将leptonica相关的所有头文件都拷贝到新建的leptonica文件夹中。
另外将endianness.h也拷贝到新建的leptonica文件夹中,它在这里:C:\Users\username\.cppan\storage\obj\2a\b4\6dbf\build\08a5fd0d\cppan\2ab46dbf
4. 新建VS2017 C++工程,下载https://github.com/cppan/tesseract_example/blob/master/with_cppan/main.cpp并添加到该工程中。
4.1 项目属性—>配置属性–>C/C++–>常规,在“附加包含目录”中添加:
C:\Program Files\tesseract\include\leptonica;C:\Program Files\tesseract\include\tesseract;C:\Program Files\tesseract\include;
4.2 项目属性–>链接器–>常规,在”附加库目录”中添加C:\Program Files\tesseract\lib\Debug;C:\Program Files\tesseract\lib;C:\Program Files\tesseract\lib\Release
4.3 项目属性–>链接器–>输入,在“附加依赖项”中添加pvt.cppan.demo.danbloomberg.leptonica-1.74.4.lib;tesseract400d.lib;
4.4 在工程目录下新建文件夹tessdata,到tesseract下载相应的语言文件,copy到tessdata文件目录下。
5. 完成上述动作后,编译,会出现如下错误:
1 2 3 |
c:\program files\tesseract\include\tesseract\unichar.h(164): error C3646: “UTF32ToUTF8”: 未知重写说明符 c:\program files\tesseract\include\tesseract\unichar.h(164): error C2059: 语法错误:“const” c:\program files\tesseract\include\tesseract\unichar.h(164): error C2238: 意外的标记位于“;”之前 |
针对上述错误,我在这里https://github.com/tesseract-ocr/tesseract/issues/1045找到了答案,解决方案为在#include <allheaders.h>之前添加以下内容:
1 2 3 4 |
#include <string>//新增 using std::string;//新增 #include <allheaders.h> // leptonica main header for image io #include <baseapi.h> // tesseract main header |
踩坑记录
1. Visual Studio 2017 的“高级保存选项”
Visual Studio提供高级保存选项功能,它能指定特定代码文件的编码规范和行尾所使用的换行符。在Visual Studio 2017中,该命令没有默认显示在“文件”菜单中。用户需要手工设置,才能显示该命令。操作方法如下:
1.1 单击“工具”|“自定义”命令,弹出“自定义”对话框。
1.2 单击“命令”标签,进入“命令”选项卡。
1.3 在“菜单栏”下拉列表中,选择“文件”选项。
1.4 单击“添加命令”按钮,弹出“添加命令”对话框。
1.5 在“类别”列表中,选择“文件”选项;在“命令”列表中,选择“高级保存选项”选项。
1.6 单击“确定”按钮,关闭“添加命令”对话框。
1.7 选中“控件”列表中的“高级保存选项”选项,单击“上移”或者“下移”按钮,调整该命令的位置。
1.8 单击“关闭”按钮,完成“高级保存选项”命令的添加操作。
2. 关于tesseract-4.00.00dev和tesseract-4.00.00alpha
tesseract-ocr在Github上可以通过tags选择不同的版本,其中包含tesseract-4.00.00dev和tesseract-4.00.00alpha。
我尝试过编译这两个版本,但遇到了很多问题,最后我选择编译Tesseract-master版本。在这里记录一下我遇到的主要问题和我的看法,供大家参考。
问题点1:执行cppan时报错:
1 2 3 4 5 |
D:\Tesseract4\tesseract-4.00.00dev>cppan Cannot get dependencies from local database: Package 'pvt.cppan.demo.leptonica' not found. Requesting dependency list... Unresolved package or its dependencies: pvt.cppan.demo.leptonica-master Some packages (1) are unresolved |
tesseract的isssue中有人对此提出疑问:https://github.com/cppan/cppan/issues/11
在tesseract源码中打开D:\Tesseract4\tesseract-4.00.00dev\cppan.yml文件搜索leptonia,将“pvt.cppan.demo.leptonica: master”注释并添加“pvt.cppan.demo.danbloomberg.leptonica: 1.74.2”后保存,做此修改后cppan可以顺利执行完成。
问题点2:编译tesseract.sln时报错:
1 |
fatal error C1083: 无法打开包括文件: “allheaders.h”: No such file or directory |
tesseract的isssue中也有很多关于此问题点的反馈,但都没有明确的解决方案。我的编译环境下,allheaders.h在C:\Users\user name\.cppan\storage\src的某个子文件夹下,但CMakeLists.txt中出现的却是”cppan”,因此tesseract.sln找不到cppan下载的依赖项。根据allheaders.h所在的路径和tesseract的CMakeLists.txt猜测这两个版本的CMakeLists.txt有BUG,而这些BUG在master版本中已修复,因此我最后选择编译master版本。
3. 彻底删除卸载VS2013
在此之前,我用的是VS2013,因为opencv和tesseract的新版本都建议用VS2015或VS2017,因此我安装了VS2017。我想应该有不少同学跟我一样,在尝试更新VS版本时总会发现前任版本没有完全卸载而导致一些莫名其妙的问题。经过学习,我使用如下方式对彻底卸载VS2013,然后我顺利的用上了VS2017:
小白想问一下这个,编译完成后右键单击”INSTALL”是什么意思
我把原文改了一下,你看看现在能看懂吗?:)
楼主能发一份编译好的库给我吗?1018578324@qq.com 真的是不胜感激啊,我的编译错误真的是百花齐放啊!
本文编译好的库文件已上传至CSDN,需要的同学请自取:https://download.csdn.net/download/southgater/10416461
楼主,小小白想请教一下,我按照上面的步骤把cppan解压了,然后加到了Path里,执行的时候报错“Cannot open file: C:Usersusername.cppancppan.yml”,然后我把tesseract-master文件里的cppan.yml加到了C:Usersusername.cppan目录下(这个目录原来为空的),执行的时候就不动了,应该怎么解决这个问题呀?
我觉得可能是编译时某些文件路径有错,如果方便的话,请附上编译时cmd的截图,这样便于判断错误在哪里。
楼主,我下载了你的库然后按照你下面的方式加进去编译,编译可以通过,但是运行不了,报错:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 “public: virtual __thiscall tesseract::TessBaseAPI::~TessBaseAPI(void)” (??1TessBaseAPI@tesseract@@UAE@XZ),该符号在函数 _main 中被引用 tesseract_test D:\opencv_test\tesseract_test\tesseract_test\main.obj 1
请问怎么解决这个问题?是不是要用x64模式;
是的,我发布的库文件仅适用于X64模式
你好 小编 用你的库 编译通过 但运行时显示 无法找到pvt.cppan.demo.danbloomberg.leptonica-1.74.4.lib;tesseract400d.lib; 你遇到过此问题吗 万分感谢
( 其他步骤均是按照你的弄得 所以的都一样 但最后运行出现这个问题)
你好,首先请再次确认项目库文件路径是否正确;其次可以尝试把提示无法找到的库文件拷贝到当前项目的路径下。
1
请问博主安装完成后,识别一个图片大约多长时间啊?我是可以下一个和上面类似的一张图片,大约用了30S,请问这个是我电脑的问题吗?
我看不到你的图片哦,我识别这篇文章中的测试图片不到1s
博主,链接里编译的库好像有问题
应该不会哦,楼上有同学调用成功的。你可以具体描述一下问题类型,看看我是否能帮上忙。
请问博主,vs运行时老是报这种错误,命令行运行时就没问题,该如何解决呢
Please make sure the TESSDATA_PREFIX environment variable is set to your “tessdata” directory.
Failed loading language ‘chi_sim’
Tesseract couldn’t load any languages!
Could not initialize tesseract.
VS运行时,需要在vcxproj同目录下新建tessdata文件夹,并在文件夹里放chi_sim语言包。或者可以设置环境变量TESSDATA_PREFIX,值是语言包所在路径。
楼主好,为什么我在执行转到master目录下都提示出错呢?
可以把问题描述的再具体一些吗?
爺您這踩坑寫得真好
給您跪了
哈哈,我当你说的是真的
牛的一批,这么多教程里,讲的最明白的