Tesseract 3.05及之后版本编译生成动态链接库DLL

https://www.polarxiong.com/archives/Tesseract-3-05%E5%8F%8A%E4%B9%8B%E5%90%8E%E7%89%88%E6%9C%AC%E7%BC%96%E8%AF%91%E7%94%9F%E6%88%90%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93DLL.html

概述

按照以前的经验,编译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.ymlCMakeLists.txt,就是靠的这两个文件!

CPPAN

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

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外,还需要一些软件的协助:

  • Git(不用也可以,直接下载.zip的Tesseract源码)
  • CPPAN(加入PATH)
  • CMake(加入PATH)

编译

x86

照着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生成成功啦!

x64

上面生成的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中的关键语句,如果你感兴趣可以自己去找相关资料。

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

Linux系统crontab备份数据库执行不成功?可能是百分号%在作怪!

之前博客分享过一篇《Linux/vps 本地七天循环备份和七牛远程备份脚本》,我自己也一直在用。某天检查备份的时候,突然发现数据库的备份的压缩包是空的! 看了下...

33840
来自专栏大大的微笑

ZOOKEEPER集群搭建及测试

①. zk是由java编写的需要java运行环境,所以大家首先要安装JDK 具体安装步骤,不再赘述      ②. 首先进入zk的conf目录,将zoo_sam...

328100
来自专栏乐沙弥的世界

Linux 下安装及配置heartbeat

a、配置主机host解析 b、配置等效验证 c、高可用的相关服务配置(如httpd,myqld等),关闭自启动 d、如需要用到共享存储,还应配置相关...

54840
来自专栏我的博客

Zend Studio 配置xdebug

写在前面:http://my.oschina.net/caoge/blog/118725 注意事项: 1.http://www.xdebug.org/downl...

32430
来自专栏杨建荣的学习笔记

10g,11g中数据库静默安装中的细小差别(r6笔记第85天)

数据库软件的安装根据工作需要主要有以下几种方式,使用oui是普遍的图形界面方式,还有两种是不依赖图形界面的,一种为静默安装,另外一种为克隆安装。 静默安装的时候...

30340
来自专栏小狼的世界

Analog使用中的一些技巧和总结

Analog是一款用来快速处理日志的开源工具,具有很高的效率,但是生成的结果并不美观,本文就analog使用过程中的一些问题进行总结,讨论如何对analog进行...

10510
来自专栏SpringBoot 核心技术

第四十三章: 基于SpringBoot & RabbitMQ完成TopicExchange分布式消息消费

466150
来自专栏Felix的技术分享

spdlog源码学习

42450
来自专栏JetpropelledSnake

ELK学习笔记之Logstash和Filebeat解析对java异常堆栈下多行日志配置支持

logstash官方最新文档。 假设有几十台服务器,每台服务器要监控系统日志syslog、tomcat日志、nginx日志、mysql日志等等,监控OOM、内存...

76510
来自专栏生信宝典

生信人写程序2. Editplus添加Perl, Shell, R, markdown模板和语法高亮

前言 “工欲善其事必先利其器”,生信工程师每天写代码、搭流程,而且要使用至少三门编程语言,没有个好集成开发环境(IDE,Integrated Developme...

39680

扫码关注云+社区

领取腾讯云代金券