一、前面已經測試過了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工具。