天天看點

Java OCR tesseract 圖檔識别技術(二)

一、前面已經測試過了tesseract的dos方式調用,接下來使用java代碼方式調用tesseract工具識别驗證碼。

package com.cyn.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class OCRUtil {

    //OCR的都是指令方式調用
    public static String getImgText(String imgPath) {  
        String result = "";  
        BufferedReader br = null;
        //中文識别   -l chi_sim -psm 7 nobatch
        String ocrLangData="outputbase nobatch digits";//識别語言
        String outPath = imgPath.substring(, imgPath.lastIndexOf("."));
        File file = new File(outPath + ".txt");
        try {
            //dos執行
            Runtime runtime = Runtime.getRuntime();  
            String command = "tesseract " + imgPath + " " + outPath +" "+ ocrLangData;  
            Process ps = runtime.exec(command);  
            ps.waitFor();  
            // 讀取檔案  
            br = new BufferedReader(new FileReader(file));  
            String temp = "";  
            StringBuffer sb = new StringBuffer();  
            while ((temp = br.readLine()) != null) {  
                sb.append(temp);  
            }
            // 文字識别結果  
            result = sb.toString();
        } catch (Exception e) {  
            System.out.println("識别圖檔異常!");
            e.printStackTrace();  
        }finally{
            try {
                br.close();
                //讀取完後删除檔案
                file.delete();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;  
    } 

    //測試
    public static void main(String[] args) {
        getImgTxtList("E:\\TestCode");
    }

    //處理一個檔案夾中的所有驗證碼
    public static void getImgTxtList(String filepath){
        File file = new File(filepath);
        File [] fileList = file.listFiles();
        for(File f:fileList){
            String imgpath=f.getAbsolutePath();
            if(imgpath.endsWith("jpg")||imgpath.endsWith("png")||imgpath.endsWith("bmp")){
                String resultTxt = getImgText(imgpath);
                System.out.println("result: "+resultTxt);
            }
        }
    }
           

上面的代碼作用是将E:\TestCode檔案夾下的所有圖檔檔案加以識别。在java代碼中調用dos指令使用tesseract工具。