首页 > Google开源 > Tesseract-OCR引擎试用

Tesseract-OCR引擎试用

2014年4月20日 发表评论 阅读评论 13,090 次浏览

1,下载:http://code.google.com/p/tesseract-ocr/
tesseract-ocr-setup-3.02.02.exe:http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-setup-3.02.02.exe&can=2&q=
安装到目录:C:\Program Files\Tesseract-OCR

2,默认安装时自动带有英文识别库,要识别简体中文,需要下载文件 tesseract-ocr-3.02.chi_sim.tar.gz:http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-3.02.chi_sim.tar.gz&can=2&q=

下载后解压,将文件chi_sim.traineddata拷贝到目录:C:\Program Files\Tesseract-OCR\tessdata

3,试试使用Tessract-OCR引擎识别文字:
由于在安装过程中已经自动把目录C:\Program Files\Tesseract-OCR加入到系统环境变量,所以打开cmd控制台,即可输入tesseract执行。

用画图工具弄一张图片试试(图中文字为宋体):

D:\>tesseract 1.jpg 1
Tesseract Open Source OCR Engine v3.02 with Leptonica

识别结果为:gaoqunkai lanky

再弄个中文图片试试(图中文字为宋体):

D:\>tesseract 2.jpg 2 -l chi_sim -psm 7 nobatch
Too many unichars in ambiguity on line 17497160
Too many unichars in ambiguity on line 17497160
Too many unichars in ambiguity on line 17517696
Tesseract Open Source OCR Engine v3.02 with Leptonica

识别结果为:甲华入民其矛口国

4,备注:

D:\>tesseract
Usage:tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]

pagesegmode values are:
0 = Orientation and script detection (OSD) only.
1 = Automatic page segmentation with OSD.
2 = Automatic page segmentation, but no OSD, or OCR
3 = Fully automatic page segmentation, but no OSD. (Default)
4 = Assume a single column of text of variable sizes.
5 = Assume a single uniform block of vertically aligned text.
6 = Assume a single uniform block of text.
7 = Treat the image as a single text line.
8 = Treat the image as a single word.
9 = Treat the image as a single word in a circle.
10 = Treat the image as a single character.
-l lang and/or -psm pagesegmode must occur before anyconfigfile.

Single options:
  -v --version: version info
  --list-langs: list available languages for tesseract engine

tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile…]
tesseract 图片名 输出文件名 -l 字库文件 -psm pagesegmode 配置文件

例如:
tesseract 2.jpg 2 -l chi_sim -psm 7 nobatch

-l chi_sim:表示用简体中文字库
-psm 7:表示告诉tesseract 2.bmp图片只有一行文本,从而可以减少识别错误率,默认为3。
configfile:参数值为tessdata\configs和tessdata\tessconfigs目录下的文件名。

//////////////////////////////////////////////////////////////////////////
/////////////////////以下为编译记录,乱七八糟,就这样了/////////////////////
//////////////////////////////////////////////////////////////////////////
编译leptonica依赖库

一,zlib-1.2.8,无其他依赖,源代码里提供有vs2012打开并编译:
1,解压到D:\leptonica\dep\zlib-1.2.8
2,打开“VS2012 x86 本机工具命令提示”,cd到D:\leptonica\dep\zlib-1.2.8\zlib-1.2.8\contrib\masmx86目录。
3,执行命令:D:\leptonica\dep\zlib-1.2.8\zlib-1.2.8\contrib\masmx86>bld_ml32.bat
4,用vs2012打开工程:D:\leptonica\dep\zlib-1.2.8\zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln
5,打开Release的配置,在配置属性 -> 常规,将配置类型改为静态库,MFC的使用改为使用标准 Windows 库,字符集改为使用 Unicode 字符集。C/C++ -> 代码生成,将运行库改为多线程(/MT)。
6,编译生成D:\leptonica\dep\zlib-1.2.8\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease\zlibstat.lib
7,搞定,对应的zlib.h等头文件在D:\leptonica\dep\zlib-1.2.8\zlib-1.2.8目录下。

二,lpng143,依赖zlib,源代码里提供有vs2012打开并编译:
1,解压到D:\leptonica\dep\lpng143
2,打开D:\leptonica\dep\lpng143\lpng143\projects\visualc71\libpng.sln
3,将头文件zconf.h和zlib.h拷贝到D:\leptonica\dep\lpng143\lpng143
4,打开LIB Release的配置,在配置属性 -> 常规,将配置类型改为静态库,MFC的使用改为使用标准 Windows 库,字符集改为使用 Unicode 字符集。C/C++ -> 代码生成,将运行库改为多线程(/MT)。
5,根据编译错误提示:2>LINK : fatal error LNK1181: 无法打开输入文件“D:\leptonica\dep\lpng143\lpng143\projects\visualc71\Win32_LIB_Release\ZLib\zlib.lib”,把库文件zlibstat.lib拷贝到该目录并改名为zlib.lib
6,点击编译,生成文件:libpng.vcxproj -> D:\leptonica\dep\lpng143\lpng143\projects\visualc71\.\Win32_LIB_Release\libpng.lib

