基于Tesseract—OCR技术的文字识别优化

假如想象 提交于 2020-01-26 23:48:05

 

一、需求分析

对天猫平台的企业信息采集下来进行结构化处理,提取出文字信息后汇总进Excel作为交付文件。

主要的功能设计如下:

1、程序能够自动读取企业工商信息图片所在的文件夹路径,并从文件夹路径中顺序取出图片进行识别,最终的识别结果以一份汇总的Excel交付。

2、因为天猫平台公示的图片内容没有固定格式,所以需要程序能匹配不同格式的图片内容提取信息。

3、能够提取出图片中的企业注册号、企业名称数据项,企业注册号、企业名称数据项要进行分析处理。

4、识别准确率需要保证在95%以上。

5、识别速度保持在60秒识别50张图片。

二、本程序处理图片方面的关键模块

1、对图片进行切割:

要求识别的文字信息“企业名称”“企业注册号”位于整个图片的其中一部分,把剩余部分切除,只留下关键信息部分,不但可以提高识别速度,还可提升识别率。

2、在进行图片的二值化时,有两种方式:

(1)图片为彩色时,宜找到每个像素点合适的灰色度,因为每个像素点的灰色度不同程度上受到周边像素加权影响,从而影响整个图片的识别率。比如本像素点加上周围8个灰度值再除以9,算出其相对灰度值。

(2)图片为黑白色时,宜采用max-min方法对图片进行二值化。

针对本程序识别的图片的黑白色对比明显,故采用max-min方法进行二值化。

private static File binaryImage(File orcFile) throws IOException {

// 获取图片的BufferedImage对象

BufferedImage bi = ImageIO.read(orcFile);

int h = bi.getHeight();// 获取图片的高

int w = bi.getWidth();// 获取图片的宽

BufferedImage nbi = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_BINARY);

// 设置合适的经验阈值,对二值化的识别效果起重要作用

int threshold = new Color(20, 20, 20).getRGB();// 阈值对应的颜色位于黑色文字和偏黑色背景颜色区间即可

for (int x = 0; x < w; x++) {

for (int y = 0; y < h; y++) {

// 二值化處理

if (bi.getRGB(x, y) > threshold) {

int max = new Color(255, 255, 255).getRGB();

nbi.setRGB(x, y, max);

} else {

int min = new Color(0, 0, 0).getRGB();

nbi.setRGB(x, y, min);

}

}

}

// 将二值化处理后的图片放于D:\\orc_cut_binary下

String orcFileName = orcFile.getName();

String binaryDir = "D:\\orc_cut_binary";

File dir = new File(binaryDir);

// 存储目录不存在,则创建目录

if (!dir.exists()) {

dir.mkdirs();

}

File binaryFile = new File(binaryDir + "/" + orcFileName.substring(0, orcFileName.indexOf(".")) + "binary.png");

ImageIO.write(nbi, "png", binaryFile);

return binaryFile;

}

3、在选取二值化中的经验阈值,我们有以下思路:

(1)二值化微分计算阈值

(2)二值化类卷积的对梯度变化加强得到阈值

对24位位图进行中值滤波会改变RGB各分量的值,所以图片的颜色会发生变化,但对于8位的位图,由于都是灰度的颜色,所以变化并不明显,而且滤波的窗口选的越大,对应的滤波效果的模糊度也会上升。

4、增加图片的亮度:

增加图片亮度可以使有些彩色图片的识别率大大增加,本程序别的图片为黑白照片,增加图片亮度提升的识别率并不乐观。

5、对图片的边缘进行尖锐化处理:

锐化可以快速调整图像边缘细节的对比度,并在边缘的两侧生成一条亮线一条暗线,使画面整体更加清晰。对于高分辨率的输出,通常锐化效果在屏幕上显示比印刷出来的更明显。在图片的Alpha值保持不变的情况下,本程序前期也进行了锐化处理,但效果并不明显,有时识别率甚至可能低于未锐化处理的图片。

6、对图片进行平滑缩放:

有时很多图片本身无法很好的被识别,但当放大适当倍数时,就可增强识别率,但这个“适当倍数”很难把控,它受诸多硬件因素影响,比如电脑配置、针式打印机打印连贯性差等问题。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!