Home  >  Article  >  Java  >  How to use tess4j to implement image text recognition function in Java?

How to use tess4j to implement image text recognition function in Java?

王林
王林forward
2023-05-09 17:49:082459browse

    java uses tess4j for image text recognition

    1. Introduction

    Tess4J is a Java (JNA) encapsulation of the Tesseract OCR API.
    A long time ago, I needed to do an automatic login and click the button on the unprocessed data on the web page, which required verification of the login verification code, so I used Tess4J, which can recognize some simple words and numbers, etc., and the recognition rate is It seems to be normal, but if you make an error, just change a verification code and try again. You can succeed even if you try a few more times. Now record the previous simple usage process for future reference.

    Tess4J is a Java JNA package for Tesseract OCR API. Enables java to use Tesseract OCR by calling Tess4J's API. Supported formats include TIFF, JPEG, GIF, PNG, BMP, JPEG, PDF. When I first came into contact with this, I was still confused between these two things. To be clear, Tess4J is a jar package that can be used directly by java, and Tesseract OCR is the basis for supporting Tess4J into file text recognition, Tess4JCan be imported directly using Maven.

    2. Usage process

    1.Maven dependencies are introduced into pom.xml

    		<!-- tess4j start -->
    		<dependency>
    		    <groupId>net.sourceforge.tess4j</groupId>
    		    <artifactId>tess4j</artifactId>
    		    <version>5.6.0</version>
    		</dependency>
    		<!-- tess4j end -->

    2. Prepare the language library file in the tessdata directory

    You need to download the relevant language library files in advance. Here I downloaded two chi_sim.traineddata and eng.traineddata
    Download address: https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata
    After downloading, place it in the directory inside the code

    How to use tess4j to implement image text recognition function in Java?

    3. Write the test code for testing

    Prepare two pictures and place them in the code In the resource directory, it is convenient for the program to read,

    Picture 1

    How to use tess4j to implement image text recognition function in Java?

    Picture 2

    How to use tess4j to implement image text recognition function in Java?

    The two pictures are placed in the resource directory

    How to use tess4j to implement image text recognition function in Java?

    ##The code is as follows:

    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));
    		
    	}
    }

    Screenshots of the test results are as follows:

    How to use tess4j to implement image text recognition function in Java?

    The English recognition is relatively normal, and the Chinese recognition contains spaces. If necessary, the spaces can be further removed through the code. At this point, The simple use test of tess4j is completed.

    The above is the detailed content of How to use tess4j to implement image text recognition function in Java?. For more information, please follow other related articles on the PHP Chinese website!

    Statement:
    This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete