【E2E】Tesseract5+VS2017+win10源码编译攻略

2023-11-17

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

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

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

最终结果:

508489-20190625211314328-1621227684.png

识别为:

508489-20190625211320214-1797181159.png

=======================================================================================================================

一、资料准备

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

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

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

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

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

508489-20190625211326682-344393346.png

508489-20190625211332579-1098163352.png

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

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

   与cppan设置环境变量的方法一致。  

508489-20190625211338549-353417161.png

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

508489-20190625211355028-739207394.png

解压后放英文目录

508489-20190625211400957-841192589.png

***************************************************************************************************************

 二、tesseract编译

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

508489-20190625211407609-1253996146.png

2.运行cppan

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

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

508489-20190625211415682-637743103.png

   下载相关依赖


508489-20190625211430508-894439265.png

3.cmake编译

508489-20190625211437631-278378046.png


  508489-20190625211444346-1634532890.png

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

508489-20190625211451514-2011062514.png  

508489-20190625211457681-96333743.png

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

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

508489-20190625211510175-542620130.png

508489-20190625211516765-599085435.jpg

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

508489-20190625211523171-1388278514.png

508489-20190625211529378-1168155179.png

508489-20190625211537673-419023505.png

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

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

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

508489-20190625211543686-583945551.png

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

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

508489-20190625211550115-1257558567.png

三、在VS2017 C++工程中调用Tesseract4.0

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。

需要按照规则添加进去。

508489-20190625211555900-1560869053.png

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

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

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

508489-20190625211603082-1933742174.png

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

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

508489-20190625211609418-1491929607.png

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

4. 新建VS2017 C++工程,下载https://github.com/cppan/tesseract_example/blob/master/with_cppan/main.cpp并添加到该工程中。

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

508489-20190625211615282-1625413881.png

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

508489-20190625211622698-338825143.png

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

508489-20190625211628876-1569660743.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 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: " << 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;
}
 实现题图结果。




附件列表

 

转载于:https://www.cnblogs.com/jsxyhelu/p/11086732.html

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

【E2E】Tesseract5+VS2017+win10源码编译攻略 的相关文章

  • SpringMVC的拦截器

    SpringMVC的拦截器 SpringMVC的拦截器 SpringMVC的拦截器 01 SpringMVC拦截器 拦截器的作用 理解 02 SpringMVC拦截器 interceptor和filter区别 理解 记忆 03 Spring

