前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tesseract 3.05及之后版本编译生成动态链接库DLL

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

作者头像
bear_fish
发布2018-09-19 13:59:59
2.7K0
发布2018-09-19 13:59:59
举报

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文件最后面的

代码语言:javascript
复制
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?看看文件最末尾

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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中的关键语句,如果你感兴趣可以自己去找相关资料。

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年11月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 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
  • 概述
  • 背景
    • CPPAN
      • CMake
      • 准备
      • 编译
        • x86
          • x64
            • 编译错误“文本后缀无效”
            • 小结
            • 参考
            相关产品与服务
            AI 应用产品
            文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档