三,libjpeg,无其他依赖,源代码里提供有vs2012打开并编译:
1,解压到D:\leptonica\dep\jpegsr8c\jpeg-8c
2,打开“VS2012 x86 本机工具命令提示”,cd到D:\leptonica\dep\jpegsr8c\jpeg-8c目录。
3,执行命令:D:\leptonica\dep\jpegsr8c\jpeg-8c>NMAKE /f makefile.vc setup-v10
4,用vs2012打开工程:D:\leptonica\dep\jpegsr8c\jpeg-8c\jpeg.sln
5,打开Release的配置,在配置属性 -> 常规,将配置类型改为静态库,MFC的使用改为使用标准 Windows 库,字符集改为使用 Unicode 字符集。C/C++ -> 代码生成,将运行库改为多线程(/MT)。
6,编译生成jpeg.vcxproj -> D:\leptonica\dep\jpegsr8c\jpeg-8c\Release\jpeg.lib

四,libtiff,依赖libjpeg和zlib,提供nmake编译:
1,解压到D:\leptonica\dep\tiff-3.9.4\tiff-3.9.4
2,打开“VS2012 x86 本机工具命令提示”,cd到D:\leptonica\dep\tiff-3.9.4\tiff-3.9.4目录。
3,修改nmake.opt

#
# Uncomment and edit following lines to enable JPEG support.
#
JPEG_SUPPORT	= 1
JPEGDIR 	= D:/leptonica/dep/jpegsr8c/jpeg-8c
JPEG_INCLUDE	= -I$(JPEGDIR)
JPEG_LIB 	= $(JPEGDIR)/Release/jpeg.lib

#
# Uncomment and edit following lines to enable ZIP support
# (required for Deflate compression and Pixar log-format)
#
ZIP_SUPPORT	= 1
ZLIBDIR 	= D:/leptonica/dep/zlib-1.2.8/zlib-1.2.8/
ZLIB_INCLUDE	= -I$(ZLIBDIR)
ZLIB_LIB 	= $(ZLIBDIR)/contrib/vstudio/vc11/x86/ZlibStatRelease/zlibstat.lib

#
# Uncomment and edit following lines to enable ISO JBIG support
#
#JBIG_SUPPORT	= 1
#JBIGDIR 	= d:/projects/jbigkit
#JBIG_INCLUDE	= -I$(JBIGDIR)/libjbig
#JBIG_LIB 	= $(JBIGDIR)/libjbig/jbig.lib

#
# Uncomment following line to enable Pixar log-format algorithm
# (Zlib required).
#
PIXARLOG_SUPPORT = 1

...
#下面的/MD改为MT
#OPTFLAGS =	/Ox /MD /EHsc /W3 /D_CRT_SECURE_NO_DEPRECATE
OPTFLAGS =	/Ox /MT /EHsc /W3 /D_CRT_SECURE_NO_DEPRECATE

4,打开“VS2012 x86 本机工具命令提示”,cd到D:\leptonica\dep\tiff-3.9.4\tiff-3.9.4目录。
5,执行D:\leptonica\dep\tiff-3.9.4\tiff-3.9.4>nmake /f makefile.vc
6,生成D:\leptonica\dep\tiff-3.9.4\tiff-3.9.4\libtiff\libtiff.lib

五,giflib,我不需要,而且又比较麻烦,不编译了,囧。

参考:http://www.leptonica.org/vs2008doc/building-image-libraries.html

编译leptonica库
1,构建好目录:
BuildFolder\
include\
jpegsr8c\
leptonica-1.68\
lib\
lpng143\
tiff-3.9.4\
zlib-1.2.8\

2,下载leptonica的Microsoft Visual Studio 2008编译包

http://tpgit.github.com/UnOfficialLeptDocs/leptonica/source-downloads.html#microsoft-visual-studio-2008,并解压到leptonica-1.68目录。

3,把D:\leptonica\BuildFolder\leptonica-1.68\src下的所有头文件拷贝到D:\leptonica\BuildFolder\include目录。

4,打开Release的配置,在配置属性 -> 常规,将配置类型改为静态库,MFC的使用改为使用标准 Windows 库,字符集改为使用 Unicode 字符集。C/C++ -> 代码生成,将运行库改为多线程(/MT)。

5,编译,根据出错信息把各个依赖包的头文件拷贝到D:\leptonica\BuildFolder\include目录。
还有一个类似如下出错提示:
..\src\parseprotos.c(552): error C2057: 应输入常量表达式
将对应的static const变量L_BUF_SIZE换为宏定义:
//static const l_int32 L_BUF_SIZE = 512; /* max token size */
#define L_BUF_SIZE 512

6,编译生成D:\leptonica\BuildFolder\leptonica-1.68\vs2008\LIB Release\liblept168-static-mtdll.lib。

