按照以前的经验,编译Tesseract 3.05就是去GitHub上找一个已经解决了依赖关系(如Leptonica等)的VS2015解决方案,然后在VS中编译生成?是不是最痛苦的地方就是找不到这样的解决方案,或者在自己的Windows中不能正常编译?
Tesseract官方对3.05和之后版本在Windows下的编译提供了新的方法,只需要简单几步就能万无一失编译出自己想要的libtesseract.dll或者tesseract.exe!下面主要介绍如何在Windows下编译生成32位和64位的动态链接库DLL,即libtesseract305.dll。
本文主要参考Tesseract官方wiki,链接见参考。
编译的最大问题就是如何解决依赖,和创建兼容的解决方案了;Tesseract为我们带来了CPPAN和CMAKE这两个工具来解决这两个问题。查看新的Tesseract源码,你会发现两个不太熟悉的文件cppan.yml
和CMakeLists.txt
,就是靠的这两个文件!
CPPAN之于C++就像Maven之于Java,如果你用过Maven,想必马上就能明白CPPAN的用处了。CPPAN可以理解为C++的包管理器,包含了众多依赖包,只需要向CPPAN指定依赖包,CPPAN就会帮你下载好需要的依赖包和相关配置。怎么指定?那就是通过cppan.yml
文件了。
Tesseract中cppan.yml
文件最后面的
dependencies:
private:
# tesseract uses leptonica only internally
# and does not expose its interface to users
pvt.cppan.demo.leptonica: master
就是指定依赖,这里自然就是Leptonica;后面的master
即版本,这里需要最新版,所以直接就是master
了。
细心的读者可能会问,那libpng,libtiff等依赖呢?现在只解决了Tesseract对Leptonica的依赖,那Leptonica对libpng等的依赖呢?其实这个也早已解决,去GitHub看看Leptonica的源码,是不是也有熟悉的cppan.yml
?看看文件最末尾
dependencies:
pvt.cppan.demo.gif: 5 # any 5.x.x version
pvt.cppan.demo.jpeg: "*" # any non branch version
pvt.cppan.demo.png: 1
pvt.cppan.demo.tiff: 4
pvt.cppan.demo.webp: "*" # any non branch version
是不是这些依赖也解决了?
CMake对于Linux开发者会比较熟悉,但对于Windows还是比较新鲜的吧。CMake的全称是“cross platform make”,简单来说CMake通过读取CMakeLists.txt
配置文件,在Linux下就能生成Makefile,而在Windows下,就能生成Visual Studio项目和解决方案,神奇吧?
关于CMake的细节这里就不多说了,只简单说说和本文相关的。CPPAN只是帮我们下载好了依赖,对依赖的配置就是交给CMake了,准确来说,是在CMakeLists.txt
中配置的。CMakeLists.txt
中指定在解决方案内创建哪些项目,项目间的依赖关系,include哪些文件,VS编译时生成静态库、动态库还是可执行文件;总的来说,就是CMake根据CMakeLists.txt
的要求,给你生成指定版本(Visual Studio版本,x86,x64)的Visual Studio解决方案,在Visual Studio中打开就能用。
整个过程除Visual Studio 2015外,还需要一些软件的协助:
照着wiki中的来
Bash
git clone https://github.com/tesseract-ocr/tesseract tesseract
cd tesseract
cppan
mkdir build
cd build
cmake ..
这时在build文件夹内就出现了tesseract.sln
文件,双击就可以在Visual Studio 2015(Tesseract 3.05要求Visual Studio 2015)内打开解决方案,选择“Debug”或“Release”,然后在解决方案资源管理器中tesseract项目(不是tesseractmain项目)上点击右键,选择“生成”,等待编译完成就会看到输出
3> 正在创建库 C:/test5/tesseract/build/Release/tesseract305.lib 和对象 C:/test5/tesseract/build/Release/tesseract305.exp
3> tesseract.vcxproj -> C:\test5\tesseract\build\bin\Release\tesseract305.dll
========== 全部重新生成: 成功 3 个,失败 0 个,跳过 0 个 ==========
tesseract305.dll生成成功啦!
上面生成的tesseract305.dll只能用于32位版(并不是只能用于32位的Windows,而是需要用到此DLL的环境),如果需要64位版,只需要修改上述x86版的其中一个地方,完整的命令为
Bash
git clone https://github.com/tesseract-ocr/tesseract tesseract
cd tesseract
cppan
mkdir build
cd build
cmake -G "Visual Studio 14 Win64" ..
-G
即指定CMake的generator,Visual Studio 14
即Visual Studio 2015,Win64
即64位。
编译时可能会遇到
文本后缀“銆”无效;未找到文文本运算符或文本运算符模板“operator """"銆”
的错误,不要慌,这里只是文件编码问题,由来已久的UTF-8和Windows简体中文版的GB2312问题。双击此错误会跳到出错的文件,这时在Visual Studio菜单栏上点击“文件”->“高级保存选项”,在“编码”下拉框选择“简体中文(GB2312)”,然后“确定”即可。重新编译就没问题啦!
整个过程是不是异常简单?不仅如此,这种方法还不会遇到Tesseract或者依赖库版本过老的问题(因为全都用的master分支)。这里没有详述CMakeLists.txt
中的关键语句,如果你感兴趣可以自己去找相关资料。