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, 进行如下设置:

  • “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的学习之路还很漫长……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容