最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java使用tess4j進(jìn)行圖片文字識(shí)別功能

 更新時(shí)間:2023年04月04日 10:08:01   作者:冰之杍  
Tess4J?是Java?(JNA)?對(duì)?Tesseract?OCR?API?的封裝,Tess4J是java直接可使用的jar包,而Tesseract?OCR是支持Tess4J進(jìn)文件文字識(shí)別的基礎(chǔ),Tess4J可直接使用Maven方式引入,這篇文章主要介紹了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)頁(yè)上的未處理的數(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)單使用過(guò)程記錄,備查。

Tess4J是對(duì)Tesseract OCR APIJava JNA 封裝。使java能夠通過(guò)調(diào)用Tess4J的API來(lái)使用Tesseract OCR。支持的格式包括TIFF、JPEG、GIF、PNG、BMP、JPEG、PDF。這個(gè)開(kāi)始接觸的時(shí)候,我對(duì)這兩個(gè)東西還搞混淆了。明確說(shuō)一下,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

語(yǔ)言庫(kù):
https://github.com/tesseract-ocr/tessdata
https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata

二、使用過(guò)程

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目錄下的語(yǔ)言庫(kù)文件

需要提前下載好相關(guān)的語(yǔ)言庫(kù)文件,這里我下了chi_sim.traineddata和eng.traineddata兩個(gè)
下載地址:https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata
下載好后放在代碼里面的目錄下

在這里插入圖片描述

3.寫(xiě)測(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的代碼開(kāi)始---------------------->>>>
		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),可以不寫(xiě)
    	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é)果回來(lái)可能會(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é)果回來(lái)可能會(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í)別出來(lái)比較正常,中文識(shí)別出來(lái)帶了空格,如果需要可以通過(guò)代碼進(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)存泄露的產(chǎn)生原因和處理方法

    ThreadLocal 的內(nèi)存泄漏問(wèn)題通常發(fā)生在使用 ThreadLocal 存儲(chǔ)對(duì)象時(shí),尤其是在多線程環(huán)境中,線程池中的線程復(fù)用可能導(dǎo)致一些資源沒(méi)有及時(shí)清理,從而引發(fā)內(nèi)存泄漏,所以本文給大家介紹了ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法,需要的朋友可以參考下
    2024-12-12
  • Java List的sort()方法改寫(xiě)compare()實(shí)現(xiàn)升序,降序,倒序的案例

    Java List的sort()方法改寫(xiě)compare()實(shí)現(xiàn)升序,降序,倒序的案例

    這篇文章主要介紹了Java List的sort()方法改寫(xiě)compare()實(shí)現(xiàn)升序,降序,倒序的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Java完整實(shí)現(xiàn)記事本代碼

    Java完整實(shí)現(xiàn)記事本代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)易記事本,較為詳細(xì)的分析了基于java實(shí)現(xiàn)記事本程序的完整過(guò)程,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 使用IntelliJ IDEA查看類的繼承關(guān)系圖形(圖文詳解)

    使用IntelliJ IDEA查看類的繼承關(guān)系圖形(圖文詳解)

    這篇文章主要介紹了使用IntelliJ IDEA查看類的繼承關(guān)系圖形,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • mybatis insert返回主鍵代碼實(shí)例

    mybatis insert返回主鍵代碼實(shí)例

    這篇文章主要介紹了mybatis insert返回主鍵代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • java線程池使用場(chǎng)景及一些建議

    java線程池使用場(chǎng)景及一些建議

    本文主要介紹了java線程池使用場(chǎng)景及一些建議,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • java的package和import機(jī)制原理解析

    java的package和import機(jī)制原理解析

    這篇文章主要介紹了java的package和import機(jī)制原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • @Scheduled定時(shí)器使用注意事項(xiàng)及說(shuō)明

    @Scheduled定時(shí)器使用注意事項(xiàng)及說(shuō)明

    這篇文章主要介紹了@Scheduled定時(shí)器使用注意事項(xiàng)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring Boot實(shí)現(xiàn)郵件注冊(cè)功能示例代碼

    Spring Boot實(shí)現(xiàn)郵件注冊(cè)功能示例代碼

    本篇文章主要介紹了Spring Boot實(shí)現(xiàn)郵件注冊(cè)功能示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體

    利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體

    這篇文章主要介紹了利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評(píng)論

上虞市| 青海省| 灵石县| 潢川县| 登封市| 武陟县| 钟祥市| 凤冈县| 宜春市| 西城区| 镇宁| 石门县| 宁津县| 龙井市| 江北区| 拉孜县| 枝江市| 榆林市| 湘潭县| 芒康县| 繁峙县| 海伦市| 衢州市| 白山市| 武威市| 四平市| 辉县市| 孟州市| 邵阳市| 东山县| 崇阳县| 炎陵县| 资中县| 武城县| 正蓝旗| 墨玉县| 施秉县| 桃江县| 五台县| 瑞丽市| 宁乡县|