目录
java使用tess4j进行图片文字识别
一、简介
二、使用过程
1.maven依赖引入pom.xml
2.准备好tessdata目录下的语言库文件
3.写测试代码进行测试
首页 Java java教程 如何利用tess4j实现Java中的图片文本识别功能?

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

May 09, 2023 pm 05:49 PM
java tess4j

    java使用tess4j进行图片文字识别

    一、简介

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

    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

    		<!-- 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
    下载好后放在代码里面的目录下

    java怎么使用tess4j进行图片文字识别功能

    3.写测试代码进行测试

    准备好两张图片放置在代码的资源目录下,方便程序读取,

    图片1

    java怎么使用tess4j进行图片文字识别功能

    图片2

    java怎么使用tess4j进行图片文字识别功能

    两张图片放在资源目录下

    java怎么使用tess4j进行图片文字识别功能

    代码如下:

    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
     */
    @Slf4j
    public 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));
    		
    	}
    }
    登录后复制

    测试结果截图如:

    java怎么使用tess4j进行图片文字识别功能

    英文识别出来比较正常,中文识别出来带了空格,如果需要可以通过代码进一步去掉空格,至此,tess4j的简单使用测试完成。

    以上是如何利用tess4j实现Java中的图片文本识别功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    AI Hentai Generator

    AI Hentai Generator

    免费生成ai无尽的。

    热门文章

    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    2 周前 By 尊渡假赌尊渡假赌尊渡假赌
    仓库:如何复兴队友
    1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒险:如何获得巨型种子
    4 周前 By 尊渡假赌尊渡假赌尊渡假赌

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    Java 中的平方根 Java 中的平方根 Aug 30, 2024 pm 04:26 PM

    Java 中的平方根指南。下面我们分别通过例子和代码实现来讨论平方根在Java中的工作原理。

    Java 中的完美数 Java 中的完美数 Aug 30, 2024 pm 04:28 PM

    Java 完美数指南。这里我们讨论定义,如何在 Java 中检查完美数?,示例和代码实现。

    Java 中的随机数生成器 Java 中的随机数生成器 Aug 30, 2024 pm 04:27 PM

    Java 随机数生成器指南。在这里,我们通过示例讨论 Java 中的函数,并通过示例讨论两个不同的生成器。

    Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

    Java 版 Weka 指南。这里我们通过示例讨论简介、如何使用weka java、平台类型和优点。

    Java 中的阿姆斯特朗数 Java 中的阿姆斯特朗数 Aug 30, 2024 pm 04:26 PM

    Java 中的阿姆斯特朗数指南。这里我们讨论一下java中阿姆斯特朗数的介绍以及一些代码。

    Java 中的史密斯数 Java 中的史密斯数 Aug 30, 2024 pm 04:28 PM

    Java 史密斯数指南。这里我们讨论定义,如何在Java中检查史密斯号?带有代码实现的示例。

    Java Spring 面试题 Java Spring 面试题 Aug 30, 2024 pm 04:29 PM

    在本文中,我们保留了最常被问到的 Java Spring 面试问题及其详细答案。这样你就可以顺利通过面试。

    突破或从Java 8流返回? 突破或从Java 8流返回? Feb 07, 2025 pm 12:09 PM

    Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

    See all articles