赞
踩
最近公司需要将一批登记表的图片,手动更名为编码 .jpg,而这个编码号可以在登记表中找到。于是,上网调研,发现具有现成简单的技术来做图片识别。
java + tess4j + Tesseract-OCR
步骤1:
首先安装 Tesseract-OCR 客户端。
客户端下载地址:https://digi.bib.uni-mannheim.de/tesseract/ <博主使用这个下载的客户端 使用版本为[v4.0.0-beta.4.20180912.exe]>
github项目地址:https://github.com/tesseract-ocr/ <博主使用这个查看的资料>
安装完成后的目录结构
其中重要的2个程序为 当前目录下的tesseract.exe
使用cmd可以直接使用 tesseract.exe 程序
tessdata/ 识别的语言库
步骤2:
新建一个java项目,引入依赖
<dependencies>
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
tess4j 尽量和 Tesseract-OCR 版本相匹配。 <博主遇到一次问题,版本不匹配,tess4J 输出日志也十分简短,后来提高版本解决>
步骤3:
代码实现:
File srcFile = new File("C:\\Users\\a9747\\Desktop\\jpg2\\Y0523-0631\\Y0523-0631\\Image_00056.jpg"); BufferedImage bufferedImage = ImageIO.read(srcFile); ITesseract instance =new Tesseract(); //设置安装Tesseract-OCR目录下的 tessdata文件夹 instance.setDatapath("D:\\orc5\\Tesseract-OCR\\tessdata"); //选择语言 instance.setLanguage("chi_sim"); try{ System.out.println("开始识别"); //Rectangle 为识别图片的范围,可以不传这个参数 String result = instance.doOCR(bufferedImage,new Rectangle(471,359,430,85)); //识别到的文本内容 System.out.println(result); Pattern pattern =Pattern.compile("(01[0-9]{10}|320[0-9]{9})"); Matcher matcher = pattern.matcher(result); if(matcher.find()){ String number = matcher.group(); System.out.println("识别到编号:"+number); } }catch (Exception e){ e.printStackTrace(); } }
github项目地址中有各国语言的训练数据,可以下载到本地。
如果发现识别出来的效果达不到自己需要的效果,可以选择:
* 切换使用语言库
* 更加精准的定义需要识别的区域
* 网上寻找更好的训练数据
* 自己训练语言数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。