参考:http://www.leptonica.org/vs2008doc/building-liblept.html

编译Tesseract-OCR库
1,下载源码:tesseract-ocr-3.02.02.tar.gz和tesseract-ocr-3.02-vs2008.zip

2,将两个包分别解压到
D:\tesseract-ocr-3.02.02

D:\tesseract-ocr-3.02.02\vs2008
注意vs2008在tesseract-ocr目录之下。

3,用vs2012打开vs2008里的tesseract.sln工程文件进行升级。

4,编辑libtesseract302项目属性,在VC++目录的包含目录里添加D:\leptonica\BuildFolder\include
在配置属性 -> 常规,将配置类型改为静态库,MFC的使用改为使用标准 Windows 库。C/C++ -> 代码生成,将运行库改为多线程(/MT)。

5,右键点击libtesseract302项目项目,选择生成。有个错误是源文件equationdetect.cpp里存在unicode字符,所以将该文件转换为unicode格式(用notepad ++的格式菜单,转换为UCS-2 Big Endian编码格式即可)。
正常编译生成:D:\tesseract-ocr-3.02.02\vs2008\LIB_Release\libtesseract302-static.lib

VC程序调用库Tesseract-OCR
5,vc调用库Tesseract-OCR
a,首先下载tesseract-3.02.02-win32-lib-include-dirs.zip:https://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-3.02.02-win32-lib-include-dirs.zip&can=2&q=

b,将压缩包解压到vc工程对应的目录下(或其他任意目录,比如d:也可以),我这里是vs2012建立的一个mfc工程,也就是在D:\TexasPoker\TexasPoker\tesseract-3.02.02-win32-lib-include-dirs。

c,通过菜单:项目(P) -> 属性(P),打开test属性页。
选择:配置属性 -> VC ++目录,在右边的包含目录和引用目录分别加入tesseract的include目录(D:\tesseract-3.02.02-win32-lib-include-dirs\include)和lib目录(D:\tesseract-3.02.02-win32-lib-include-dirs\lib)。
再选择:配置属性 -> 连接器 -> 常规,在右边的附加库目录加入tesseract的lib目录(D:\tesseract-3.02.02-win32-lib-include-dirs\lib)
再选择:配置属性 -> 连接器 -> 输入,在右边的附加依赖项里加入tesseract的lib库文件,比如静态链接就加入libtesseract302-static.lib。
解决方案配置Debug和Release都需做以上配置操作。

	//初始化,设置语言包,中文简体:chi_sim;英文:eng;也可以自己训练语言包
	//int rst = m_TessBaseAPI.Init(NULL, "chi_sim", tesseract::OEM_DEFAULT);
    //api.SetVariable( "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" );

	char *str = "username.bmp";  

    STRING text_out;
	bool rst2 = m_TessBaseAPI.ProcessPages(str, NULL, 0, &text_out);
    if (!rst2)
        return;

	const char *rst3 = text_out.string();

	return;

	m_TessBaseAPI.SetImage((unsigned char*)userNameImage->imageData, userNameImage->width,
		userNameImage->height, userNameImage->nChannels, userNameImage->widthStep);

	char *outText = m_TessBaseAPI.GetUTF8Text();
	CString rstCString(outText);
	fprintf(stderr, "%s", outText);
	delete []outText;
	m_TessBaseAPI.Clear();

转载请保留地址:http://www.lenky.info/archives/2014/04/2396http://lenky.info/?p=2396


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. 5guo
    2014年8月8日15:05 | #1

    是吗?Tesseract不是自动支持各种常见图片格式么?我已经安装好了Tesseract的Windows版,就是用cmd敲命令是别的,发现可以支持bmp、jpeg等。搭建VS2010工程应该不需要特意编译各种图片格式的库吧?

  2. 5guo
    2014年8月1日15:41 | #2

    我想用TesseractOCR来开发一个小软件,用VS2010 不知道从何入手,我觉得我首先应该吧源码跑通,不知道,这篇文章的后半部分用处是什么,编译了各种库是为了什么(问题比较低级,希望多指教)?

    • lenky
      2014年8月1日20:22 | #3

      你还没有开始编译TesseractOCR吧,一开始编译就发现要依赖其他的库,所以你就得先去编译其他的各种库。
      比如用TesseractOCR去识别png格式图片上的文字,那么是否需要先解析png格式图片?而TesseractOCR本身并没有提供解析png格式图片的支持,所以这就需要lpng库,而lpng本身又用到了解/压缩,需要依赖zlib库,这样一层一层。

  3. 5guo
    2014年7月30日17:07 | #4

    请问版主,从编译记录开始我就有些看不懂了,编译leptonica依赖库是为什么,leptonica依赖库是个什么东东?

    • lenky
      2014年7月31日10:12 | #5

      就是leptonica会依赖一些其他库,比如zlib、lpng等,编译leptonica前需要先编译获得这些依赖库。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.