Win10 + vs2017 编译并配置tesseract4.1.0

2023-10-26

  tesseract 是一个开源的OCR (Optical Character Recognition , 光学字符识别) 引擎,本文就介绍一下自己在编译 tesseract4.1.0时遇到的一些坑,希望能给大家带来一些帮助。

一、下载 tesseract

  tesseract 是一个开源项目,可以在 GitHub 上下载源码:https://github.com/tesseract-ocr/tesseract/releases/ 

  当然,也可以下载安装版的:https://github.com/UB-Mannheim/tesseract/wiki 

   安装版的下载完后直接安装,然后配置环境变量(这个后面会讲到)即可使用。这个方法笔者也尝试过,但是很遗憾,没能在 vs 上找到相关的库文件,也就是不能在 vs 中调用 tesseract 相关的函数方法,只能在控制台上使用,这就比较蛋疼了,暂时在网上也没找到相关的方法,所以只能下个源码包自己编译配置了,折腾了一天才搞定,不得不吐槽一下在 Windows 上想自己编译一个东西真是麻烦。

 

二、所需要用到的工具

  在 Windows 上编译 tesseract 主要需要用到两个工具:cmake和 cppan。

2.1 cmake

  cmake 是一个跨平台的编译工具 ,可以使用 cmake 在 Windows 上将源码编译成你想要的文件(比如说电脑上装了 visual studio,那么就可以生成 .sln 文件),在 Linux 上使用 cmake 的话,则可以生成 makefile 文件,可以说功能非常强大了。

  Windows 上安装 cmake 很简单,直接下载可安装文件后一键安装就行:https://cmake.org/download/

 

   需要下载哪个是自己系统而定,笔者下载的是cmake-3.14.2-win64-x64.msi ,这个是可以直接安装的。安装完后,记得将 cmake 安装目录下的 /bin 目录添加到 path 环境变量中去(本人的相应目录是 D:\Program Files\CMake\bin )。配置完环境变量后,就可以在命令行使用 cmake 命令了。

 

2.2 cppan

  cppan 是一个跨平台的 C/C++ 依赖管理器。它建立在CMake之上,还具有构建系统功能。CPPAN支持快速脚本式编码和原型设计以及处理大型项目。查找,共享和重用库,发布项目。 使用 CPPAN 可以让你把时间花费在处理代码而不是管理依赖项上。CPPAN 可以为您将获取包的时间减少到秒!它支持轻松交叉编译,继承和推送您自己的设置,标记每个依赖项。(注:以上介绍来自 CPPAN 英文介绍机翻,英文不好望见谅)。

  可以在 https://cppan.org/client/ 这里下载 cppan 的安装包,本人下载的是 cppan-master-Windows-client.zip 文件。

  下载好安装包后直接解压,可以发现一个 cppan.exe 文件,也不需要双击这个文件安装什么的,只需要将这个文件所在目录添加到 path 环境变量中去就行了。(笔者的目录是 D:\cppan,则直接把这个目录添加到环境变量 path 中去就行)。配置好环境变量后就可以在命令行使用 cppan 命令了。

  

三、从源代码编译安装 tesseract

  从源代码编译安装 tesseract 的基本步骤 GitHub 上有讲,按照 GitHub 上提供的方法来就行:https://github.com/tesseract-ocr/tesseract/wiki/Compiling

1)下载安装 cppan

2)下载安装 cmake

3)打开 Windows 命令行并进入 tesseract 源码目录(目录最好为全英文);

4)在 tesseract 目录下依次运行下述命令:

cppan

mkdir build && cd build

cmake ..

   完成后,可以在 /tesseract/build 目录下看到一个 tesseract.sln 文件,说明 tesseract 源码编译成功了。(注:在运行 cppan 命令后,会下载一系列东西,耐心等待即可)。

5)上述命令编译完成后是 x86 平台上的解决方案,若需要 x64 平台上的解决方案可以这样:

mkdir bulid_win64 && cd bulid_win64
cppan ..
cmake ..
-G "Visual Studio 15 2017 Win64"

  如果需要在 vs2015 上使用 tesseract,只需要将 15 2017 改成 14 2015 即可。

 

四、在 vs2017 上编译 tesseract

  用 cmake 编译完源码后,虽然生成了解决方案,但是还需要在 vs2017 上对该解决方案进行编译才能生成 tesseract 的可执行文件及相关库文件,步骤如下:

