
基于Tesseract-OCR技术的文字识别优化.docx
6页基于TesseractOCR技术的文字识别优化 曹重阳一、需求分析对天猫平台的企业信息采集下来进行结构化处理,提取出文字信息后汇总进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、对图片进行平滑缩放:有时很多图片本身无法很好的被识别,但当放大适当倍数时,就可增强识别率,但这个“适当倍数”很难把控,它受诸多硬件因素影响,比如电脑配置、针式打印机打印连贯性差等问题 -全文完-。
