1. 程式人生 > >基於Eclipse下的 tesseract -OCR實現圖片文字識別過程簡單介紹

基於Eclipse下的 tesseract -OCR實現圖片文字識別過程簡單介紹

前言:最近忙於考研複習,好久沒有敲程式碼了,本人目前只是學生,寫部落格的目的只是為了記錄自己的學習過程,當然,如果能為他人提供一些幫助,那更好了。

一.Tesseract 簡介

Tesseract 是Ray Smith 在1985 - 1995年間在惠普布里斯托實驗室開發的一個ocr引擎(OCR (Optical Character Recognition,光學字元識別),也是目前由谷歌支援的開源OCR專案。

有兩種方式  動態庫方式 libtesseract 和 執行程式方式 tesseract.exe 使用Tesseract 此處只介紹第二種方式


二.Tesseractor在Eclipse下的使用步驟

1.官網下載tesseract.exe 

網址:https://github.com/tesseract-ocr/tesseract/wiki

此處我也提供了百度網盤連結(https://pan.baidu.com/s/1dmpqQ8Cm7Cd5zaLC0ZOZaw),包括安裝檔案和中文字型檔,版本是3.02.02(注:3.0以前不支援中文識別)

2.安裝可執行程式tesseract.exe 

下面為網盤檔案tess4jAll解壓之後的目錄


安裝完成之後的目錄




3.將解壓之後的中文訓練字型檔資料夾下的文字型檔放到安裝完成之後的Tesseract-OCR\tessdata 資料夾下面

紅線標記的即為中文字型檔,此處已匯入


4.Eclipse 建立Tesseract 測試類 (專案右擊-build path 匯入相關jar包-tess4j-3.2.1.jar,不匯入的話,不能使用Tesseract  功能類)

識別圖片準備

中文圖片


英文圖片



測試類程式碼

/**
 * Tesseract測試類
 */
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import net.sourceforge.tess4j.Tesseract;
public class TesseactOCR {

	/**
	 *
	 * @param imagePath
	 *            圖片路徑
	 * @param ZH_CN
	 *            是否使用中文訓練庫,true-是
	 * @return 識別結果
	 */
	public static String identifying(String imagePath, boolean ZH_CN) {
		try {
			File imageFile = new File(imagePath); // 建立一個圖片檔案
			if (!imageFile.exists()) { // 如果圖片不存在,給出提示並返回
				return "The image is not exit ...";
			}
			BufferedImage textImage = ImageIO.read(imageFile); // 將圖片載入到記憶體
			Tesseract instance = Tesseract.getInstance(); // 建立Tesseract物件
			instance.setDatapath("C:\\Program Files (x86)\\Tesseract-OCR\\tessdata");// 設定訓練庫(此處路徑為你所安裝的Tesseract-OCR下的tessdata資料夾路徑)
			if (ZH_CN) // 預設是英文識別 ,如果要識別中文則需要指定中文語言
				instance.setLanguage("chi_sim");// 匯入中文識別字庫
			String str = null; // 定義變數,接收識別結果
			str = instance.doOCR(textImage);// 呼叫識別方法,得到識別結果
			return str; // 返回識別結果
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) throws Exception {
		String str = identifying("D:\\tmp\\testch.jpg", true); // 第一個引數為識別圖片路徑,第二個引數為是否識別中文

中文識別對比效果


英文識別對比效果


總結:由此可看出,圖片識別率過低,對此可以有兩種方法改進

1.對圖片進行預處理,比如灰度化,二值化,對比度增強等

2.中文字型檔訓練,糾正錯誤(讀者可自行百度學習)

安裝jTessBoxEditor

下載jTessBoxEditor,地址https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/;解壓後得到jTessBoxEditor,由於這是由Java開發的,所以我們應該確保在執行jTessBoxEditor前先安裝JRE(Java Runtime Environment,Java執行環境)。

5.異常分析

1. Exception in thread “main” java.lang.Error: Invalid memory access 
沒有設定訓練庫的位置 
2. Exception in thread “main” java.lang.UnsupportedClassVersionError: net/sourceforge/tess4j/Tesseract : 
JDK版本低於1.7,使用1.7或更高的版本。