1)进入目录 /tesseract/bulid ,找到 tesseract.sln 文件,使用 vs2017 以管理员方式打开它!(这很重要,我第一次就是没用管理员方式打开才会报错的)。 以管理员方式启动 vs 程序的方法可以参考:https://blog.csdn.net/lien0906/article/details/47300881 ;

2)选择解决方案平台,x86 平台则选择 x86,x64 平台则选择 x64;

3)在解决方案资源管理器中,右键解决方案 tesseract,选择生成解决方案。

  理论上说,已经完成了,但是现实总是残酷的,错误警报。。。

1)cppan-d-b-d 乱码问题:大部分错误都是乱码引起的,这是文件编码的问题。cppan 下载的文件是 UTF-8(不带签名),而 vs2017 中文版默认保存的文本文件是 GB2312 编码。

解决方法如下:双击错误行,打开相应的文件,然后点击菜单栏中的“文件”下拉栏,选择“高级保存选项”,将编码方式保存为 “简体中文(GB2312)- 代码页 936” 即可。vs2017 的文件下拉菜单中默认是没有 “高级保存选项” 这一项的,可以自己手工添加。

2)error msb3073 命令 setlocal :这个就是没有用管理员身份打开 .sln 文件所遇到的问题了,用管理员身份打开即可。

  解决了这两个问题后,再次生成解决方案,应该没问题了。

  最后,在 release 环境下再编译一次。

 

五、环境变量配置

  在 vs2017 上编译完成后,可以在 C 盘下发现一个 tesseract 安装文件夹,我的是在 C:\Program Files\tesseract:

  可以在 /bin 目录下找到 tesseract.exe 文件,将 C:\Program Files\tesseract\bin 添加到环境变量 path 中去(如何在 win10 上添加环境变量就不详细说明了,网上有许多教程)。此外,在 /bin 目录下新建两个文件夹 Debug 和 Release,分别将 D:\tesseract_4.1.0\build\bin\Debug 和 D:\tesseract_4.1.0\build\bin\Release 目录下的 .dll 文件复制到所新建的两个文件夹下去;然后将 C:\Program Files\tesseract\bin\Debug 和 C:\Program Files\tesseract\bin\Release 也添加到环境变量 path 中去,如下:

  此外,新建一个系统变量TESSDATA_PREFIX,变量值为 D:\tesseract_4.1.0\tessdata,这个目录下存放的是 tesseract-ocr 语言包文件,可以在 GitHub 上下载,下载后放到该目录下去即可,下载地址为:https://github.com/tesseract-ocr/tessdata/

  

  配置好这两步后,应该就可以在命令行使用 tesseract 命令了,可以简单测试一下 tesseract 是否安装成功,如下:

 

六、配置 vs2017 以使用 tesseract

  新建一个项目,在属性管理器,Debug | x64 下面,右键 Microsoft.Cpp.x64.user 选择属性:

 

1)在 VC++ 目录中:

  选择包含目录,编辑,分别添加这三个目录:

C:\Program Files\tesseract\include

C:\Program Files\tesseract\include\tesseract

C:\Program Files\tesseract\include\leptonica

  这里有个问题是,你在 C:\Program Files\tesseract\include 下可能并找不到 leptonica 这个目录,没办法,自己动手丰衣足食吧:在 C:\Program Files\tesseract\include 下新建文件夹 leptonica,然后将 C:\Users\lenovo\.cppan\storage\src\8f\a3\90d7\src 目录下的文件全部复制到 C:\Program Files\tesseract\include\leptonica 下即可(不同电脑具体的目录可能会不同,不过都在 C:\Users\lenovo\.cppan\storage\src\ 下)

 

 

2)在 VC++ 目录中,选择库目录,编辑,分别添加这三个目录:

C:\Program Files\tesseract\lib

C:\Program Files\tesseract\lib\Release

C:\Program Files\tesseract\lib\Debug
  
同样的,先在 C:\Program Files\tesseract\lib 目录下新建两个文件夹 Debug 和 Release,然后将 C:\Users\lenovo\.cppan\storage\lib\ab45fb78\Debug 目录下的 .lib 文件全部复制到 C:\Program Files\tesseract\lib\Debug 目录下;将 C:\Users\lenovo\.cppan\storage\lib\ab45fb78\Release 目录下的 .lib 文件全部复制到 C:\Program Files\tesseract\lib\Release 目录下。

 

