您的位置:首页 > 产品设计 > UI/UE

Tesseract-OCR引擎试用 rebuild on vs2012【testing】

2015-08-05 11:16 507 查看
http://www.tuicool.com/articles/6ZRJzu

  http://blog.csdn.net/zfdxx369/article/details/11540735

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目录下的文件名。

////////////////////////////////////////////////////////////////////////// 

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

///////////////////////////////////////////////////////////////////////
1008c
/// 

编译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://lenky.info/archives/2014/04/2396 或 http://lenky.info/?p=2396

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

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以 Email 或书面等方式告知,本站将及时删除相关内容或链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: