Tesseract-ocr在vs2008环境下的调用方法

来源:互联网 发布:java main函数参数 编辑:程序博客网 时间:2024/05/01 00:41

       本文将介绍vs平台上如何使用tesseract实现OCR。 tesseract出生于HP实验室,如今由Google负责维护,是最好的开源OCR Engine之一,并且3.0版本以上的都支持中文。官网上有很详细的用英文介绍如何在vs2008上编译生成lib和dll,感兴趣的可以去看看。 使用tesseract-ocr后,又发现tesseract -ocr依赖leptonica,于是,干脆把leptonica也弄弄好了。尤其感谢以下作者的分享带给我的帮助和启发:

cxf7394373的 字符识别Google开源Tesseract-ocr的DLL调用方法

arvin_xiaoting的【图像识别】 图像处理和图像分析(leptonica)leptonica-1.68安装配置 (vs2008)

智慧视觉的【Tesseract-OCR】在VS2010环境下调用API方法---简单快速之总结


一、本文用的是tesseract-ocr-3.02.02的下载地址:http://code.google.com/p/tesseract-ocr/downloads/list 

tesseract-ocr-setup-3.02.02.exeWindows installer of tesseract-ocr 3.02.02 (including English language data)   Featuredhttp://www.leptonica.com/ 可以下载: leptonica-1.68.tar.gz    leptonica-1.68-win32-lib-include-dirs.zip  //头文件和lib

然后开始安装tesseract-ocr,直接安装在C:\Program Files\Tesseracr-OCR中,如此很方便,省去很多配置,如很多修改环境变量 [如果不采用如下修改环境变量方式,则需要对每个工程目录建立tesseract文件夹,并且在里面放置所需要的chi_sim.traineddata等语言包]也不再需要下载tesseract-3.02.02-win32-lib-include-dirs.zip, 更方便以后训练出自己的traineddata 文件。

解压 leptonica-1.68-win32-lib-include-dirs.zip  //头文件和lib,把其中需要的dll放到你的工程目录下。因为运行过程中需要调用liblept168.dll这个动态链接库。否刚的话,肯定会报这个“liblept168.dll找不到”的。 即把liblept168.dll 和 liblept168d.dll这两个文件一并放到C:\Program Files\Tesseracr-OCR\lib里面。

二、修改环境变量Path

在环境变量Path中增加指向安装目录下lib的路径,比如C:\Program Files\Tesseract-OCR\lib  ,以便exe运行时能找到所需要的dll

三、工程中属性中增加路径

在自己的工程属性中工具->选项->项目和解决方案->VC++目录下增加包含目录和库目录,以便VS2008查找文件。

在显示以下内容的目录中   

包含文件  下新增: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 下面,就可以支持中文简体字符的识别。当然,自己训练出来的sam.traineddata 文件也是要放在这里的才生效。

五、API简单使用方法

所有配置完成后,可以建立工程进行测试。

这里可以参照cxf7394373的 字符识别Google开源Tesseract-ocr的DLL调用方法

使用API的一种模式大致是这样:先包含头文件,连接库;然后再定义一个api类,配置好参数之后提取识别结果

#include <cv.h>
#include <highgui.h>
#include "strngs.h"
#include "baseapi.h"  
#include <iostream>
using namespace std;
#pragma  comment(lib,"libtesseract302d.lib")  
  
int main()
{
IplImage *img=NULL;
img=cvLoadImage("C:\\Users\\Administrator\\Desktop\\zifu\\tif_AccuractlyLocation\\plate26.jpg",-1);
tesseract::TessBaseAPI api;
api.Init(NULL,"sam",tesseract::OEM_DEFAULT);//初始化,设置语言包,中文简体:chi_sim;英文:eng;也可以自己训练语言包  
//api.SetVariable( "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" );    


api.SetImage((unsigned char*)(img->imageData), img->width, img->height,img->nChannels  , img->widthStep);//设置图像
char* text = api.GetUTF8Text();//识别图像中的文字
FILE* fout = fopen("txt_file.TXT", "w");
fprintf(fout,"%s\n",text);
fclose(fout);
return 0; 
}




0 0
原创粉丝点击