java使用tess4j進(jìn)行圖片文字識(shí)別功能
java使用tess4j進(jìn)行圖片文字識(shí)別
一、簡(jiǎn)介
Tess4J 是Java (JNA) 對(duì) Tesseract OCR API 的封裝。
很久之前需要做一個(gè)自動(dòng)登陸并對(duì)網(wǎng)頁上的未處理的數(shù)據(jù)進(jìn)行按鈕點(diǎn)擊,其中需要登陸的驗(yàn)證碼校驗(yàn),因此用了一下Tess4J,能識(shí)別一些簡(jiǎn)單的文字和數(shù)字等,識(shí)別率好像一般,但出錯(cuò)了就重新?lián)Q一個(gè)驗(yàn)證碼再試,多試幾次也能成功?,F(xiàn)將之前的簡(jiǎn)單使用過程記錄,備查。
Tess4J是對(duì)Tesseract OCR API 的Java JNA 封裝。使java能夠通過調(diào)用Tess4J的API來使用Tesseract OCR。支持的格式包括TIFF、JPEG、GIF、PNG、BMP、JPEG、PDF。這個(gè)開始接觸的時(shí)候,我對(duì)這兩個(gè)東西還搞混淆了。明確說一下,Tess4J是java直接可使用的jar包,而Tesseract OCR是支持Tess4J進(jìn)文件文字識(shí)別的基礎(chǔ),Tess4J可直接使用Maven方式引入。
tesseract:https://tesseract-ocr.github.io/
官網(wǎng):http://tess4j.sourceforge.net/codesample.html
語言庫:
https://github.com/tesseract-ocr/tessdata
https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata
二、使用過程
1.maven依賴引入pom.xml
<!-- tess4j start --> <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>5.6.0</version> </dependency> <!-- tess4j end -->
2.準(zhǔn)備好tessdata目錄下的語言庫文件
需要提前下載好相關(guān)的語言庫文件,這里我下了chi_sim.traineddata和eng.traineddata兩個(gè)
下載地址:https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata
下載好后放在代碼里面的目錄下

3.寫測(cè)試代碼進(jìn)行測(cè)試
準(zhǔn)備好兩張圖片放置在代碼的資源目錄下,方便程序讀取,
圖片1

圖片2

兩張圖片放在資源目錄下

代碼如下:
package cn.ljhua;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import lombok.extern.slf4j.Slf4j;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
/**
* Tess4jOcr測(cè)試示例
* @author liujh
*/
@Slf4j
public class Tess4jOcrTest {
public static void main(String[] args) {
Tess4jOcrTest test = new Tess4jOcrTest();
test.ocrTest();
}
public void ocrTest() {
log.info("ocrTest start....");
long startMs = System.currentTimeMillis();
//Tesseract的代碼開始---------------------->>>>
ITesseract instance = new Tesseract();
/**
* 組裝接好tessdata目錄的路徑字符串
*/
String filePathPre = System.getProperty("user.dir");
String dataPath = filePathPre + File.separator + "tessdata";
/**
* 設(shè)置目錄datapath the tessdata path to set
* 否則會(huì)報(bào)Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.錯(cuò)誤
*/
instance.setDatapath(dataPath);
//instance.setLanguage("eng");//默認(rèn),可以不寫
instance.setLanguage("chi_sim");//設(shè)置中文識(shí)別
String imageName = "verifyCode.png";
try (InputStream inStream = this.getClass().getResourceAsStream("/" + imageName)) {
BufferedImage bImage = ImageIO.read(inStream);
//doOCR也可以傳參為File,我這里傳的BufferedImage
String result = instance.doOCR(bImage);
//識(shí)別的結(jié)果回來可能會(huì)帶回車,處理掉
result = result.replaceAll("\n", "");
log.info("圖片名:" + imageName +" 識(shí)別結(jié)果:"+ result);
} catch (IOException e) {
log.error(e.getMessage(),e);
} catch (TesseractException e) {
log.error(e.getMessage(),e);
}
imageName = "vCode2.jpg";
try (InputStream inStream = this.getClass().getResourceAsStream("/" + imageName)) {
BufferedImage bImage = ImageIO.read(inStream);
//doOCR也可以傳參為File,我這里傳的BufferedImage
String result = instance.doOCR(bImage);
//識(shí)別的結(jié)果回來可能會(huì)帶回車,處理掉
result = result.replaceAll("\n", "");
log.info("圖片名:" + imageName +" 識(shí)別結(jié)果:"+ result);
} catch (IOException e) {
log.error(e.getMessage(),e);
} catch (TesseractException e) {
log.error(e.getMessage(),e);
}
//Tesseract的代碼結(jié)束--------------------->>>>
log.info("ocrTest success. spend time :{} ms.", (System.currentTimeMillis() - startMs));
}
}
測(cè)試結(jié)果截圖如:

英文識(shí)別出來比較正常,中文識(shí)別出來帶了空格,如果需要可以通過代碼進(jìn)一步去掉空格,至此,tess4j的簡(jiǎn)單使用測(cè)試完成。
三、源碼下載地址
最后提供源碼如下:
github: https://github.com/jxlhljh/tess4jOcrTest
gitee: https://gitee.com/jxlhljh/tess4jOcrTest
到此這篇關(guān)于java使用tess4j進(jìn)行圖片文字識(shí)別的文章就介紹到這了,更多相關(guān)java圖片文字識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法
ThreadLocal 的內(nèi)存泄漏問題通常發(fā)生在使用 ThreadLocal 存儲(chǔ)對(duì)象時(shí),尤其是在多線程環(huán)境中,線程池中的線程復(fù)用可能導(dǎo)致一些資源沒有及時(shí)清理,從而引發(fā)內(nèi)存泄漏,所以本文給大家介紹了ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法,需要的朋友可以參考下2024-12-12
Java List的sort()方法改寫compare()實(shí)現(xiàn)升序,降序,倒序的案例
這篇文章主要介紹了Java List的sort()方法改寫compare()實(shí)現(xiàn)升序,降序,倒序的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
使用IntelliJ IDEA查看類的繼承關(guān)系圖形(圖文詳解)
這篇文章主要介紹了使用IntelliJ IDEA查看類的繼承關(guān)系圖形,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
@Scheduled定時(shí)器使用注意事項(xiàng)及說明
這篇文章主要介紹了@Scheduled定時(shí)器使用注意事項(xiàng)及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Spring Boot實(shí)現(xiàn)郵件注冊(cè)功能示例代碼
本篇文章主要介紹了Spring Boot實(shí)現(xiàn)郵件注冊(cè)功能示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體
這篇文章主要介紹了利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03

