开发者

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

开发者 https://www.devze.com 2023-04-04 11:22 出处:网络 作者: 冰之杍
目录Java使用tess4j进行图片文字识别一、简介二、使用过程1.maven依赖引入pom.XML2.准备好tessdata目录下的语言库文件3.写测试代码进行测试三、源码下载地址java使用tess4j进行图片文字识别
目录
  • Java使用tess4j进行图片文字识别
  • 一、简介
  • 二、使用过程
    • 1.maven依赖引入pom.XML
    • 2.准备好tessdata目录下的语言库文件
    • 3.写测试代码进行测试
  • 三、源码下载地址

    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。这个开发者_Python开发开始接触的时候,我对这两个东西还搞混淆了。明确说一下,Tess4J是java直接可使用的jar包,而Tesseract OCR是支持Tess4J进文件文字识别的基础,Tess4J可直接使用Maven方式引入。

    tesseract:https://tesseract-ocr.github.io/

    官网:http://tess4j.sourceforge.net/codesample.html

    语言库:

    https://github.com/tesseract-ocr/tessdata

    https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata

    二、使用过程

    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 j编程avax.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进行图片文字识别功能

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

    三、源码下载地址

    最后提供源码如下:

    github: https://github.com/jxlhljh/tess4jOcrTest

    gitee: https://gitee.com/jxlhljh/tess4jOcrTest

    到此这篇关于java使用tess4j进行图片文字识别的文章就介绍到这了,更多相关java图片文字识别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消