Tesseract 3.05及之后版本编译生成动态链接库DLL
概述
按照以前的经验,编译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
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中的来
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:test5tesseractbuildbinReleasetesseract305.dll
========== 全部重新生成: 成功 3 个,失败 0 个,跳过 0 个 ==========
tesseract305.dll生成成功啦!
x64
上面生成的tesseract305.dll只能用于32位版(并不是只能用于32位的Windows,而是需要用到此DLL的环境),如果需要64位版,只需要修改上述x86版的其中一个地方,完整的命令为
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编译错误"文本后缀无效; 未找到文文本运算符或文本运算符模板"
您好 Penguin,我在做一个端到端的视频质量评估方案,涉及了tesseract中的文字识别,但编译tesseract库遇到不少问题,您可以给我发一个tesseract.dll文件,方便我能够直接调用tesseract接口实现文字识别。非常感谢您!!!
大佬 求一份DLL 万分感谢!
大神,
能不能发下32位和64位dll都想要一个?
非常感谢!
希望也能发一份4.0的DLL给我。谢谢了
求一个64位的exe或者dll,谢谢
您好,能发我一份64位的dll吗
您好 可以发给我一份编译好的dll么
你好。可以发一份64和32的dll吗
抱歉这段时间太忙了
已经发到你的邮箱了,请查收~
你好。也可以给我发一份64和32的dll吗
大神能发一份最新版(4.0.0.1)的32, 64 dll给我吗,謝謝
抱歉电脑暂时没有编译环境了只有编译好的3.05的了...
大神能发一份3.05的32, 64 dll给我吗,急用啊。还有我用了3.02版本解析eng都是好的,但解析chi-sim一直会报这个错,pytesseract.pytesseract.TesseractError: (3221225477, ''),是否必须update到3.05版?
已经发到你的邮箱了,请查收~
大佬,我也需要个64的dll,谢谢大佬 大佬QQ留一下 我配置环境老出问题 ,
已经发到你的邮箱了,请查收~
博主,麻烦把32bit和64bit的dll发我下啊,多谢了!
已经发到你的邮箱了,请查收~
32位和64位的dll能不能发我一份 感谢
已经发到你的邮箱了,请查收~
大神32位和64位的dll可否都发一份给我 谢谢!!!
已经发到你的邮箱了,请查收~
大神能发一份64位的3.05的动态库到我邮箱吗,谢谢
已经发到你的邮箱了,请查收~
能发一个64位dll给我吗?谢谢。
已经发到你的邮箱了,请查收~
大神,
32位和64位dll都想要一个,可以吗?拜谢!
已经发到你的邮箱了,请查收~
Tesseract 3.05,,正在找这个,麻烦能发一个dll给我。谢谢
已经发到你的邮箱了,请查收~
大神求一个 x64的ddl
已经发到你的邮箱了,请查收~
大神,我看了你的博客编译了Tesseract 4,然后在编译好的debug文件夹里生成了tesseract.exe和tesseract40d.dll,然后我试着用命令行方式跑了一下tesseract.exe是好用的,但是用python代码load dll总是报错,OSError: [WinError 126] 找不到指定的模块,您知道是什么原因吗?我哪步做错了?
问题解决了,我把所有dll复制到了python根目录就好了
大神还有一个问题,编译版的Tesseract能训练吗
训练是用另外提供的工具,会训练出来一个.data文件,然后加载dll后调用API指定.data文件,就是用你的训练结果来识别啦~
测试
Release模式编译我也试了一次,还是不行
要win7 64位的dll
已经发到你的邮箱了,请查收~
您好,很高兴看到您的文章,就是有一个问题,这种直接编译好的dll文件,可以识别汉字么,如果通过安装Tesseract ,可以下载chi_sim.traineddata或在安装时勾选简中的语言包,dll可以做到么,不是很懂..,还有可以发一份Tesseract-OCR4.0版本的.dll文件么, 谢谢您的分享
通过dll的API是可以加载语言包文件然后识别的,比如加载中文语言包识别汉字,你只需要在调用API init的时候指定data文件就好啦,https://github.com/tesseract-ocr/tesseract/wiki/APIExample#c-api-in-python这里有个例子。
dll已经发到你的邮箱啦~
非常感谢您的解答以及分享,谢谢♪(・ω・)ノ
蟹蟹
能不能发一下编译好的.dll文件,,表示用不好cmake
蟹蟹大神
已经发到你的邮箱了,请查收~
我cmake失敗了QQ 可以直接跟你要dll檔嗎?
gmail貌似阻止了我要发的附件,可以有国内邮箱么?或者其他方式?直接给我发邮件就好了~
您好,能不能也给我发一份,我使用cmake的时候它报错。。。
已经发到你的邮箱了,请查收~
您好 可以发给我一份编译哈的dll么
哈哈你没有留邮箱不知道怎么发给你哟
大哥,我下载了Demo 运行是提示 MSVCR110.DLL 丢失 我尝试过百度的方法,下载Vs2012 C++ 组件,也安装成功,并重启过电脑.还是不行
我的系统是Win7
Vs 是2010
.NET 是4.0
是不是版本原因呢,请大哥分析分析
我用的是VS2015哟,你要是用的VS2010的话得修改cmake的generator
你好, 大神, 是否可以分享下你编译好的dll文件 ? 先谢谢了
发现在博客里还没回你,文件第二天就发给你啦~
有编译好的dll文件吗?可以发一份吗
抱歉这几天太忙回复晚了,编译好的文件已经发到你的邮箱了,请查收~
是否也发一份给我呢!
发到你上一个评论的邮箱啦,请查收~