JAVA使用Tess4j識別圖片內容
2017年5月29日 使用Tess4j識別圖片內容
最近由於需要簡單的識別圖片的數字和字母內容,在網上找了不少最終決定使用tess4j,理由是寫法很簡單你僅需要幾行程式碼就能實現。
首先你需要去下載Tess4j,下載地址為https://sourceforge.net/projects/tess4j/
下載解壓完之後根目錄有以下檔案或資料夾
其中lib存放的是jar檔案,lib裡面的jar包根據各自的專案酌情新增,就行了;src裡面存放的是Tess4j的原始碼,目前Tess4j下載下來的就是原始碼並沒有提供jar包,因而可考慮是否打成jar包或者直接把src的內容直接拷貝到專案中,tessdata也需要放在專案的src中,我是放在src的一級子目錄,還有就是lib裡面有提供2個資料夾分別是win32-x86這個是win32位系統使用的dll,win32-x86-64這是win64位系統使用的dll,至於linux使用的so檔案,官網並沒有給出,我是在下載模組那邊找到的,附上資源連結:
在win環境上win32-x86或者win32-x86-64資料夾是需要放在專案中的,tess4j會從專案中自動檢索,而linux環境上需要將下載的so資源內的liblept.so.5檔案和libtesseract.so放在java的java.library.path目錄中才能使用,在linux使用過程中,可能會提醒載入不了Libjpeg.so.62檔案或者libpng.so.12.0檔案,一下是處理方式:
若提醒的是libjpeg.so.62檔案無法載入:方法一,去該連結下載
若提醒的是libpng.so.12檔案無法載入,可去https://pkgs.org/download/libpng12.so.0 根據自己的linux版本下載或者使用yum安裝,安裝命令:yum -y install libpng12
做完這些我們就可以直接使用Tess4j進行圖片識別了,目前我只試過字母和數字的,中文的會有亂碼暫時沒處理,以下是我寫的一個例子,有點渣,請諸位大神不要吐槽,是直接傳入圖片url地址解析的:
public static String imageToTel(String imgUrl) {
ITesseract instance = new Tesseract();
try {
URL url = new URL(imgUrl);
BufferedInputStream bis = new BufferedInputStream(url.openStream());
String realpath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
if(System.getProperty("os.name").toLowerCase().startsWith("win")) {
realpath = realpath.substring(1);
}
instance.setDatapath(realpath + "tessdata");
String result = instance.doOCR(ImageIO.read(bis));
if(StringUtils.isNotBlank(result))
return result.replaceAll("[ \n]", "");
} catch (Exception e) {
System.err.println("圖片識別失敗");
}
return null;
}
這是我第一篇部落格,哪裡寫的有問題請各位大神多多諒解!