tesseract-ocr

本文详细介绍了tesseract-OCR3的训练过程、使用方法及注意事项,包括标记边框、形成语言库、测试语言库等步骤,并提供了一个VB.NET下的使用示例代码。此外,还分享了如何解决安装后找不到字库的问题,以及如何优化中文识别速度的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.cnblogs.com/zcsor/archive/2011/02/21/1959555.html

关于tesseract-ocr3的训练和使用

众所周知,这是一个出色的字符识别软件。这个开源项目可以在http://code.google.com/p/tesseract-ocr/downloads/list下载。

在使用时,建议使用3而不要使用2,因为一些原因,2虽然可以直接用在工程,但是由于一些显而易见的BUG和其他原因,多导致程序无法运行甚至崩溃。所以建议使用命令行版本的3 。

除了下载tesseract安装程序以外,还可以在下载页面下载一些语言库,当然,也可以在安装过程中选择一些语言库来进行安装。

一、训练

在很多时候,默认的字库等完全可以高准确度的识别,但是有些时候我们需要训练自己的库来使用。训练步骤如下:

注:

A、均以DOS命令为例,即将每步下面的命令保存为.BAT运行,或运行CMD进入tesseract所在目录运行

B、注意保证文件名的一致性(此处均为DDT)

0、复制training目录下的全部文件到tesseract3所在目录

copy .\training\*.exe .\

1、标记边框

tesseract ddt.tif ddt -l eng digits batch.nochop makebox

解释一下

ddt.tif为要识别的文件,支持jpg,gif,tiff等格式,建议用tif

ddt 为要保存的文件名(自动添加扩展名.box)

-l eng 使用的库,这个参数可以让我们选择用哪个字库来标记边框

后面的都是配置文件了,也就是tesseract的其他参数被以文件形式加载,而不是直接输入参数

digits指定了只识别0-9的数字(当然你可以编辑它,使它包含更多的字符),当你不需要指定时,一定要去掉这个参数,但使用这种字符集限定,可以最大程度上减少被错误识别搞的你编辑ddt.box头昏脑胀的几率。

注:

这一步非常关键,但也经常出现问题,即使你在http://code.google.com/p/bbtesseract/downloads/list下载了bbtesseract也是如此,所以我感觉应该自己编一个边框识别,但没有时间做。完全可以将命令写入到软件里,实现图形化。所以,注意编辑你生成的ddt.box文件,保证字符都被识别且边框正确。

这里也有一个小技巧,例如我做过这样一个tif:1.2-34567089,在这一步的时候,只识别了2-9这一部分,于是我修改tif为:001.2-34567089,就全部识别了。也许可以给你一些启示。

2、形成语言库

tesseract ddt.tif ddt -l eng digits nobatch box.train
unicharset_extractor ddt.box
rename unicharset ddt.unicharset
mftraining -U unicharset -O ddt.unicharset ddt.tr
rename inttemp ddt.inttemp
rename pffmtable ddt.pffmtable
rename Microfeat ddt.Microfeat
cntraining ddt.tr
rename normproto ddt.normproto
combine_tessdata ddt.

这里面包含了若干步骤,但其他人扒的“教程”已经啰嗦很多了,不再啰嗦。

注:那几个rename是必要的,因为生成的文件只有扩展名。只要注意了这些,就没问题了。

3、测试语言库

copy ddt.traineddata .\tessdata\ddt.traineddata

tesseract ddt.tif ddt -l ddt
notepad ddt.txt

如果测试失败了,你应该检查:

A、是否tif宽度太小,如果是,我建议你在下面增加一行,就是说把1行改成2行,增加什么呢,随意增加一些你字库里面的字符,但最好和图像一样宽。

B、如果还没正确识别,回头仔细检查你的ddt.box

如果你失败了,记得清理前面生成的文件,可以使用一下命令:

copy ddt.tif tmp.tif
del ddt.* /f /s
copy tmp.tif ddt.tif
del tmp.tif

然后从第一步重新来过。

二、使用

使用时,只需要注意,对于单行并且字符数较少的图像,如果不识别,最好是在下面添加一行无用行,并保证该行基本达到图像宽。

注:

在使用时,可能会发生找不到字库的情况(尤其当你卸载后重装tesseract时),此时,应修改

HKEY_CURRENT_USER\Environment\TESSDATA_PREFIX的值为你的tesseract所在目录。

三、示例

最后给出一个tesseract3在VB.NET下使用的示例代码。

PublicClassTessOCR

DimpathAsString=My.Application.Info.DirectoryPath&"\tesseract3\"

SubNew()
My.Computer.Registry.CurrentUser.OpenSubKey("Environment",True).SetValue("TESSDATA_PREFIX",path)
EndSub

PublicFunctionTess3OCR(ByValRectAsRectangle,ByValclrAsInteger)AsString
'建立图像,注意屏幕复制时使用SourceCopy以符合OCR要求的图像格式,否则出错或直接关闭
DimbmpAsBitmap=NewBitmap(Rect.Width,Rect.Height*2)
DimgrAsGraphics=Graphics.FromImage(bmp)
gr.Clear(Color.White)
gr.CopyFromScreen(Rect.Location,Point.Empty,Rect.Size,CopyPixelOperation.SourceCopy)
'校正为白纸黑字
ForyAsInteger=0Tobmp.Height-1
ForxAsInteger=0Tobmp.Width-1
Ifbmp.GetPixel(x,y).ToArgb=clrThenbmp.SetPixel(x,y,Color.Black)Elsebmp.SetPixel(x,y,Color.White)
Next
Next
DimstrAsString=IIf(clr=AngleColor,"45.000000","0.000000")
gr.DrawString(str,NewFont("ArialBlack",14),Brushes.Black,0,Rect.Height)

bmp.Save(path&"tmp.tif",System.Drawing.Imaging.ImageFormat.Tiff)
Shell(path&"tesseract"&path&"tmp.tif"&path&"tmp-lddtdigits",AppWinStyle.Hide,True)
My.Computer.FileSystem.DeleteFile(path&"tmp.tif")
DimretAsString=My.Computer.FileSystem.ReadAllText(path&"tmp.txt").Split(vbCrLf)(0)
My.Computer.FileSystem.DeleteFile(path&"tmp.txt")
Returnret
EndFunction

End Class

在代码的new函数中,我修改了注册表,以防止出错,更好的做法应该是在这之前记录原始值并在类销毁时恢复。之后,指出了屏幕复制时可能存在的一些问题,当然,如果你是取验证码啥的,那就不用关心这些了。然后对图像进行了简单的校正,需要注意的是,必须校正为白底黑字才行,否则不识别。而后,我在下面添加了一行无用的文字,并在返回值时进行了适当处理。再有一点需要注意的是,shell函数的最后一个参数,指出了等待调用进程结束,如果你要在vb6当中使用,这里就需要用api来实现等待——而不要用sleep等定时等待函数,那将会使得你的程序不够健壮。

转自:http://blog.youkuaiyun.com/foxwit/article/details/6547465

OCR识别引擎tesseract使用方法

最近一直跟OCR打交道,学习了下google的OCR引擎TESSERACT,是个很好的识别工具。tesseract-3.0已支持版面分析,功能很强大。安装tesseract前可选择性地安装leptonica和libtiff。不过建议先安装这两个库。不安装tiff的话只能处理bmp文件。

这里只是说明怎么识别中文。依次安装好libtiff,leptonica和tesseract后,下载简体中文和繁体中文的训练数据,在tesseract的下载页可以找到。放到某个目录的tessdata文件夹下。然后设置环境变量TESSDATA_PREFIX=tessdata的目录。然后,新建一个ocr.cpp文件,编写如下代码:

#include <mfcpch.h>

#include <ctype.h>

#include <sys/time.h>

#include "applybox.h"

#include "control.h"

#include "tessvars.h"

#include "tessedit.h"

#include "baseapi.h"

#include "thresholder.h"

#include "pageres.h"

#include "imgs.h"

#include "varabled.h"

#include "tprintf.h"

#include "stderr.h"

#include "notdll.h"

#include "mainblk.h"

#include "output.h"

#include "globals.h"

#include "helpers.h"

#include "blread.h"

#include "tfacep.h"

#include "callnet.h"

#include "allheaders.h"

