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

来源:互联网 发布:企业文件管理系统源码 编辑:程序博客网 时间:2024/06/09 08:12

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 1Tesseract Open Source OCR Engine v3.02 with Leptonica

识别结果为:gaoqunkai lanky

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

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

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

4,备注:

D:\>tesseractUsage: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 OCR3 = 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= 1JPEGDIR = D:/leptonica/dep/jpegsr8c/jpeg-8cJPEG_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= 1ZLIBDIR = 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_DEPRECATEOPTFLAGS =/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 或书面等方式告知,本站将及时删除相关内容或链接


0 0
原创粉丝点击