一,记录我目前在win10 X64和VS2017的环境下成功编译Tesseract5.0的方式;

d779da2200fdd443ee8d1b548b0a6caf.png

二,记录在VS2017 C++工程中调用Tesseract4.0的方法;三,记录编译和调用Tesseract4.0过程中踩到的坑和相应的解决方案或看法。最终结果:

791665552292da8d5a9e6f5612ae3034.png


识别为:

19d63fcc0a4be1709fd1ee8c5ecac1fc.png


=======================================================================================================================一、资料准备
1 下载最新的CPPAN版本。解压缩后,将cppan.exe所在的路径添加到系统变量中;
CPPAN是跨平台的C / C++ 依赖管理器。它建立在 CMake 的基础之上,并具有构建系统的能力。CPPAN 支持快速的脚本式编码和原型制作,以及处理大型项目。查找,共享和重用库,发布您的项目。把时间花在你的代码上,而不是管理依赖关系。CPPAN为您降低包时间到几秒钟!它支持简单的交叉编译,继承和推送你自己的设置,标志到每个依赖。
链接为 https://cppan.org/client/
编译过程中相应的支持库是由cppan下载的,我们需要下载cppan并设置其环境变量
解压后 在系统变量里面选择PATH变量,将cppan.exe所在的文件路径作为环境变量的值 ,或者也可以将cppan.exe放置在path包含的目录下

24915912840fd098349753f39d9bcd71.png

59cdc27167ee66663322dfba0df7d37a.png


2 下载cmakehttps://cmake.org/download/,本文用的是cmake-3.10.1-win64-x64,将cmake.exe所在的路径添加到系统变量中;
为cmake设置环境变量,解压后目录下的bin文件夹的目录地址加载至系统环境变量PATH中,
与cppan设置环境变量的方法一致。

e197750c7c01e6b075a1c9636aa1c0d4.png


3 下载Tesseract源码https://github.com/tesseract-ocr/tesseract,,最新版已经到5.0

be9affb159c60b8ab5926051beca6037.png


解压后放英文目录

8169f50dd6739d9ed33257bb852d229e.png


*************************************************************************************************************** 二、tesseract编译
1.cmd,以 管理员身份进入命令行终端

6f2ad9db97e17267bf25eaf56c5a80b0.png


2.运行cppan
进入 解压后的Tesseract文件夹,可以发现有个cppan.yml,
直接敲入命令:cppan (如果出现 “no spec file”,就是目录不对,没有找到cppan.yml)

a0eec69c6c24686332a826e9b564b934.png


下载相关依赖

98ce6d2d498597b053de7884b4f67372.png


3.cmake编译

2395162440cdbc465d813066bb56ae14.png

d8bff1239d6b66cb1a916a17c3e9734a.png

使用GUI进行2次configure,1次generate,一路回车即可。

8481adae1dc498e113637bb692491fdf.png

be31aa808c3d86027c4ef0cd55ae7069.png

78cf07f5b2935c8b18b5d31d65b0c0ae.png


4 生成tesseract.sln,打开并编译。
进入项目,一般选择Install和all_build进行批生成最为稳妥,在我们这个项目中,生成install是足够

43d4dd1f71fd58e79d2396d88e0dc3e4.png

226b15d034159d4c343017c247a6072d.png


编译的过程中,可能出现这样的错误

13b0f0a4f37668006f094e11d8ee3df0.png

ab8d6cf5fc6389f090989c240759fb96.png

59158a4170cc3bde754d4e573bf172ac.png


出现这个错误的原因是因为字符集不相符,首先参考https://jingyan.baidu.com/article/9faa7231df5453473c28cbd9.html ,为vs2017恢复“高级保存”
而后,一次打开出现问题的文件,使用“高级保存选项”将字符进行转码为GB码。

a6a3ca808e7186372209737128376755.png


需要转码的文件主要集中在glib模块5、最终在c盘下会出现tesseract目录,并得到这样结果:

28a85835c238188433bbb39630559b77.png


三、在VS2017 C++工程中调用Tesseract4.0
1. 找到所有依赖lib文件并整理
编译tesseract.sln并安装之后,在C:/Program Files/tesseract/lib路径下仅有tesseract500.lib和tesseract500d.lib,但在工程中调用Tesseract4.0时,仅有这两个文件是不够的,为了方便调用,我们要找到其他的lib文件,它们在这里:C:Usersusername.cppanstoragelib,包含重要的pvt.cppan.demo.danbloomberg.leptonica-1.76.0.lib。
需要按照规则添加进去。

cb106367e234bcccfda8a91c1650d733.png


2.找到所有依赖dll文件并整理
在C:/Program Files/tesseract/bin路径下仅有tesseract500.dll和tesseract500d.dll,
其他的dll文件在 C:Program Filestesseractbin 下,全部添加到PATH中

b7b3673128dc0682bbe535203e6c6e29.png


3. 找到leptonica所需要的头文件并整理
有两个头文件是编译的时候需要的,这里也必须添加到include中去

2eaeb1ed72881f41589cbd8c3605580f.png


如果你不添加,会自动报错,也能够帮助你找到这两个目录。
4. 新建VS2017 C++工程,下载https://github.com/cppan/tesseract_example/blob/master/with_cppan/main.cpp并添加到该工程中。
4.1 项目属性—>配置属性–>C/C++–>常规,在“附加包含目录”中添加:

5d30c9803b1b6d54f3efec65f56e7d05.png


4.2 项目属性–>链接器–>常规,在”附加库目录”中添加

ff6afdec00b7d42dfa1622a47eecedea.png


4.3 项目属性–>链接器–>输入,在“附加依赖项”中添加

e4be7577244992dad4563a5e6c6ad856.png


4.4 在工程目录下新建文件夹tessdata,到tesseract下载相应的语言文件,copy到tessdata文件目录下。
5. 完成上述动作后,编译代码#include "pch.h"#include <iostream>#include <memory>#include <allheaders.h> // leptonica main header for image io#include <baseapi.h> // tesseract main headerint main(int argc, char *argv[]){if (argc == 1)return 1; tesseract::TessBaseAPI tess;if (tess.Init("E:/OpenCV_DNN数据集/tessdata", "eng")) { std::cout << "OCRTesseract: Could not initialize tesseract." << std::endl;return 1; }// setup tess.SetPageSegMode(tesseract::PageSegMode::PSM_AUTO); tess.SetVariable("save_best_choices", "T");// read imageauto pixs = pixRead(argv[1]);if (!pixs) { std::cout << "Cannot open input file: " << argv[1] << std::endl;return 1; }// recognize tess.SetImage(pixs); tess.Recognize(0);// get result and delete[] returned char* string std::cout << std::unique_ptr<char[]>(tess.GetUTF8Text()).get() << std::endl;// cleanup tess.Clear(); pixDestroy(&pixs);return 0;}
实现题图结果。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