3)在 链接器 -> 输入 -> 附加依赖项 中,编辑,添加以下两项:

pvt.cppan.demo.danbloomberg.leptonica-1.76.0.lib
tesseract41d.lib

  完成后,重启一下电脑,应该就可以在 vs2017 上使用 tesseract 了。  

 

七、一个使用 tesseract 识别数字的例程

  经过一天的折腾,终于可以使用 tesseract 了,写了一个小程序来试验一下 tesseract 的效果:

#include <opencv2/opencv.hpp>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <string>

using namespace std;
using namespace cv;

PIX* cvtMat2PIX(Mat imgGray);

int main(int argc, char *argv[])
{
    Mat sourceImage = imread("E:\\visual studio\\Opencv_Test\\Opencv_Test\\1.png",cv::IMREAD_GRAYSCALE);
    if (sourceImage.empty()) {
        perror("Failed to load image!\n");
        exit(EXIT_FAILURE);
    }

    Mat binImage;
    threshold(sourceImage,binImage,90,255,cv::THRESH_BINARY_INV);

    PIX *pixImage = cvtMat2PIX(binImage);                // 将图片由 Mat 转换成 Pix 格式

    // 使用 tesseract 进行数字识别
    const char* lang = "eng";
    string numText;
    tesseract::TessBaseAPI *tess = new tesseract::TessBaseAPI;        // 新建 tesseract 基类
    tess->Init(NULL,lang, tesseract::OEM_LSTM_ONLY);        // 初始化
    tess->SetPageSegMode(tesseract::PSM_AUTO);    // 设置识别模式
    tess->SetImage(pixImage);
    numText = string(tess->GetUTF8Text());
    cout << numText << endl;

    waitKey(0);
}


PIX* cvtMat2PIX(Mat imgGray)
{
    int cols = imgGray.cols;
    int rows = imgGray.rows;

    PIX *pixS = pixCreate(cols, rows, 8);

    for (int i = 0; i < rows; i++)
        for (int j = 0; j < cols; j++)
            pixSetPixel(pixS, j, i, (l_uint32)imgGray.at<uchar>(i, j));
    return pixS;
}

 

   所使用的图片如下:

   识别结果如下:

   效果还算不错。

 

  因为 tesseract 的安装过程是在一周前完成了,故而有些地方记不太清楚,图也不是很多,可能会有一些错误,但是还是希望能对有需要的人有一些帮助。

 

 

转载于:https://www.cnblogs.com/tongye/p/10734342.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Win10 + vs2017 编译并配置tesseract4.1.0 的相关文章

