首页 > 代码库 > 使用ImageMagick和Tesseract进行简单数字图像识别

使用ImageMagick和Tesseract进行简单数字图像识别

使用ImageMagick和Tesseract进行简单数字图像识别

由于直接使用 tesseract 进行识别,识别率很低, 

ImageMagick 安装、配置及使用: 
平台:winXP 
1. 安装ImageMagick(ImageMagick website:http://www.imagemagick.org/script/index.php) 
    下载并安装ImageMagick。 http://www.imagemagick.org/script/binary-releases.php#windows

 

输入 convert -version 验证是否成功

d:\>convert  -versionVersion: ImageMagick 6.8.9-4 Q16 x64 2014-06-22 http://www.imagemagick.orgCopyright: Copyright (C) 1999-2014 ImageMagick Studio LLCFeatures: DPC Modules OpenMPDelegates: bzlib cairo freetype jbig jng jp2 jpeg lcms lqr pangocairo png ps rsvg tiff webp xml zlib

 

 如果命令不能使用把install path加入系统path,以便能调用dll.如D:\Program Files\ocr\ImageMagick-6.8.9-Q16 

 

下面介绍怎么用Tesseract配合ImageMagick进行简单的数字图像识别。

首先Tesseract只能识别bmp,tif,所以先拿ImageMagick转换一下图像。注意得无压缩转换,否则Tesseract报错。

convert -compress none ./S16.gif./S16.tif

 

然后将图片灰度化-colorspace Gray,或者直接二值化-monochrome成黑白,这样识别率会高一点。

接下来裁剪出想要进行精确识别的部分:-crop widthxheight+x+y

比如-crop 320x40+0+1,从左上角开始坐标为(0,1)处,裁剪出320*40大小的图像。注意参数里是英文字母x,不是乘号*。

还有就是网上搜到的-depth 8和-alpha off参数,实践表明加不加效果不大。

一步完成就像这样:

convert -compress none -depth 8 -alpha off -crop 535x24+2+2 -monochrome ./S16.gif ./S16.tif

 

convert.exe:ImageMagick套件的一部分,负责图片格式转换,各个参数的意义如下: 

  • -compress none:转换后的图片不要压缩,如果没有加这一项,后续tesseract处理的时候会报错:read_tif_image:Error:Illegal image format:Compression 
  • -depth 8:设置转换后图像的色深为8位,也就是bpp为8。如果没有此参数,后果如下: 

Tesseract Open Source OCR Engine 
check_legal_image_size:Error:Only 1,2,4,5,6,8 bpp are supported:16 
Segmentation fault 

  • -alpha off:在转换后的图像中不要添加alpha图层。如果没有此参数,后果同上。 
  • -crop 320x40+0+1:从左上角开始坐标为(0,1)处,裁剪出320*40大小的图像。注意参数里是英文字母x,不是乘号*。
  • 紧跟着就是待转换的图片的文件名,
  • 最后是转换后的图片的文件名。

 

预处理完之后最好再放大一下,这次的样例放大到500%~600%的识别效率就能令人满意。

convert  ./S16.tif -scale 600% ./S16B.tif

然后就可以开始用Tesseract进行识别了。

tesseract ./S16B.tif ./S16B -l eng -psm 7

-l eng是选择语言,-psm 7是说源图像是只在一行上的文字。具体说明看Tesseract的帮助。