int main(int argc,char **argv){

if(argc!=3){

printf("usage:%s <bmp file> <txt file>/n",argv[0]);

return -1;

}

char *image_file=argv[1];

char *txt_file=argv[2];

STRING text_out;

struct timeval beg,end;

tesseract::TessBaseAPI api;

IMAGE image;

api.Init(argv[0], "chi_sim", NULL, 0, false);//初始化api对象

api.SetPageSegMode(tesseract::PSM_AUTO);//设置自动进行版面分析

api.SetAccuracyVSpeed(tesseract::AVS_FASTEST);//要求速度最快

if (image.read_header(image_file) < 0) {//读取bmp文件的元信息

printf("Read of file %s failed./n", image_file);

exit(1);

}

if (image.read(image.get_ysize ()) < 0){//读取bmp文件

printf("Read of image %s error/n", image_file);

exit(1);

}

invert_image(&image);//反转图像的每个像素,即使1变0,0变1

int bytes_per_line = check_legal_image_size(image.get_xsize(),

image.get_ysize(),

image.get_bpp());//计算每一行像素所占字节数

api.SetImage(image.get_buffer(), image.get_xsize(), image.get_ysize(),

image.get_bpp() / 8, bytes_per_line);//设置图像

gettimeofday(&beg,NULL);

char* text = api.GetUTF8Text();//识别图像中的文字

gettimeofday(&end,NULL);

printf("%s:reconize sec=%f/n",argv[0],end.tv_sec-beg.tv_sec+(double)(end.tv_usec-beg.tv_usec)/1000000.0);//打印识别的时间

text_out += text;

delete [] text;

FILE* fout = fopen(txt_file, "w");

fwrite(text_out.string(), 1, text_out.length(), fout);//将识别结果写入输出文件

fclose(fout);

}

再编写一个makefile文件如下:

all:ocr

CFLAGS=-Wall -g

LDFLAGS= -lz -lm -ltesseract_textord /

-ltesseract_wordrec -ltesseract_classify -ltesseract_dict -ltesseract_ccstruct/

-ltesseract_ccstruct -ltesseract_cutil -ltesseract_viewer -ltesseract_ccutil/

-ltesseract_api -ltesseract_image -ltesseract_main -llept

LD_LIBRARY_PATH =

INCLUDES= -I/usr/local/include/tesseract/ -I/usr/local/include/leptonica/

%.o:%.cpp

g++ -c $(CFLAGS) $(INCLUDES) $(SOURCE) -o $@ $<

ocr:ocr.o

g++ -o $@ $^ -g $(LD_LIBRARY_PATH) $(LDFLAGS)

clean:

rm ocr.o

在该目录下运行make编译成可执行文件ocr,运行./ocr 1.bmp 1.txt就可以将图像1.bmp识别结果写到1.txt了,程序会打印识别的时间。值得注意的是,tesseract中文识别速度很慢,运行几分钟很正常。不知有哪位大虾知道怎么调优?

更郁闷的是tesseract不支持多线程,不能在同一进程中运行多个实例。

其他参考博客:

1、http://blog.youkuaiyun.com/zhoushuyan/article/details/5948289

2、http://www.blogjava.net/wangxinsh55/archive/2011/03/22/346787.html

3、http://haiquan.iteye.com/blog/945701

4、http://www.cnblogs.com/brooks-dotnet/archive/2010/10/05/1844203.html

5、http://www.cnblogs.com/physoft/archive/2011/07/15/2107417.html

6、http://hi.baidu.com/kuliuheng/blog/item/aae32d32216a9fcda2cc2ba1.html

7、http://code.google.com/p/leptonica/downloads/list

8、http://tesseract-ocr.repairfaq.org/

9、http://blog.wudilabs.org/entry/f25efc5f/

