首頁 >Java >java教程 >如何利用tess4j實作Java中的圖片文字辨識功能?

如何利用tess4j實作Java中的圖片文字辨識功能?

王林
王林轉載
2023-05-09 17:49:082525瀏覽

    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
    下載好後放在程式碼裡面的目錄下

    如何利用tess4j實作Java中的圖片文字辨識功能?

    3.寫測試程式碼進行測試

    準備兩張圖片放置在程式碼的資源目錄下,方便程式讀取,

    圖片1

    如何利用tess4j實作Java中的圖片文字辨識功能?

    #圖片2

    如何利用tess4j實作Java中的圖片文字辨識功能?

    #兩張圖片放在資源目錄下

    如何利用tess4j實作Java中的圖片文字辨識功能?

    #程式碼如下:

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

    測試結果截圖如:

    如何利用tess4j實作Java中的圖片文字辨識功能?

    英文辨識出來比較正常,中文辨識出來帶了空格,如果需要可以透過程式碼進一步去掉空格,至此, tess4j的簡單使用測試完成。

    以上是如何利用tess4j實作Java中的圖片文字辨識功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除