美文网首页
VS2013编译Tesseract 3.04步骤详解

VS2013编译Tesseract 3.04步骤详解

作者: ZYCoderr | 来源:发表于2017-03-31 20:46 被阅读2264次

    最近开始学习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, 进行如下设置:

    • “C/C++” --> "常规” -->”调试信息格式” 设置为 “C7 兼容(/Z7)”`
    • “C/C++” --> "代码生成” -->”启用字符串池” 设置为 “是(/GF)”`
    • “链接器” --> "调试” -->”生成调试信息” 设置为 “是(/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的学习之路还很漫长……

    相关文章

      网友评论

          本文标题:VS2013编译Tesseract 3.04步骤详解

          本文链接:https://www.haomeiwen.com/subject/qguvottx.html