随机推荐

  • 大数据——Java多线程

    多线程 认识线程 进程 线程 多线程的优势 编写线程类 使用Thread类创建线程 使用Runnable接口创建线程 使用Callable接口创建线程 线程的状态 新生状态 New Thread 可运行状态 Runnable 阻塞状态 Bl
  • 【网络】【应用层】常见的应用层协议

    文章目录 1 HTTP HTTPS 概述 HTTP工作过程 HTTP特点 发展过程 HTTP0 9 HTTP1 0 HTTP1 1 当前普遍使用的版本 SPDY 了解 HTTP2 0 二进制分帧层 头部压缩 服务端推送 流优先级 HTTP2
  • springCloud中feign的使用

    springCloud中feign的使用 定义一个feign的接口 定义一个feign的接口 定义fegin接口 使用 FeginClient注解指向对应的服务 FeignClient value iyb test url ms iyb t
  • 【Elasticsearch】ES内存满问题排查思路

    1 概述 转载 https bbs huaweicloud com forum thread 69710 1 1 html 2 问题排查思路 场景1 内存参数配置不合理 场景2 查询返回的size过大 场景3 深度翻页查询 场景4 聚合的数
  • 【iOS】属性关键字

    文章目录 前言 一 深拷贝与浅拷贝 1 OC的拷贝方式有哪些 2 OC对象实现的copy和mutableCopy分别为浅拷贝还是深拷贝 3 自定义对象实现的copy和mutableCopy分别为浅拷贝还是深拷贝 4 判断当前的深拷贝的类型
  • 论文阅读技巧之三遍法

    本文介绍了三遍法及其在文献调查中的应用 关键的思想是 你应该以三遍的时间来阅读论文 而不是从一开始就一直读到最后 每个pass都实现了特定的目标 并建立在前一个遍的基础上 第一个pass让您对本文有一个大致的了解 第二步让你掌握论文的内容
  • es查询对应索引下的数据结果

    执行语句 GET test index mapping pretty test index 索引名称 mapping 查询索引的结构 pretty 是参数 意思是格式化数据
  • spring手动开启事务,手动提交事务,手动回滚事务

    1 未加事务注解 或者事务配置 所以需要手动开启事务和手动提交事务和手动回滚事务 Autowired private PlatformTransactionManager txManager Autowired private ShopGr
  • Vue中表单手机号验证与手机号归属地查询

    下面是一篇关于Vue中如何进行表单手机号验证与手机号归属地查询的Markdown格式的文章 包含代码示例 Vue中表单手机号验证与手机号归属地查询 手机号验证和归属地查询是许多Web应用程序中常见的功能之一 在Vue js中 我们可以轻松地
  • 安装npm和cnpm

    一 简介 npm是nodejs的包管理工具 用于node插件管理 cnpm是淘宝在中国做的nodejs镜像 避免访问国外的nodejs网站出现异常 二 安装nodejs 1 安装 有两种选择一种是安装文件安装 一种是免安装的zip包 这里我
  • 使用Rust写操作系统(1)-安装rust开发环境

    安装cargo及rust编译环境 sudo curl https sh rustup rs sSf sh 如图 选择自定义安装 在版本选择的时候 一定要选择nightly 因为开发操作系统要使用到一些非稳定版本的功能 选择完成后 继续安装即
  • Java序列化详解

    序列化是一种将对象转换成字节流的过程 以便在网络上传输或将其保存到磁盘上 Java提供了一种称为Java序列化的机制 它可以将Java对象转换成字节流 并在需要时将其还原回对象 在本文中 我们将介绍Java序列化的使用方法 并提供一些示例代
  • 都2021了作为一名Android开发者,还不学音视频开发?我劝你早点认清现实!

    缘起 最近经常遇到一些同学问我如何学习音视频 怎样才能快速上手 还有一些对音视频不了解的同学问我该不该学习音视频 作为一名音视频行业的10年Android老兵 我有一些思考分享给大家 希望能对你有所帮助 大趋势 从未来的大趋势来看 随着5G
  • 【C语言位运算符及原码输出】

    C语言位运算符及原码输出 原码 补码 反码基础概念 按位与 按位或 按位异或 按位与 lt lt 按位左移 gt gt 按位右移 位运算符注意事项 两个操作数均以补码参与计算 得到的结果为补码 需将结果转为原码才是最终答案 原码 补码 反码
  • element-plus 提示找不到名称“ElMessage”。ts(2304)

    文章目录 1 安装element plus 2 main ts 引入ElMessage 3 vite config ts 中配置 4 在vscode中使用会报错 找不到名称 ElMessage ts 2304 1 安装element plu
  • umi使用mock

    引入 Mock import Request Response from umijs deps compiled express import Mock from mockjs 定义数据类型 export default GET api t
  • 微信小程序vant组件库安装

    vant组件库安装步骤 1 通过npm安装 在微信开发者工具目录空白处右击 在外部终端窗口中打开或直接在文件路径中输入cmd回车 2 安装之前初始化npm包 再安装 npm init y 通过 npm 安装 npm i vant weapp
  • Ubuntu下如何将普通用户提升到root权限

    1 打开超级终端 输入指令sudo gedit etc passwd 2 则找到crystal x 1000 1000 crystal home linuxidc bin bash 将两个1000改成0即可 3 重新登陆之后打开超级终端发现
  • BLEU 评价指标总结

    Bleu 评测 一 Bleu通常用来度量一组机器产生的翻译句子集合 candidates 与一组人工翻译句子集合 references 的相似程度 Bleu的具体计算过程看下图 在这里解释一下 式中的n 为当前匹配n gram的长度 这里的
  • Win10 + vs2017 编译并配置tesseract4.1.0

    tesseract 是一个开源的OCR Optical Character Recognition 光学字符识别 引擎 本文就介绍一下自己在编译 tesseract4 1 0时遇到的一些坑 希望能给大家带来一些帮助 一 下载 tessera