一、技术介绍
OCR(OpticalCharacterRecognition):光学字符识别,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。
二、应用
1.证件OCR识别
是利用扫描仪、数码相机、或手机相机拍摄各种证件图像(二代身份证、护照、驾照、行驶证等),快速扫描并通过OCR技术读取证件图像上的所有文字信息,并通过结构化数据提取算法自动判别证件上的各栏位信息,输出结构化信息,并存入证件信息数据库。目前常用的证照识别有身份证识别、驾照识别、行驶证识别、名片识别、银行卡识别、护照识别、结婚证识别、户口本识别等等。
2.银行卡OCR识别
银行卡OCR识别主要用于移动支付绑卡,是一项非常有技术含量的细分OCR技术,目前有一些APP已经在用,如支付宝,微信等。
3.名片OCR识别
名片OCR识别这一类技术也非常成熟了,目前市场上名片管理的APP也非常多,多半已经使用这类技术。
4.文档OCR识别
文档识别主要应用于学习工作等一些关于文档处理的办公领域,可以快速高效利用OCR技术对文案文档、书籍、表格、说明书、简历、合同等各类纸质文档进行识别,另外可以通过云端技术将识别后的内容以及图像上传到服务器进行备份储存,并具备方便的检索功能,可以使用户简单方便的找到备份的内容。同时,也可以识别原文档的排版,按原排版格式将识别结果输出到word或pdf等格式,便于文档电子化形成和保存。
5.票据OCR识别
票据OCR识别顾名思义用于各式各样的票据识别,基于模板机制,需要针对不同的票据,定制不同的识别要素,这项技术也称要素识别OCR,最早的其实运用的是银行行业,现在企业、金融、电信机构都在使用。
6.车牌OCR识别
车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,通过车牌提取、图像预处理、特征提取、车牌字符识别等技术,识别车辆牌号、颜色等信息,目前最新的技术水平为字母和数字的识别率可达到99.7%,汉字的识别率可达到99%。
7.街景文字识别
预计未来OCR技术的应用会扩展大自然场景下文字识别的应用,比如街景文字识别、路牌识别、AR技术等,盲人带上智能眼镜后可以进行各种物体的识别,同时也可以像阅读周围环境出现的各种文字信息,尽可能的像正常人一样走在大路上,或许也有一天,带上盲人智能眼镜,可以很好的阅读书籍、报纸和杂志上的信息。
三、OCR的技术路线
典型的OCR的技术路线如下图所示
其中影响识别准确率的技术瓶颈是文字检测和文本识别,而这两部分也是OCR技术的重中之重。
在传统OCR技术中,图像预处理通常是针对图像的成像问题进行修正。常见的预处理过程包括:几何变换(透视、扭曲、旋转等)、畸变校正、去除模糊、图像增强和光线校正等。
文字检测即检测文本的所在位置和范围及其布局。通常也包括版面分析和文字行检测等。文字检测主要解决的问题是哪里有文字,文字的范围有多大。
文本识别是在文本检测的基础上,对文本内容进行识别,将图像中的文本信息转化为文本信息。文字识别主要解决的问题是每个文字是什么。识别出的文本通常需要再次核对以保证其正确性。文本校正也被认为属于这一环节。而其中当识别的内容是由词库中的词汇组成时,我们称作有词典识别(Lexicon-based),反之称作无词典识别(Lexicon-free)。
四、技术、环境、开发工具
Java语言、JDK(JDK8以上版本)、Maven仓库、IDEA(开发工具)
五、解决方案
1.收费
(1)阿里云
(2)腾讯云
2.免费
(1)百度api接口
(2)Tess4J(本次开发使用)
六、代码案例演示
Java图片识别–Tess4j安装
Tess4J简介
Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选。而Tess4J则是Tesseract在JavaPC上的应用。在英文和数字识别中性能还是不错的,但是在中文识别中,无论速度还是识别率还是较弱,建议有条件的话,针对场景进行训练,会获得较好结果。
Tess4J的使用
1.Maven导入依赖
net.sourceforge.tess4jtess4j5.2.1
2.添加Tessdata语言库
网址:mirrors / tesseract-ocr / tessdata · GitCode
下载下面这个字库文件:
【注意】路径中不得有中文
3.准备图片资源
【注意】路径中不得有中文
4.编写代码
package cn.zcj;import net.sourceforge.tess4j.Tesseract;import net.sourceforge.tess4j.TesseractException;import java.io.File;public class tess4jDemo {public static void main(String[] args) {//图片路径String path = "D:\\IDEA\\img\\1.png";//语言位置String languagePath = "D:\\IDEA\\tess4j";File file = new File(path);Tesseract instance = new Tesseract();//设置训练库位置instance.setDatapath(languagePath);//chi_sim:简体中文,eng根据需求选择语言库instance.setLanguage("chi_sim");String result = null;try{result = instance.doOCR(file);}catch (TesseractException e){e.printStackTrace();}System.out.println("图片中的文字为:"+result);}}
输出结果为: