VS2013编译Tesseract 3.04步骤详解

最近开始学习Tesseract-ocr。Google在GitHub上提供了Tesseract的源码以及现成的语言训练包。然而最新版本的Tesseract 4.0需要VS2015及以上版本的支持, 而提供的语言训练包只支持4.00和3.04两个版本的Tesseract。由于工作需要, 不能安装VS2015, 因此为了能直接使用官方提供的训练包,我选择在VS2013上编译Tesseract 3.04版本。
  然而, 故事不可能就这么简单。 在这个安装和编译过程中我踩了很多的坑, 折腾了一整天才将它成功编译。这是我第一次在简书写文, 事实上我之前也没有任何写博文的经验, 所以此文可能会有许多的问题和不足,还请各位多多批评指正。其实这是一篇我用来练手Markdown的文章

  • 第一步: 安装Git

这一步我就不再多说了。 最简单的办法就是打开软件管家, 搜索Git, 然后安装即可。

  • 第二步:获取源文件依赖文件

为什么不直接下载源文件然后编译呢? 当然是因为编译不过呀喂!这是我踩的第一个坑。为了避免麻烦, 我们直接先下载好依赖文件。
依赖文件的GitHub地址在这里 。 这里我们可以选择手动下载,但既然我们使用了Git, 所以还是用Git来下载吧。
首先在你想要的位置新建一个目录用来存放文件。 我选择的位置是F:\tesseract-build。
接着打开命令行, 切换到tesseract-build文件夹下, 执行下面的指令:

git clone https://github.com/charlesw/tesseract-vs2012.git

clone完成后, 在tesseract-build会出现名为tesseract-vs2012的文件夹。进入文件夹, 打开tesseract.sln工程文件, 编译运行……
别急,先深吸一口气。因为接下来你可能会遇到一系列的问题。 没关系, 我会一一列出并给出解决办法。
首先你可能会看到这个错误:


这个问题是VS2013的兼容性造成的。 解决方法:右击解决方案资源管理器中的liblept-171, 进行如下设置:

 1. “C/C++ --> "常规” -->”调试信息格式” 设置为 “C7 兼容(/Z7)”`
 2. “C/C++ --> "代码生成” -->”启用字符串池” 设置为 “是(/GF)”`
 3. “链接器” --> "调试” -->”生成调试信息” 设置为 “是(/DEBUG)”`

然后再编译, 出现了新的错误:


这个是由于文件编码的原因造成的。 解决办法:

 1. 点击“文件” --> “高级保存选项”
 2. 将编码改为`Unicode(UTF-8 带签名) - 代码页 65001` (提示: 在选项的最开始的地方)

继续编译, 发现出现出现下面的错误:


以及


解决办法:
跳到问题所在的行, 将声明变量的类型由l_unit32改为int
继续编译, 已经没有没有报错了, 但弹出了这个警告框:


不要慌。 到了这一步,你与这个工程的战斗已经结束了。 你可以选择点击确定, 关掉工程, 进入后续步骤。
接下来, 找到你的VS2013安装目录, 进入下面的文件夹:



打开VS2013 开发人员命令提示, 切换到tesseract-vs2012所在的文件夹, 执行下面的指令

msbuild build.proj

然后就会开始编译过程。 经过两到三分钟的编译后, 看到这个提示:


说明你成功了。关掉命令行, 进入tesseract-build\tesseract-vs2012目录, 如果你细心的话会发现里面多出了一个release文件夹。 点进入里面有includelib两个文件夹。 我们辛苦了这么久, 就是为了它们。接下来你需要:

 1.  进入tesseract-build\tesseract-vs2012, 将vs2013+64bit_support.patch文件复制到tesseract-build目录下
 2.  进入tesseract-build\tesseract-vs2012\release, 将include文件夹和lib文件夹复制到tesseract-build目录下 
 3.  将tesseract-build\lib\Win32里的内容全部拷贝到tesseract-build\lib

这时你的tesseract-build目录中应该有下面这些东西:


  • 第三步 下载源码, 打补丁, 编译源码

辛苦了这么久, 终于开始下载源码了。这一步就不要手动下载了, 因为等下需要用到git仓库。打开命令行, 切换到tesseract-build文件夹, 输入下面的指令:

git clone https://github.com/tesseract-ocr/tesseract.git

克隆完毕后你的tesseract-build文件夹下会多出一个tesseract文件夹, 这正是Tesseact的源码。
然而实际上, 我们克隆下来的是Tesseract 4.0的源码, 而我们需要的是3.04, 所以需要用checkout指令进行版本切换。右键点击tesseract文件夹,运行git bash。 在弹出的git命令行中输入:

git checkout -b 3.04-vs2013 3.04.00

之后你会发现, tesseract文件夹的内容已经与之前不一样了, 说明我们已经将版本切换到了3.04
继续在命令行中输入

git am --signoff < ../vs2013+64bit_support.patch

这句话是将tesseract-build目录下的vs2013+64bit_support.patch补丁打到tesseract工程内。但这时你会发现又出错了:


git需要知道你是谁。 解决这个问题你需要进入tesseract\git文件夹(这个文件夹默认是隐藏的, 所以你可能需要先显示隐藏文件),修改config文件, 在最下面写上这些内容;

[user]
     email = xxx@xx.com
     name = xxx

这里写你的GitHub邮箱跟用户名。 注意不要乱填
填完之后保存, 再执行一次之前的指令, 补丁就可以顺利打上了。
到了这一步, 你离成功已经近在咫尺了。 打开tesseract文件夹, 里面会比之前多出一个vs2013文件夹。 进入文件夹, 打开tesseract.sln工程文件。进入之后不要着急, 先将tesseract设为启动项, 然后进行编译。
编译过程如果出现下面的警告:


解决办法:找到tesseract中的equationdetect.cpp文件,将代码中的:

static const STRING kCharsToEx[] = {"'", "`", "\"", "\\", ",", ".",  
    "〈", "〉", "《", "》", "」", "「", ""};

改为

static const STRING kCharsToEx[] = { "'", "`", "\"", "\\", ",", ".",  
    "<", ">", "<<", ">>", "" };

再次编译。 在编译完成后会弹出这样的提示框:



这个liblept171d.dll在哪呢?在tesseract-build\lib文件夹中。 为了让项目能找到这个文件, 我们把tesseract-build\lib添加到环境变量PATH中。再次编译,成功。然后把调试器切换到DLL_Release, 再次编译, 依然成功!现在你可以在tesseract-build\tesseract\vs2013\bin\Win32\DLL_Debug以及tesseract-build\tesseract\vs2013\bin\Win32\DLL_Release两个文件夹中分别找到对应的exe文件。 它们就是我们的Tesseract执行文件。 也就是说, 源码终于编译成功了!

至此, 整个编译过程就结束了。 一个简单的编译就花费了我这么多的功夫, 我的Tesseract的学习之路还很漫长……



作者:ZYCoderr
链接:http://www.jianshu.com/p/44c2946837b9
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值