tesseract是一个基于C++编写的开源OCR(光学字符识别)库

本文简单介绍一下windows系统中编译和使用tesseract以及调用该库的C++ api进行开发

环境为win10+vs2015


源码下载

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

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

下载地址:

  • libtiff 4.09,http://download.osgeo.org/libtiff/tiff-4.0.9.zip
  • leptonica 1.76.0,http://www.leptonica.com/source/leptonica-1.76.0.tar.gz
  • tesseract 3.05.01,https://github.com/tesseract-ocr/tesseract/archive/3.05.01.zip

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

编译

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

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

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

step1:编译tiff

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

step2:编译leptonica

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


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


这样就能编译出leptonica的库文件了

  • leptonica-1.76.0.lib,位置D:\codetest\leptonica-1.76.0\build_x64\src\Release
  • leptonica-1.76.0.dll,位置D:\codetest\leptonica-1.76.0\build_x64\bin\Release

step3:编译tesseract

根目录的cmake配置文件在

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

这句话之前加上

set(Leptonica_DIR D:/codetest/leptonica-1.76.0/build_x64) 

include_directories(
    D:/codetest/leptonica-1.76.0/src
    D:/codetest/leptonica-1.76.0/build_x64/src
)
目的是为了让tesseract在cmake的config阶段找到leptonica的头文件和库


在configure的过程会出现如下日志,显示正在下载ICU的依赖,注意打开vpn,否则会因为网络问题不成功


之后,打开sln进行编译,一般情况下会出现一个字符编码的报错


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

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

改为

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


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

  • tesseract305.lib,位置D:\codetest\tesseract-3.05.01\build_x64\Release
  • tesseract305.dll,位置 D:\codetest\tesseract-3.05.01\build_x64\bin\Release
  • tesseract.exe,位置D:\codetest\tesseract-3.05.01\build_x64\bin\Release

工具使用

在D:\codetest\tesseract-3.05.01\build_x64\bin\Release目录下,从源码目录将tessdata拷贝进去,并且提前下载好已训练语言包,另外,将用到的tiff和liptonica以及要识别的图片都拷贝进来


bmp格式原生支持,tif格式此时也是支持的,这里以tif图片为例


在这个目录输入命令行

tesseract eurotext.tif 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.

有些字符不是特别准确,还需要训练

编程使用

通过写代码调用tesseract的C++ api的形式

创建vs2015 C++工程

源码

main.cpp

#include "baseapi.h"
#include "allheaders.h"

int main()
{
	char *outText;

	tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
	// Initialize tesseract-ocr with English,without specifying tessdata path
	if (api->Init(NULL,"eng"))
	{
		fprintf(stderr,"Could not initialize tesseract.\n");
		exit(1);
	}

	// Open input image with leptonica library
	Pix *image = pixRead("./eurotext.tif");
	api->Setimage(image);
	// Get OCR result
	outText = api->GetUTF8Text();
	printf("---- OCR output:---- \n%s",outText);

	// Destroy used object and release memory
	api->End();
	delete[] outText;
	pixDestroy(&image);

	return 0;
}

配置

头文件包含目录

主要是leptonica和tesseract的src目录


附加库目录

需要配置leptonica和tesseract的lib路径


附加依赖项


运行

将项目依赖的tiff,leptonica,tesseract的dll全部拷贝到exe执行目录,并且拷贝tessdata和用到的图片到该目录


运行结果

---- OCR output:----
The (quick) [brown] {fox} jumps!
Over the $43,schnelle鈥?braune Fuchs springt
铿乥er 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.

可以看出,api识别的结果还是有些不准确的,有待训练优化

windows编译和使用tesseractC++ api的更多相关文章

  1. ios – 在哪里可以找到tesseract-&gt; setvariable函数的第一个参数的可用属性名称列表?

    从很多护目镜中,我只能找到其中几个,如下图所示:tesseract的setvariable我想知道他们中有多少人?有没有列表可用?如果有的话请给我链接.解决方法这个代码应该是iOS的诀窍…可能需要一点调整.

  2. ios – 是否可以使用Tesseract OCR识别iPhone屏幕上绘制的角色?

    从过去的2周开始,我正在努力实现“识别iPhone屏幕上绘制的角色”.我搜索这个,我找到了TesseractOCR.通过使用TesseractOCR,我们能够识别图片中的字符.现在我的问题是,是否可以使用TesseractOCR识别iPhone屏幕上绘制的角色?

  3. opencv+tesseract实现验证码识别的示例

    本文主要介绍了opencv+tesseract实现验证码识别的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. 在CentOS 6上安装Tesseract-OCR

    我正在尝试在我的服务器上安装Tesseract-OCR但是当我安装所有我认为是正确的回购.当我尝试安装它时,找不到包我尝试添加rpmforge但无济于事.来自之前已经完成或熟悉添加和搜索回购的人的任何想法?

  5. centos上 java使用Tesseract进行ocr识别

    1、安装过程:安装ocryuminstalltesseract-ocr查找中文包yumsearchtesseract-ocr|grepsim安装中文包yuminstalltesseract-langpack-chi_sim安装版本信息:?test-ugc-api01tesseracttesseract-vtesseract3.04.00leptonica-1.72libgif4.1.6(?):li

  6. 【OCR】源码编译安装tesseracr-ocr并简单说一下接口——Ubuntu14.04

    反正我每次安装完tesseract后,我的opencv头文件不是没了就是出问题。github地址:https://github.com/tesseract-ocr/tesseract/releases建议下载安装4.0版本,有LSTM,准确率和速度都不错。官网地址:http://www.leptonica.org/必须源码编译安装,默认安装目录在/usr/local/下3.安装tesseract二、部分API介绍预训练模型地址:https://github.com/tesseract-ocr/tessda

  7. 在Ubuntu / Linux发行版中如何安装Tesseract-OCR 3.03?

    或者,有没有一种方式火车tesseract3.02?我们一直在看错误的地方提供信息吗?任何建议或链接到安装tesseract-ocr3.03forLinux发行版的说明将不胜感激!谢谢.Tesseract可以直接安装在Ubuntu14.04中我不知道如果你可以在旧版本的Ubuntu中执行,因为这个回购可能会在更新的Ubuntu版本中更新.

  8. Tesseract 3.04 setup on cento 6

    最近要实现OCR功能,决定用tesseract。最新的稳定版本是3.04.github上有很好的安装教程,但是公司的server是centos6,和ubuntu还有一点区别。leptonica-1.73tesSaract需要用到leptonica,安装leptonica需要另外一些库,ubuntu下的这些库,不知为何centos要用不同的名字:下载官方安装教程。所以最后还是选择autoconf,之后configure指定安装路径,得到头文件和库:Tesseract3.04下载:安装下载pretrained

  9. Tesseract opencv 3.0 windows,文本模块体积小,链接错误

    没有人可以帮助我?

  10. windows 10环境下安装Tesseract-OCR与python集成

    前言Tesseract是一个开源的ocr引擎,可以开箱即用,项目最初由惠普实验室支持,1996年被移植到Windows上,1998年进行了C++化。在2005年Tesseract由惠普公司宣布开源。总结本篇文章介绍了Tesseract在windows环境下的安装配置,同时介绍了如何在python中集成使用,感兴趣的朋友可以尝试一下。

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部