最新的ndkr20编译c_攻略|Tesseract5+VS2017+win10源码编译

本文详细介绍了如何在Win10 x64系统和VS2017环境下编译Tesseract5.0,包括下载CPPAN和CMake,设置环境变量,解决字符集问题,整理依赖库和DLL,以及在C++工程中调用Tesseract所需的配置步骤。
摘要由CSDN通过智能技术生成

点击上方↑↑↑“OpenCV学堂”关注我

作者简介

禾路,资深OpenCV开发者,擅长图像识别,融合与增强

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

2. 记录在VS2017 C++工程中调用Tesseract4.0的方法;

3. 记录编译和调用Tesseract4.0过程中踩到的坑和相应的解决方案或看法

输入图像

cce17be976423a98c1058bfa3917543f.png

识别结果

93324b47a35ae7521891eebdc22fddcc.png

下载与安装

1. 下载最新的CPPAN版本。解压缩后,将cppan.exe所在的路径添加到系统变量中; 

CPPAN是跨平台的C / C++ 依赖管理器。它建立在 CMake 的基础之上,并具有构建系统的能力。CPPAN 支持快速的脚本式编码和原型制作,以及处理大型项目。查找,共享和重用库,发布您的项目。把时间花在你的代码上,而不是管理依赖关系。CPPAN为您降低包时间到几秒钟!它支持简单的交叉编译,继承和推送你自己的设置,标志到每个依赖。

链接为 https://cppan.org/client/

编译过程中相应的支持库是由cppan下载的,我们需要下载cppan并设置其环境变量

解压后 在系统变量里面选择PATH变量,将cppan.exe所在的文件路径作为环境变量的值  ,或者也可以将cppan.exe放置在path包含的目录下

cde8eaff9e66efd74ae648f92fa4f791.png

40fdf73de963f99c7d947d025b7217ed.png

2.下载cmake

https://cmake.org/download/,
本文用的是cmake-3.10.1-win64-x64,
将cmake.exe所在的路径添加到系统变量中;

为cmake设置环境变量,解压后目录下的bin文件夹的目录地址加载至系统环境变量PATH中,与cppan设置环境变量的方法一致。 

ae05b8d017683e4940933d75a1424488.png

3 下载Tesseract源码

https://github.com/tesseract-ocr/tesseract,,
最新版已经到5.0

751231a8feb680b07e26b9626a8a5dd7.png

解压后放英文目录

38a88bef952fbd1fd7847608cf8c472d.png

tesseract编译

1. cmd,以 管理员身份进入命令行终端

582fedb8b6c8e9284fcd49f5bd4ff37a.png

2. 运行cppan

进入 解压后的Tesseract文件夹,可以发现有个cppan.yml,

直接敲入命令:cppan   (如果出现 “no spec file”,就是目录不对,没有找到cppan.yml)

f0d6b3b96138ac87c5fe666533db4a45.png

下载相关依赖

956d88a518cd437844798bd405802872.png

3.cmake编译

c1c4c0258bfb6d48c4771ebb96614539.png

4cf61bc4b2f22eea6c196573c4a1e6f8.png

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

b17ec9d8e6a79158bec391a9919e87c1.png

fda7b043959f50f823505374775385f4.png

961ae1c87459c058a35c7317fd495998.png

生成tesseract.sln,打开并编译。

进入项目,一般选择Install和all_build进行批生成最为稳妥,在我们这个项目中,生成install是足够

b2d84a7a35e7834ff0e71f88d74ed9b6.png

f49e3f9da625d66775497be2b7c66a41.png

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

ed7cc050e112571112f0b023b3e2582c.png

af0a9f66cd0e14e067b772be779209df.png

e81fa5f7573bbc54ce2d44d278955e43.png

出现这个错误的原因是因为字符集不相符,首先参考

https://jingyan.baidu.com/article/9faa7231df5453473c28cbd9.html ,为vs2017恢复“高级保存”

而后,一次打开出现问题的文件,使用“高级保存选项”将字符进行转码为GB码。

473d4d7ad64f4ecea56719096ed1bb6e.png

需要转码的文件主要集中在glib模块

5、最终在c盘下会出现tesseract目录,并得到这样结果:

74f9b641c5bb65592c39686ac02bd2f2.png

调用Tesseract

1. 找到所有依赖lib文件并整理

编译tesseract.sln并安装之后,在C:/Program Files/tesseract/lib路径下仅有tesseract500.lib和tesseract500d.lib,但在工程中调用Tesseract4.0时,仅有这两个文件是不够的,为了方便调用,我们要找到其他的lib文件,它们在这里:C:\Users\username\.cppan\storage\lib,包含重要的pvt.cppan.demo.danbloomberg.leptonica-1.76.0.lib。

需要按照规则添加进去

abf73df27b2478e1a150b2ab09e83bf2.png

2.找到所有依赖dll文件并整理

在C:/Program Files/tesseract/bin路径下仅有tesseract500.dll和tesseract500d.dll,

其他的dll文件在 C:\Program Files\tesseract\bin 下,全部添加到PATH中

11027f47ca6e0f4cd61aa403638d27ab.png

3. 找到leptonica所需要的头文件并整理

有两个头文件是编译的时候需要的,这里也必须添加到include中去

6990ac71011b7705cd7406f23ab65171.png

如果你不添加,会自动报错,也能够帮助你找到这两个目录。

4. 新建VS2017 C++工程,下载

https://github.com/cppan/tesseract_example/blob/master/with_cppan/main.cpp
并添加到该工程中。

4.1 项目属性—>配置属性–>C/C++–>常规,在“附加包含目录”中添加:

9f9de12b008bf024a709c5ae33b59c60.png

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

79d8a04f37df9316c5a8863d0f324407.png

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

ed8a3f498eb4c1381dff86d35bb716e3.png

4.4 在工程目录下新建文件夹tessdata,到tesseract下载相应的语言文件,copy到tessdata文件目录下。

5. 完成上述配置以后,编译执行如下代码即可得到文章开头的运行效果截图

#include "pch.h"
#include 
#include 
#include  // leptonica main header for image io
#include  // tesseract main header
int 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 image
    auto pixs = pixRead(argv[1]);
    if (!pixs)
    {
        std::cout <"Cannot open input file: " <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;
}
3bbf1651d867caf623ceb3d637685fdc.png 607290966b80168bb4614154ada86050.png 607290966b80168bb4614154ada86050.png

往期精选

告诉大家你 在看

  • OpenVINO场景文字检测与识别

  • 重磅!英特尔开源了OpenVINO模型训练框架

  • OpenCV基于标记控制的分水岭分割算法演示

  • VS code 插件配置手册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值