1. 程式人生 > >java語言下利用tess4j開源庫實現圖片識別功能

java語言下利用tess4j開源庫實現圖片識別功能

一,tess4j 簡單介紹

Tess4J是對tesseract -OCR API.的Java JNA 封裝,使java能夠通過呼叫Tess4J的API來使用tesseract -OCR

我有一篇部落格也介紹了tesseract -OCR如何使用tesseract -OCR進行圖片識別 

java程式碼實現DOS命令使用tesseract -OCR開源引擎實現圖片文字識別

 

二,tess4j環境準備

官網下載tess4j的jar包 https://sourceforge.net/projects/tess4j  解壓之後目錄結構如下,tess4j的iar包在dist目錄裡面

如果要進行中文字元識別,需要下載中文字型檔,可自行百度,我也提供了百度網盤連結https://pan.baidu.com/s/1dmpqQ8Cm7Cd5zaLC0ZOZaw

 

三,Eclipse IDE下的程式碼實現

1. 新建一個java專案

2.匯入tess4j的lib資料夾下的全部jar包,注意,lib下有一個字尾為.properties的檔案別導進去了,把那個刪除掉就行,你或許會問會用到那麼多jar包嗎,因為jar包可能依賴於其他iar包,所以最好全匯入進去,我遇到過一個錯誤  java.lang.NoClassDefFoundError com/sun/jna/pointer

  編譯沒出錯,執行就出錯,最後把所有包導進去就OK了

3.將tess4j解壓目錄下的tessdata 資料夾複製到已建立的java專案根目錄下(便於專案釋出和可移植性,並且等會要進行字型檔引用),並把中文字型檔放進這個資料夾(如果要進行中文字元識別)

4.新建Tess4jHelper類

package ocr;

import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import net.sourceforge.tess4j.Tesseract;

public class Tess4jHelper {

	/**
	 * 圖片識別(一張)
	 * 
	 * @param imgPath
	 * @param ZH_CN
	 *            是否使用中文訓練庫,true-是
	 * @return 識別結果
	 */
	public String recognizing(String imgPath, boolean ZH_CN) {
		try {
			File imageFile = new File(imgPath); // 建立一個圖片檔案
			if (!imageFile.exists()) { // 如果圖片不存在,給出提示並返回
				return "圖片不存在";
			}
			BufferedImage textImage = ImageIO.read(imageFile); // 將圖片載入到記憶體
			Tesseract instance = new Tesseract(); // 建立Tesseract物件
			instance.setDatapath(System.getProperty("user.dir") + "tessdata");// 設定訓練庫路徑
			if (ZH_CN) //
				instance.setLanguage("chi_sim");// 匯入中文識別字庫
			String recognizeResult = null; // 定義變數,接收識別結果
			recognizeResult = instance.doOCR(textImage);// 呼叫識別方法,得到識別結果
			return recognizeResult; // 返回識別結果
		} catch (Exception e) {
			e.printStackTrace();
			return "tess4j識別圖片時出錯!該圖片路徑為" + imgPath;
		}
	}

	public static void main(String[] args) {
		Tess4jHelper tess4jHelper = new Tess4jHelper();
		String imgPath = "D:\\images\\test2.png";
		String result = tess4jHelper.recognizing(imgPath, true);//中文識別用true 英文識別用false
		System.out.println(result);

	}
}

5.中文識別對比

 

英文識別對比