<think>好的,我现在需要帮助用户了解Tesseract OCR的安装和使用方法。首先,用户的问题是关于Tesseract的使用指南以及下载安装步骤。根据用户提供的引用内容,引用[1]和引用[2]中提到了安装步骤和Tesseract的基本信息。 首先,我应该先整理安装步骤。引用[1]提到双击安装程序,默认路径是C:\Program Files\Tesseract-OCR。需要确保用户下载正确的安装程序,可能还需要说明从哪里下载,比如官方GitHub或UB-Mannheim的Windows安装包。此外,用户可能需要知道如何验证安装是否成功,比如在命令行输入tesseract -v。 接下来是配置环境变量。虽然引用中没有详细说明,但根据经验,安装后可能需要将Tesseract的路径添加到系统PATH中,这样用户可以在任何目录下使用tesseract命令。需要分步骤说明如何操作,包括系统属性的设置。 然后是关于语言包的安装。引用[2]提到Tesseract支持多种语言,所以用户可能需要下载额外的语言数据。通常,安装后可以通过命令下载,比如使用tesseract --list-langs查看已安装的语言,或者通过下载.traineddata文件放到tessdata目录下。 使用指南部分,用户可能需要基本命令示例,比如识别图像文件,输出结果。引用中的Python代码示例可能需要调整,比如使用pytesseract库调用Tesseract。需要说明如何安装pytesseract和配置Tesseract路径,以及简单的代码示例。 此外,用户可能遇到常见问题,比如路径错误、语言包缺失,或者图像预处理的问题。需要提醒用户确保图像清晰,可能需要调整对比度或使用图像处理库如PIL进行预处理。 最后,生成相关问题时要考虑用户可能的后续疑问,比如支持的语言、提高识别准确率的方法、处理多语言文档,以及如何在其他编程语言中使用Tesseract。 需要检查所有步骤是否符合用户的操作系统,这里引用提到的是Windows安装,但如果有其他系统用户可能需要额外说明,但用户的问题中没有提到,可能暂时专注于Windows。同时,确保LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但当前内容可能不涉及数学公式,但需要留意。回答使用中文,结构清晰,分步骤说明,并引用标记。</think>### Tesseract OCR 使用指南 #### 一、Tesseract OCR 安装步骤 1. **下载安装程序** - 访问 [UB-Mannheim的Windows安装包](https://github.com/UB-Mannheim/tesseract/wiki) 或 [Tesseract官方GitHub](https://github.com/tesseract-ocr/tesseract) - 选择适配系统版本的安装文件(如 `tesseract-ocr-w64-setup-5.3.3.20231005.exe`)[^1]。 2. **运行安装程序** - 双击下载的安装文件,按提示操作。 - **关键步骤**:安装路径建议保持默认 `C:\Program Files\Tesseract-OCR`,勾选 **Additional language data** 以下载英语等基础语言包。 3. **验证安装** - 打开命令行输入命令: ```bash tesseract -v ``` - 若显示版本号(如 `tesseract 5.3.3`),则安装成功。 --- #### 二、环境变量配置(Windows) 1. **添加Tesseract到系统PATH** - 右键“此电脑” → 属性 → 高级系统设置 → 环境变量 → 编辑系统变量 `Path` → 新增路径: ``` C:\Program Files\Tesseract-OCR ``` 2. **语言包目录配置** - 确保语言数据文件(如 `eng.traineddata`)位于 `tessdata` 目录下(默认路径:`C:\Program Files\Tesseract-OCR\tessdata`)。 - 下载其他语言包:[Tesseract语言数据仓库](https://github.com/tesseract-ocr/tessdata),将 `.traineddata` 文件复制到 `tessdata` 目录[^2]。 --- #### 三、基本使用示例(Python) 1. **安装Python库** ```bash pip install pytesseract pillow ``` 2. **代码示例:识别图像文字** ```python import pytesseract from PIL import Image # 设置Tesseract路径(若未添加环境变量需手动指定) pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 打开图像并识别 image = Image.open('example.png') text = pytesseract.image_to_string(image, lang='eng+chi_sim') # 中英文混合识别 print(text) ``` 3. **命令行直接调用** ```bash tesseract example.png output -l eng+chi_sim ``` --- #### 四、提高识别准确率的技巧 1. **图像预处理** - 使用图像处理库(如OpenCV/PIL)调整对比度、去噪、二值化等。 - 示例代码(灰度化 + 二值化): ```python image = Image.open('example.png').convert('L').point(lambda x: 0 if x < 128 else 255) ``` 2. **指定识别参数** - 通过 `--psm` 调整页面分割模式(如 `--psm 6` 假设图像为统一文本块)[^2]: ```python text = pytesseract.image_to_string(image, config='--psm 6') ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值