做字符识别,不能不了解google的Tesseract-OCR,但是如何在自己的工程中使用其API倒是语焉不详,官网上倒是很详尽地也很啰嗦地介绍如何重新编译生成适合自己平台的lib和dll,经过近些天的不断搜索和尝试,可算是找了些门路。尤其感谢以下作者的分享带给我的帮助和启发:
cxf7394373的 字符识别Google开源Tesseract-ocr的DLL调用方法
夏梦c的Tesseract3.02简单环境搭建
tsinson的 tesseract下的简单应用
下面开始介绍我的使用经验:
可以从这里http://code.google.com/p/tesseract-ocr/downloads/list 下载
tesseract-ocr-setup-3.02.02.exe | Windows installer of tesseract-ocr 3.02.02 (including English language data) Featured |
然后进行安装,如此可以方便地省去好多配置细节:如修改环境变量【如果不采用环境变量方式,则需要对于每个工程目录建立tessdata文件夹,并且里面放置所需要的chi_sim.traineddata等语言包】,也不再需要下载tesseract-3.02.02-win32-lib-include-dirs.zip, 更方便以后训练出自己的traineddata 文件
需要注意的是,安装目录下lib里面 libtesseract302d.dll 是针对VS2008的,需要用一个vs2010编译出的替换下来才可以在VS2010下正常使用。
另外还需要将 liblept168.dll 和 liblept168d.dll两个文件一并下载放到lib里面。 【这三个文件均可以从tsinson提供的样例工程里面找到】
在环境变量Path中增加指向安装目录下lib的路径,比如C:\Program Files\Tesseract-OCR\lib ,以便exe运行时能找到所需要的dll
在自己的工程属性中VC++目录下增加包含目录和库目录,以便VS2010查找文件。例如
包含目录 下新增:C:\Program Files\Tesseract-OCR\include\tesseract
库目录 下新增: C:\Program Files\Tesseract-OCR\lib
直接将语言训练包放置在安装目录tessdata文件夹下就好,比如将tesseract-ocr-3.02.chi_sim.tar.gz中的chi_sim.traineddata 文件直接抽取出来放在 C:\Program Files\Tesseract-OCR\tessdata 下面,就可以支持中文简体字符的识别啦。当然,自己训练出来的traineddata 文件也是要放在这里的才生效。
这里可以参照cxf7394373的 字符识别Google开源Tesseract-ocr的DLL调用方法
使用其API的一种模式大致是这样:先包含头文件,连接库;然后再定义一个api类,配置好参数之后提取识别结果
#include "strngs.h" #include "baseapi.h" #pragma comment(lib,"libtesseract302d.lib") //////////////// tesseract::TessBaseAPI api; api.Init(NULL, "eng", tesseract::OEM_DEFAULT); //初始化,设置语言包,中文简体:chi_sim;英文:eng;也可以自己训练语言包 //api.SetVariable( "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" ); STRING text_out; if (!api.ProcessPages("kaze.tif", NULL, 0, &text_out)) { //AfxMessageBox("tesseract 处理出现异常"); return 0; } cout<<text_out.string(); cout<<UTF8ToGBK(text_out.string()).c_str();