Java使用Tess4J實(shí)現(xiàn)圖像識(shí)別方式
Java Tess4J實(shí)現(xiàn)圖像識(shí)別
最近需要用Java做一個(gè)圖像識(shí)別的東西,查了一些資料,在此寫一個(gè)基于Tess4J的教程,方便其他人參考和使用。
其實(shí)做圖像識(shí)別,也可以使用TESSERACT-OCR來實(shí)現(xiàn),但是該方式需要下載軟件,在電腦上安裝環(huán)境,移植性不高,使用Tess4J只需要下載相關(guān)Jar包,導(dǎo)入項(xiàng)目,再把項(xiàng)目封裝好就可以處處運(yùn)行了。
首先,下載Tess4J的相關(guān)資源(一個(gè)壓縮包)
官網(wǎng):http://tess4j.sourceforge.net/codesample.html
解壓,其中的目錄結(jié)構(gòu)如下:

需要用到其中圈起來的三個(gè)文件夾中的東西。lib文件夾下放的是需要用到的Jar包,tessdata下放的是語言庫,默認(rèn)的有英語庫,中文庫需要另外下載,下載地址:https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata。
新建一個(gè)Java項(xiàng)目,將lib文件夾和tessdata文件夾復(fù)制到項(xiàng)目的根目錄下,找到dist文件夾下的tess4j.jar(名字可能有版本號(hào)),將該文件也復(fù)制到項(xiàng)目根目錄下的lib文件夾下。
項(xiàng)目的的目錄如下

lib中的文件如下(tess4J.jar也在該目錄下)

再在eclipse中打開項(xiàng)目
在項(xiàng)目中導(dǎo)入lib文件夾中所有的jar包(Build path --> configure build path),導(dǎo)入后的結(jié)果如下:

這樣前期準(zhǔn)備工作就完成了,下面就剩下代碼了。
Tess4J的代碼比較簡(jiǎn)潔
如下:
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測(cè)試類
*/
public class Tess4JTest {
public static void main(String[] args){
String path = "D://Java//Tess4J";//我的項(xiàng)目存放路徑
File file = new File(path + "http://photo.jpg");
ITesseract instance = new Tesseract();
/**
* 獲取項(xiàng)目根路徑,例如: D:\IDEAWorkSpace\tess4J
*/
File directory = new File(path);
String courseFile = null;
try {
courseFile = directory.getCanonicalPath();
} catch (IOException e) {
e.printStackTrace();
}
//設(shè)置訓(xùn)練庫的位置
instance.setDatapath(courseFile + "http://tessdata");
instance.setLanguage("eng");//chi_sim :簡(jiǎn)體中文, eng 根據(jù)需求選擇語言庫
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);
}
}
這樣就搞定了。
效果如下
原圖:

讀取結(jié)果:

從結(jié)果來看準(zhǔn)確率還有待提高,l 和 1分不清,0 和 O 也沒有分清,漢字的準(zhǔn)確率還要低一些,大家可以自行訓(xùn)練字體庫優(yōu)化。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java基礎(chǔ)教程之對(duì)象的方法與數(shù)據(jù)成員
這篇文章主要介紹了Java基礎(chǔ)教程之對(duì)象的方法與數(shù)據(jù)成員,本文講解對(duì)象的方法與數(shù)據(jù)成員相關(guān)知識(shí),因?yàn)閖ava是面向?qū)ο笳Z言,本文的知識(shí)都是經(jīng)常要用到的,需要的朋友可以參考下2014-08-08
Spring?AOP實(shí)現(xiàn)用戶登錄統(tǒng)一驗(yàn)證功能
這篇文章主要為大家詳細(xì)介紹了Spring?AOP如何實(shí)現(xiàn)用戶登錄統(tǒng)一驗(yàn)證功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)具有一定的借鑒價(jià)值,需要的可以參考一下2023-01-01
SpringBoot actuator 健康檢查不通過的解決方案
這篇文章主要介紹了SpringBoot actuator 健康檢查不通過的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java獲取Process子進(jìn)程進(jìn)程ID方法詳解
這篇文章主要介紹了Java獲取Process子進(jìn)程進(jìn)程ID方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12
SpringTask實(shí)現(xiàn)定時(shí)任務(wù)方法講解
通過重寫Schedu lingConfigurer方法實(shí)現(xiàn)對(duì)定時(shí)任務(wù)的操作,單次執(zhí)行、停止、啟動(dòng)三個(gè)主要的基本功能,動(dòng)態(tài)的從數(shù)據(jù)庫中獲取配置的定時(shí)任務(wù)cron信息,通過反射的方式靈活定位到具體的類與方法中2023-02-02

