Tesseract4.0+VS2017+win10源码编译攻略

本文记录以下内容:一,记录我目前在win10 X64和VS2017的环境下成功编译Tesseract4.0(目前最新的版本20180106)的一种方式;二,记录在VS2017 C++工程中调用Tesseract4.0的方法;三,记录编译和调用Tesseract4.0过程中踩到的坑和相应的解决方案或看法。

本文编译好的库文件已上传至CSDN,需要的同学请自取:https://download.csdn.net/download/southgater/10416461

Tesseract4.0 test result

编译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,如下图所示:

compiling on windows

   在命令行中进入到tesseract-master的解压目录下,本文路径为D:\Tesseract4\tesseract-master,依次执行如下命令:  

  2 上述命令执行完成后,在D:\Tesseract4\tesseract-master\build目录下会生成tesseract.sln,打开并编译。

一般这一步都会因为字符集的问题出错,我遇到的错误与pango-language-sample-table.hequationdetect.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”,单击右键,在出现的菜单中选择“生成”。Debug和release模式下需要分别执行上述步骤,默认的安装内容和路径如下图:

install path

在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. 完成上述动作后,编译,会出现如下错误:

针对上述错误,我在这里https://github.com/tesseract-ocr/tesseract/issues/1045找到了答案,解决方案为在#include <allheaders.h>之前添加以下内容:

踩坑记录

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。

tesseract4.0_dev&tesseract4.0_alpha

我尝试过编译这两个版本,但遇到了很多问题,最后我选择编译Tesseract-master版本。在这里记录一下我遇到的主要问题和我的看法,供大家参考。

问题点1:执行cppan时报错:

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时报错:

  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:

3.1. 解压vs2013的安装包(iso格式)。
3.2. 右键单击windows图标,选择命令提示符(管理员),cd到解压后的文件夹
3.3. vs_ultimate.exe /uninstall /force
这里的“vs_ultimate.exe”也有可能是vs_community.exe或vs_professional.exe,由当前的安装版本决定。

Comments

  1. By 风雨之圣

    回复

    • By livezingy

      回复

  2. By 蝉迷的夏季

    回复

    • By livezingy

      回复

  3. 回复

    • By livezingy

      回复

  4. By 吧啦吧啦大队

    回复

    • By livezingy

      回复

  5. By 宋国伟

    回复

    • By livezingy

      回复

  6. By 卫乾

    回复

  7. By 李文波

    回复

    • By livezingy

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Fork me on GitHub