Tesseract OCR——Windows 10 + CMake-GUI + Visual Studio 2019下编译和使用解决方案

1012 篇文章 45 订阅

基本概念

Tesseract OCR:Tesseract-OCR 引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。然而,HP不久便决定放弃OCR业务,Tesseract也从此尘封。数年以后,HP 意识到,与其将Tesseract束之高阁,不如贡献给开源软件业,让其重焕新生。在2005年,Tesseract 由美国内华达州信息技术研究所获得,并求诸于 Google 对 Tesseract 进行改进、消除Bug、优化工作,Tesseract 由惠普公司宣布开源。从2006年到现在,都由 Google 公司开发维护。

编译环境

Windows 10

CMake-GUI 

Visual Studio 2019

Anaconda3(可无)

解决方案

注意事项

关闭杀毒软件。

源码下载

tesseract的编译有诸多依赖,tesseract依赖于leptonica,而leptonica又依赖于png,tiff,jpeg等基础库,所以需要下载这些依赖的源码,并且依次编译

考虑到某些图片格式的基础库源码较老并且久未更新难于编译,本文只编译了较新的libtiff,并作为示例,其他图片格式未测试

下载地址:

下载完后解压缩到文件夹,这里将三个项目源码都放在D:\Code\Project目录

编译过程

特别指定,本文中所有项目生成都是使用cmake-gui工具(首先要会用这个工具),C++编译使用vs2019,所有cmake编译目录都定为build_x64

所有的编译模式都是:vs2015 win64 release

由于tiff --> leptonica --> tesseract 三者之间层层递进,环环相扣,所以编译一定要注意顺序和设置

step1:编译tiff

常规cmake流程编译出 tiff.lib和tiff.dll,位置在 D:\Code\Project\tiff-4.0.9\build\libtiff\Release

如果有安装Anaconda3可以跳过这步。

step2:编译leptonica

cmake配置,勾选Grouped和Advanced,会显示png和tiff等图片库的设置入口,要先将tiff的目录配置进去,使得支持tiff格式

 如果没有安装Anaconda3情况下

Visual Studio 2019打开项目

编译 

使用libtiff需要修改 libtiff目录下的两个头文件,将tiffconf.vc.h和tif_config.vc.h改名为tiffconf.h和tif_config.h

得到两个文件

  • leptonica-1.76.0.lib,位置 D:\Code\Project\leptonica-1.76.0\build\src\Release

  • leptonica-1.76.0.dll,位置 D:\Code\Project\leptonica-1.76.0\build\bin\Release

如果要支持png,需要下载编译libpng和zlib源码,并且在cmake-gui里面先设置zlib,再设置libpng

step3:编译tesseract

根目录的cmake配置文件在

if(NOT EXISTS ${PROJECT_SOURCE_DIR}/.cppan)

这句话之前加上

set(Leptonica_DIR D:/Code/Project/leptonica-1.76.0/build) 

include_directories(
    D:/Code/Project/leptonica-1.76.0/src
    D:/Code/Project/leptonica-1.76.0/build4/src
)

目的是为了让tesseract在cmake的config阶段找到leptonica的头文件和库,当然,也可以在cmake-gui里面直接设置Leptonica_DIR

在configure的过程会出现如下日志,显示正在下载ICU的依赖,等到其下载完成即可,注意打开科学上网,否则会因为网络问题不成功

如果一直网络超时,可以在 https://github.com/unicode-org/icu/releases 手动下载icu的开发包 icu4c-67_1-Win64-MSVC2017.zip,然后重命名为icu64.zip拷贝到编译的对应目录

然后修改源码目录的  tesseract-3.05.01\src\training\CMakeLists.txt,注释以下行

#    file(DOWNLOAD
#        "http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-Win${ARCH_DIR_NAME}-msvc10.zip"
#        "${icu_archive}"
#        SHOW_PROGRESS
#        INACTIVITY_TIMEOUT 60 # seconds
#        EXPECTED_HASH MD5=${icu_hash}
#    )
 
#    set(ICU_ROOT ${icu_dir}/icu)

 

再重新configure完成

Visual Studio2019打开项目,进行编译,一般情况下会出现一个字符编码的报错(最新版4.1.1已不报)

此时不用惊慌,只需要将tesseract中equationdetect.cpp文件修改一下,再编译就好了

static const STRING kCharsToEx[] = {"'", "`", "\"", "\\", ",", ".",  
    "〈", "〉", "《", "》", "」", "「", ""};  

改为

static const STRING kCharsToEx[] = { "'", "`", "\"", "\\", ",", ".",  
    "<", ">", "<<", ">>", "" };  

如果报错PACKAGE_VERSION找不到,可以手动在根目录的CMakeLists.txt中添加宏

add_definitions(
    -DPACKAGE_VERSION="3.05.01"
)

编译

顺利编译出tesseract项目的各种二进制工具exe,lib和dll

  • tesseract305.lib,位置 D:/Code/Project/tesseract-3.05.01\build\Release
  • tesseract305.dll,位置 D:/Code/Project/tesseract-3.05.01\build\bin\Release
  • tesseract.exe,位置 D:/Code/Project/tesseract-3.05.01\build\bin\Release

简单使用

拷贝文件

在\tesseract-3.05.01\build\bin\Release目录下,从源码目录将tessdata拷贝进去,并且提前下载好已训练语言包(https://github.com/tesseract-ocr/tessdata

另外,将用到的tiff和liptonica以及要识别的图片都拷贝进来

文本识别 

bmp格式原生支持

打开CMD

cd D:/Code/Project/tesseract-3.05.01/build/bin/Release
tesseract 20180602231441791.bmp euro

识别结果

euro.txt

The (quick) [brown] {fox} jumps!
Over the $43,456.78 <lazy> #90 dog
& duck/goose, as 12.5% of E-mail
from aspammer@website.com is spam.
Der ,,schnelle” braune Fuchs springt
fiber den faulen Hund. Le renard brun
«rapide» saute par-dessus le chien
paresseux. La volpe marrone rapida
salta sopra il cane pigro. El zorro
marrén répido salta sobre el perro
perezoso. A raposa marrom répida
salta sobre 0 C50 preguicoso.

官方的模型有些字符不是特别准确,需要训练

参考文章

windows编译和使用tesseract(C++ api)

cmake-gui使用教程

VS2017/VS2015编译tesseract

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starzkg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值