专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

如何利用tess4j实现Java中的图片文本识别功能?

来源:小易整编  作者:小易  发布时间:2024-03-17 09:15
摘要:java使用tess4j进行图片文字识别一、简介tess4j是java(jna)对tesseractocrapi的封装。很久之前需要做一个自动登陆并对网页上的未处理的数据进行按钮点击,其中需要登陆的验证码校验,因此用了一下te...
java使用tess4j进行图片文字识别一、简介

tess4j 是java (jna) 对 tesseract ocr api 的封装。很久之前需要做一个自动登陆并对网页上的未处理的数据进行按钮点击,其中需要登陆的验证码校验,因此用了一下tess4j,能识别一些简单的文字和数字等,识别率好像一般,但出错了就重新换一个验证码再试,多试几次也能成功。现将之前的简单使用过程记录,备查。

如何利用tess4j实现Java中的图片文本识别功能?

Tess4J是对Tesseract OCR APIJava 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

    net.sourceforge.tess4j    tess4j    5.6.0
登录后复制

2.准备好tessdata目录下的语言库文件

需要提前下载好相关的语言库文件,这里我下了chi_sim.traineddata和eng.traineddata两个下载地址: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;/** * Tess4jOcr测试示例 * @author liujh */@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();/** * 组装接好tessdata目录的路径字符串 */String filePathPre = System.getProperty("user.dir");    String dataPath = filePathPre + File.separator + "tessdata";        /** * 设置目录datapath the tessdata path to set * 否则会报Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.错误 */    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的简单使用测试完成。

以上就是如何利用tess4j实现Java中的图片文本识别功能?的详细内容,更多请关注易企推科技其它相关文章!


本文地址:网络知识频道 https://www.hkm168.com/jiqiao/1149213.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


网络知识
小编:小易整编
相关文章相关阅读
  • 实用Word技巧分享:2招轻松解决多图片排版!

    实用Word技巧分享:2招轻松解决多图片排版!

    多图片排版,是Word编辑文档时常见场景之一,几乎每个人都会碰到,对很多人来说仍然是一大难题。当图片数量一多,很多人都不知道图片该怎么摆放,如何快速高效地搞定一组图片?因为没有掌握系统的套路技巧,每次制作都花费大量时间,做不出满意的效果。今...

  • 奇异值分解(SVD)简介及其在图片压缩中的示例

    奇异值分解(SVD)简介及其在图片压缩中的示例

    奇异值分解(SVD)是一种用于矩阵分解的方法。它将一个矩阵分解为三个矩阵的乘积,分别是左奇异向量矩阵、右奇异向量矩阵和奇异值矩阵。SVD在数据降维、信号处理、推荐系统等领域广泛应用。通过SVD,我们可以将高维数据降低到低维空间,从而提取出数...

  • 用U盘轻松实现一键重装系统的小白装机教程

    用U盘轻松实现一键重装系统的小白装机教程

    在现代社会,电脑已经成为人们生活中不可或缺的工具。然而,由于各种原因,我们有时候需要重装电脑系统来解决一些问题或提升性能。但是,对于一些小白用户来说,重装系统可能是一项困难的任务。因此,本文将介绍一款小白一键重装系统的u盘装机教程,帮助小白...

  • excel如何插入单元格

    excel如何插入单元格

    excel插入单元格的方法:首先单击上方【开始】菜单;然后在弹出新窗口以后,选择【单元格】;接着单击【插入】下的小三角,下方出现新窗口,再点击【插入单元格】;最后根据需要选择移动选项即可。excel插入单元格的方法:1、首先单击上方【开始】...

  • 如何使用Vue技术进行移动端开发

    如何使用Vue技术进行移动端开发

    如何使用Vue技术进行移动端开发随着移动互联网的迅猛发展,移动端应用的开发变得越来越重要。Vue.js作为一款轻量级、高性能的前端框架,被广泛应用于移动端开发中。本文将介绍如何使用Vue技术进行移动端开发,并给出具体的代码示例。一、准备工作...

  • PHP调用美联软通短信接口实现短信发送

    PHP调用美联软通短信接口实现短信发送

    随着人们生活水平的提高和科技的发展,短信已成为人们交流的主要方式之一,越来越多的企业开始通过短信平台来实现营销、提醒等功能。在这个过程中,短信接口的选择显得尤为重要。本文将介绍如何通过php调用美联软通短信接口实现短信发送。一、美联软通短信...

  • 什么是构造函数?详解JavaScript中的构造函数

    什么是构造函数?详解JavaScript中的构造函数

    作为原型和原型链的基础,先了解清楚构造函数以及它的执行过程才能更好地帮助我们学习原型和原型链的知识。本篇文章带大家详细了解一下javascript中的构造函数,介绍一下怎么利用构造函数创建一个js对象,希望对大家有所帮助!一个普通的函数被用...

  • mysql中的不等于符号是什么

    mysql中的不等于符号是什么

    mysql中的不等于符号有两种:“!=”和“”;它们都可用于判断数字、字符串、表达式是否不相等。对于“!=”和“”,如果两侧操作数不相等,返回值为1,否则返回值为0;如果两侧操作数有一个是null,那么返回值也是null。本教程操作环境:w...

  • 周排行
  • 月排行
  • 年排行

精彩推荐