热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Tesseract3.05及之后版本编译生成动态链接库DLL

https:www.polarxiong.comarchivesTesseract-3-05%E5%8F%8A%E4%B9%8B%E5%90%8E%E7%89%88%E6%9C%A

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 userspvt.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 versionpvt.cppan.demo.jpeg: "*" # any non branch versionpvt.cppan.demo.png: 1pvt.cppan.demo.tiff: 4pvt.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中的关键语句,如果你感兴趣可以自己去找相关资料。


参考


  • Compiling · tesseract-ocr/tesseract Wiki
  • DanBloomberg/leptonica: Leptonica.org is an open source site containing software that is broadly useful for image processing and image analysis applications
  • cppan/intro.md at master · cppan/cppan
  • 解决CMake导致的"模块计算机类型x64与目标计算机类型X86冲突"的问题
  • 解决Visual Studio编译错误"文本后缀无效; 未找到文文本运算符或文本运算符模板"

推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 【MEGA DEAL】Ruby on Rails编码训练营(97%折扣)限时特惠!
    本文介绍了JCG Deals商店提供的Ruby on Rails编码训练营的超值优惠活动,现在只需29美元即可获得,原价为$1,296。Ruby on Rails是一种用于Web开发的编程语言,即使没有编程或网页设计经验,也能在几分钟内构建专业的网站。该训练营共有6门课程,包括使用Ruby on Rails进行BDD的课程,使用RSpec 3和Capybara等。限时特惠,机会难得,赶快行动吧! ... [详细]
author-avatar
翔溢_142
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有