随机推荐

  • style-components的熟练运用

    安装 首先下一个包 npm install save styled components 使用 创建组价以及根据属性加样式 import React Component from react import styled from style
  • driver.get_screenshot_as_file()没有保存图片的原因

    部分代码如下 cur time time strftime Y m d H M S filename os path dirname os path abspath screenshot cur time png driver get sc
  • JavaScript:实现简易计算功能

    JavaScript 实现简易计算功能 body部分
  • 数据结构:手撕图解单链表---phead的多种传参方式对比和辅助理解

    文章目录 为什么要引入链表 单链表 单链表的定义和原理 单链表的头插 对于指针的深层次理解 链表的尾插 封装malloc函数 尾删 头删 查找 链表中元素的插入 在某节点前插入 在某节点后插入 链表中元素的删除 删除pos位置的值 删除po
  • umi学习总结

    文章目录 umi介绍 umi是什么 umi的特性 开发环境 Node js 依赖管理工具 目录结构 路由 配置路由 页面跳转 Link组件 路由组件参数 路由动态参数 query信息 样式 使用css样式 dva 为什么需要状态管理 umi
  • Qt弹出窗口

    Qt弹出Widget窗口置顶 1 需求 Widget每次都弹出且为非模态窗口 2 老版代码 if widget NULL widget new QWidget widget gt show 想象 弹出窗口后 如果发生窗口切换 再次点击时 弹
  • Go语言常用的标准库

    文章目录 打印日志 系统调用命令 json的序列化和反序列化 base64 压缩和解压 标准输入 文件操作 目录操作 init函数 包的可见性 数学库 生成随机数 时间函数 打印日志 package main import log os f
  • Java内存回收机制

    C C 等语言中 内存的分配和释放由程序代码来完成 容易出现由于程序员漏写内存释放代码引起的内存泄露 最终导致系统内存耗尽 Java代码运行在JVM中 由JVM来管理 堆Heap 内存的分配和回收 Garbage Collection 把程
  • 接口如何处理重复请求?

    本文主要来源于 处理重复请求的三种方式 服务端如何高效的处理重复请求 对其整理和总结 用于学习记录 重复请求常用的处理方式就是幂等性处理 幂等性可以理解为 无论执行了多少次重复请求 数据只会处理一次 在数据库里也只会有一条数据 和数据库的唯
  • 以太坊智能合约各方法对应的签名编码

    erc20智能合约常见方法对应的签名编码 常见例如交易 transfer address uint256 编码为 web3 sha3 transfer address uint256 substring 0 10 gt 0xa9059cbb
  • Solidity合约中Merkle Root验证的一点实践

    背景 在上一篇文章 Solidity合约中签名验证的一点实践 中提到过 白名单机制一般有两种 除了签名验证的方式外 就是本文讲述的Merkle Root验证的方式 主要做法是在服务端对白名单地址列表整体构建Merkle树 计算出树的root
  • 解决Hbase报错java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for....

    完整报错为 java lang IllegalStateException The procedure WAL relies on the ability to hsync for proper operation during compo
  • set的使用

    创建集合 set 1 2 3 4 转化为列表list 1 如果我要在许多列表中找出相同的项 那么用集合是最好不过的了 用集合只用一行就可以解决 x y z 交集 2 去重 gt gt gt lst 1 2 3 4 1 gt gt gt pr
  • 毕业那天我们一起失恋

    毕业那天我们一起失恋 原载 婚姻家庭 VOL 1大四快开学了 我提前了几天来学校 俗话说 磨刀不误砍柴功 我提早来学校 把床铺好 把蚊帐挂起来 把厕所弄干净 把寝室打扫一下 寝室里只有我做这种打扫的事情 寝室有三个人 我一个 丸子一个 还有
  • 【翻译】对计算机未来的10个预测或;我们的首席科学家的无稽之谈

    TLDR WASM将无处不在 编译目标 部署目标 物联网 插件生态系统 这已经在发生了 1 5年 Rust将继续流行 根据RedMonk的指数 在未来几年将超过Go 2 4年 将出现一个严重的Kubernetes的对手 如果它使用WASM并
  • 写个爬虫吧

    import requests url https image baidu com search acjson tn resultjson com ipn rj ct 201326592 is 0 2C0 fp detail logid 1
  • 03-MySQL数据类型

    一 数值类型 整数 MySQL 主要提供的整数类型有 TINYINT SMALLINT MEDIUMINT INT BIGINT 浮点数 浮点类型有两种 分别是单精度浮点数 FLOAT 和双精度浮点数 DOUBLE 定点类型 只有一种 就是
  • 记录一次 JS 解密去混淆的经历 -- 如何破解加密的 JS 代码(一)

    写在前头 昨天发了一个 某JS最牛加密脱壳解密破解去混淆工具 有朋友说上代码不如讲一下思路 于是今天准备捋一下这个思路 顺便当整理复习了 需要直接解密代码的请看上一篇文章 这里只有思路与过程 阅读此文默认你有一定的 JavaScript 基
  • vscode工作区同时显示多个文件

    有时候安装的vscode打开一个文件又打开另一个文件只会保存新的文件 旧的文件别替换 这样做项目比较难受 所以用下面方法可以打开多个文件 workbench editor showTabs true
  • 【E2E】Tesseract5+VS2017+win10源码编译攻略

    一 记录我目前在win10 X64和VS2017的环境下成功编译Tesseract5 0的方式 二 记录在VS2017 C 工程中调用Tesseract4 0的方法 三 记录编译和调用Tesseract4 0过程中踩到的坑和相应的解决方案或