Visual studio 2013中编译Tesseract3.04源码记录
我曾在VS2013的C#工程中试用过Tesseract3.04,但是要在C++工程中使用Tesseract3.04,就需要自行编译Tesseract3.04源码。本文记录在Visual studio 2013中编译Tesseract3.04源码的过程和注意事项。
1. 编译Tesseract3.04源码的前序工作
1.1 安装visual studio 2013
1.2 安装Github windows
1.3 假定编译Tesseract3.04源码的工作在D盘执行,在D盘根目录新建文件夹D:\ tesseract-build
1.4 打开编译Tesseract3.04源码的参考文献
我参考的是在win7/8 64位操作系统下使用vs2013编译tesseract, 感谢原作者!Tesseract在Github的仓库中windows下编译Tesseract 3.03rc-1的编译说明中推荐的是How to build Tesseract 3.03
with Visual Studio 2013。这一篇中需要使用我不熟悉的SVN,故并未参考。
2. 编译Leptonica1.71
新版本的Tesseract依赖新版的Leptonica库, 我们需要把新版的Leptonica编译成需要的lib文件及dll提供给Tesseract调用。版本依赖关系如下:
幸好Github上已有大牛替大家完成这件事,可以使用的有:
https://github.com/charlesw/tesseract-vs2012(charlesw是NuGet中扩展程序A .Net wrapper for tesseract-ocr的作者,我编译Tesseract3.04源码的参考文献中用的是该程序包)
https://github.com/tesseract4java/tesseract-vs2013 (此仓库的作者是Tesseract官方在windows下编译源码Tesseract3.03时推荐博客的作者,本文使用的是该程序包)
2.1启动Git Shell,进入tesseract-build文件夹,输入以下命令
git clone git://github.com/tesseract4java/tesseract-vs2013
2.2 tesseract-vs2013 clone完成后,打开VS 2013 Developer Command Prompt,点击“开始”–>”所有程序”–>”Visual Studio
2013”–>”Visual Studio Tools”–>”VS2013 x64 本机工具命令提示”,如果你用的的是英文版,请输入相应的英文选项,然后输入命令:
msbuild D:\tesseract-build\tesseract-vs2013\build.proj
完成后结果如下图:
2.3 编译完成后,将D:\tesseract-build\tesseract-vs2012\release目录下的include和lib文件夹拷贝到D:\tesseract-build目录下。
3. 编译Tesseract3.04源码
3.1 启动Git Shell,进入tesseract-build文件夹,输入以下命令。clone完成后, Tesseract3.04的源码会在D:\tesseract-build\tesseract目录下。
git clone git://github.com/tesseract-ocr/tesseract.git
3.2 将tesseract-vs2013中的vs2013+64bit_support.patch 文件copy到 D:\tesseract-build\目录下,在git shell中转到D:\tesseract-build\tesseract文件夹下,执行下面命令:
git checkout -b 3.04-vs2013 3.04.00
git am –signoff ../vs2013+64bit_support.patch
执行完上面的命令以后,就可以在下面的路径中看到熟悉的sln文件了:d:\tesseract-build\tesseract\vs2013\tesseract.sln
3.3此时打开tesseract.sln编译,会出现如下错误:
“语法错误”
需要解决字符集问题,找到下面两个文件:
d:\tesseract-build\tesseract-ocr\ccmain\equationdetect.cpp
d:\tesseract-build\tesseract-ocr\ccstruct\linlsq.cpp
用记事本打开它们,然后另存为同名文件,注意编码选择utf-8,然后替换原有文件。
“无法打开源文件”
我没有在网络上找到解决方案,我查看了Github上Tesseract的源码中确实没有上述文件,因此个人认为可能Tesseract在更新过程中移除或者重命名了上述文件,但是Tesseract-VS2013并未同步更新,所以我的处理方式比较暴力,在Tesseract解决方案资源管理器中移除上述不存在的cpp文件。
“无法打开包括文件”
该头文件存在于tesseract/vs2010/port文件夹中,将该头文件拷贝到tesseract/vs2013/port中,或者在现有解决方案中注释掉该头文件均可。
3.4 tesseract.sln中包含libtesseract304和tesseract两个项目。两个项目均需要编译,我选择在x64下编译DLL_Release/DLL_Debug/ LIB_Release/LIB_DEBUG。以DLL_Release为例,编译完成后,在D:\Tesseract-Build\tesseract\vs2013\bin\x64\DLL_Release路径下会出现如下四个文件。
4. Tesseract3.04编译结果验证
编译完成后,我们来初步验证一下编译成果。
4.1 将D:\Tesseract-Build\tesseract\vs2013\bin\x64\DLL_Release上面的四个文件copy到d:\tesseract-build\lib\x64文件夹下,在cmd命令窗口中确认tesseract及其依赖项的版本:
4.2 在d:\tesseract-build\lib\x64文件夹下新建文件夹tessdata,到https://github.com/tesseract-ocr/tessdata下载用于测试的语言文件,我下载的是eng.traineddata,将测试图片也放到该文件夹。在cmd中调用tesseract命令行程序,执行完成后我们会在同一个文件夹下发现一个result.txt文件,结果如下图所示,结果不是特别准确,但是至少证明我们的Tesseract安装成功啦。