1. 程式人生 > >Java 使用 Tess4J 實現影象識別

Java 使用 Tess4J 實現影象識別

最近需要用Java做一個影象識別的東西,查了一些資料,在此寫一個基於Tess4J的教程,方便其他人蔘考和使用。

其實做影象識別,也可以使用TESSERACT-OCR來實現,但是該方式需要下載軟體,在電腦上安裝環境,移植性不高,使用Tess4J只需要下載相關Jar包,匯入專案,再把專案封裝好就可以處處運行了。

解壓,其中的目錄結構如下:


需要用到其中圈起來的三個資料夾中的東西。lib資料夾下放的是需要用到的Jar包,tessdata下放的是語言庫,預設的有英語庫,中文庫需要另外下載,下載地址:https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata。

新建一個Java專案,將lib資料夾和tessdata資料夾複製到專案的根目錄下,找到dist資料夾下的tess4j.jar(名字可能有版本號),將該檔案也複製到專案根目錄下的lib資料夾下。

專案的的目錄如下:


lib中的檔案如下(tess4J.jar也在該目錄下):


再在eclipse中開啟專案,在專案中匯入lib資料夾中所有的jar包(Build path --> configure build path),匯入後的結果如下:


這樣前期準備工作就完成了,下面就剩下程式碼了。Tess4J的程式碼比較簡潔,如下:

Tess4JTest.java

package ocr;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import net.sourceforge.tess4j.util.LoadLibs;

import java.io.File;
import java.io.IOException;

/**
 * Tess4J測試類
 */
public class Tess4JTest {

    public static void main(String[] args){

    	String path = "D://Java//Tess4J";		//我的專案存放路徑
    	
    	File file = new File(path + "//photo.jpg");
        ITesseract instance = new Tesseract();

        /**
         *  獲取專案根路徑,例如: D:\IDEAWorkSpace\tess4J
         */
        File directory = new File(path);
        String courseFile = null;
        try {
            courseFile = directory.getCanonicalPath();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //設定訓練庫的位置
        instance.setDatapath(courseFile + "//tessdata");

        instance.setLanguage("eng");//chi_sim :簡體中文, eng	根據需求選擇語言庫
        String result = null;
        try {
            long startTime = System.currentTimeMillis();
             result =  instance.doOCR(file);
            long endTime = System.currentTimeMillis();
            System.out.println("Time is:" + (endTime - startTime) + " 毫秒");
        } catch (TesseractException e) {
            e.printStackTrace();
        }
        
        System.out.println("result: ");
        System.out.println(result);
    }

}

這樣就搞定了。

效果如下:

原圖:


讀取結果:


從結果來看準確率還有待提高,l 和 1分不清,0 和 O 也沒有分清,漢字的準確率還要低一些,大家可以自行訓練字型庫優化。