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

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

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

最终结果:

识别为:

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

一、资料准备

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

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

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

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

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

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

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

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

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

解压后放英文目录

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

 二、tesseract编译

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

2.运行cppan

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

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

下载相关依赖

3.cmake编译


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

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

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

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

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

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

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

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


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

三、在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。

需要按照规则添加进去。

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

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

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

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

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

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

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

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

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

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

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;
}

实现题图结果。

附件列表

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

  1. PHP 的源码编译安装

    PHP 架构和安装扩展的几种方式 PHP 三大模块: SAPI:接受并处理请求. Zend Engine:PHP 的核心,负责分析 PHP 代码并转为 opcode,然后在 Zend VM 虚拟机上执 ...

  2. win10 vs2015源码编译opencv、opencv_contrib、Tesseract

    1.软件包准备 opencv源码包地址:                官网  github opencv_contrib源码包地址:   github Tesseract源码包地址:        ...

  3. QGis+QT5.9+VS2017源码编译

    1.需要软件 VS2017 QT5.9.2 CMake 3.10.2 Cygwin osgeo4w QGIS源码 2.安装VS2017  过程省略 是由于机器上已经安装了VS2017 3.安装QT5. ...

  4. CEF源码编译

    CEF的构造说明:https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding chromium的源码地址:https://c ...

  5. 源码编译Redis Desktop Manager ---(转载)

    精美文章转载: 版权声明:本文作者为「Kany.Wang」,本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议.转载请注明出处!原文链接:https://kany.me/20 ...

  6. 源码编译Redis Desktop Manager | 懒人屋

    原文:源码编译Redis Desktop Manager | 懒人屋 源码编译Redis Desktop Manager  2.3k  字    10  分钟    2019-10-10 文章背景 本 ...

  7. windows10源码编译llvm

    准备 cmake, 我目前使用的版本是3.18 llvm 源码, 我下载的是 11.0 我已经具备Vs2015和Vs2017的开发环境. debug模式编译需要较多内存和较多硬盘存储空间. (debu ...

  8. Android 5.0源码编译问题

    如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...

  9. Android stdio Apktool源码编译

    Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...

随机推荐

  1. 复习巩固:oracle如何实现去重和分页

    一:oracle实现去重: user数据表: 分两步:1.查询重复数据  2.删除重复数据 1.查询重复数据:在oracle中实现查询重复数据,可以借助于rowid这个伪列.oracle中每个表物理上 ...

  2. centos7安装nginx 并启动

    原文连接  https://www.cnblogs.com/jerrypro/p/7062101.html 一.安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先 ...

  3. JDK源码那些事儿之DelayQueue

    作为阻塞队列的一员,DelayQueue(延迟队列)由于其特殊含义而使用在特定的场景之中,主要在于Delay这个词上,那么其内部是如何实现的呢?今天一起通过DelayQueue的源码来看一看其是如何完 ...

  4. margin值为负值

    引用地址:http://www.cnblogs.com/2050/archive/2012/08/13/2636467.html#2457812 http://www.cnblogs.com/jsco ...

  5. 常见的C语言编程规范

    头文件: 1.头文件中适合放置接口的声明,不适合放置实现. 2.头文件应向稳定的方向包含,产品依赖于平台,平台依赖于标准库. 3. .c/.h文件禁止包含用不到的头文件. 4.每一个.c文件应有一个同 ...

  6. java如何连接数据库并对其操作(以PostgreSQL为例)

    java如何连接数据库并对其操作(以PostgreSQL为例) 相关概念 JDBC(Java Data Base Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数 ...

  7. ORA-609 错误分析及解决方法 (转载)

    某个客户数据库在巡检的时候发现alert日志里不定期会出现ORA-609错误,大致内容如下: ***************************************************** ...

  8. Oracle 记录下jdbc thin client module名称

    java.util.Properties props = new java.util.Properties(); props.setProperty("password",&quo ...

  9. ServletContext对象应用——三天免登录

    1.用到的知识点: (1)Cookie (2)Session (3)ServletContext 其中Cookie和Session是会话技术的组成部分,一次会话从打开浏览器的某个站点开始,到浏览器关闭 ...

  10. mysqli扩展有一系列的优势,相对于mysql扩展的提升主要优势有哪些?

    mysqli扩展有一系列的优势,相对于mysql扩展的提升主要优势有哪些? 面向对象接口 prepared语句支持(译注:关于prepare请参阅mysql相关文档) 多语句执行支持 事务支持 增强的 ...