这篇文章主要介绍“java怎么使用tess4j进行图片文字识别功能”,在日常操作中,相信很多人在java怎么使用tess4j进行图片文字识别功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么使用tess4j进行图片文字识别功能”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
java使用tess4j进行图片文字识别
一、简介
Tess4J 是Java (JNA) 对 Tesseract OCR API 的封装。
很久之前需要做一个自动登陆并对网页上的未处理的数据进行按钮点击,其中需要登陆的验证码校验,因此用了一下Tess4J,能识别一些简单的文字和数字等,识别率好像一般,但出错了就重新换一个验证码再试,多试几次也能成功。现将之前的简单使用过程记录,备查。
Tess4J
是对Tesseract OCR API
的Java JNA
封装。使java能够通过调用Tess4J
的API来使用Tesseract OCR
。支持的格式包括TIFF、JPEG、GIF、PNG、BMP、JPEG、PDF
。这个开始接触的时候,我对这两个东西还搞混淆了。明确说一下,Tess4J
是java直接可使用的jar包,而Tesseract OCR
是支持Tess4J
进文件文字识别的基础,Tess4J
可直接使用Maven
方式引入。
二、使用过程
1.maven依赖引入pom.xml
<!-- tess4j start --><dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>5.6.0</version></dependency><!-- tess4j end -->
2.准备好tessdata目录下的语言库文件
需要提前下载好相关的语言库文件,这里我下了chi_sim.traineddata和eng.traineddata两个
下载地址:https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata
下载好后放在代码里面的目录下
3.写测试代码进行测试
准备好两张图片放置在代码的资源目录下,方便程序读取,
图片1
图片2
两张图片放在资源目录下
代码如下:
package cn.ljhua;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.InputStream;import javax.imageio.ImageIO;import lombok.extern.slf4j.Slf4j;import net.sourceforge.tess4j.ITesseract;import net.sourceforge.tess4j.Tesseract;import net.sourceforge.tess4j.TesseractException;@Slf4jpublic class Tess4jOcrTest {public static void main(String[] args) {Tess4jOcrTest test = new Tess4jOcrTest();test.ocrTest();}public void ocrTest() {log.info("ocrTest start....");long startMs = System.currentTimeMillis(); //Tesseract的代码开始---------------------->>>>ITesseract instance = new Tesseract();String filePathPre = System.getProperty("user.dir"); String dataPath = filePathPre + File.separator + "tessdata"; instance.setDatapath(dataPath); //instance.setLanguage("eng");//默认,可以不写 instance.setLanguage("chi_sim");//设置中文识别 String imageName = "verifyCode.png"; try (InputStream inStream = this.getClass().getResourceAsStream("/" + imageName)) { BufferedImage bImage = ImageIO.read(inStream); //doOCR也可以传参为File,我这里传的BufferedImage String result = instance.doOCR(bImage); //识别的结果回来可能会带回车,处理掉 result = result.replaceAll("\n", ""); log.info("图片名:" + imageName +" 识别结果:"+ result); } catch (IOException e) { log.error(e.getMessage(),e); } catch (TesseractException e) { log.error(e.getMessage(),e);} imageName = "vCode2.jpg"; try (InputStream inStream = this.getClass().getResourceAsStream("/" + imageName)) { BufferedImage bImage = ImageIO.read(inStream); //doOCR也可以传参为File,我这里传的BufferedImage String result = instance.doOCR(bImage); //识别的结果回来可能会带回车,处理掉 result = result.replaceAll("\n", ""); log.info("图片名:" + imageName +" 识别结果:"+ result); } catch (IOException e) { log.error(e.getMessage(),e); } catch (TesseractException e) { log.error(e.getMessage(),e);}//Tesseract的代码结束--------------------->>>> log.info("ocrTest success. spend time :{} ms.", (System.currentTimeMillis() - startMs));}}
测试结果截图如:
英文识别出来比较正常,中文识别出来带了空格,如果需要可以通过代码进一步去掉空格,至此,tess4j的简单使用测试完成。
到此,关于“java怎么使用tess4j进行图片文字识别功能”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!