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

Java使用Tesseract-OCR實(shí)戰(zhàn)教程

 更新時間:2025年02月24日 16:04:57   作者:九轉(zhuǎn)成圣  
本文介紹了如何在Java中使用Tesseract-OCR進(jìn)行文本提取,包括Tesseract-OCR的安裝、中文訓(xùn)練庫的配置、依賴庫的引入以及具體的代碼實(shí)現(xiàn),通過這個過程,我們將演示如何從視頻幀中提取文本

Java使用Tesseract-OCR

光學(xué)字符識別(OCR, Optical Character Recognition)技術(shù)可以將圖像中的文本轉(zhuǎn)換為可編輯的文本。

Tesseract是目前最為流行的開源OCR引擎之一,支持多種語言和高效的文本識別。

本文將詳細(xì)介紹如何在Java中使用Tesseract-OCR進(jìn)行文本提取,包括Tesseract-OCR的安裝、中文訓(xùn)練庫的配置、依賴庫的引入以及具體的代碼實(shí)現(xiàn)。通過這個過程,我們將演示如何從視頻幀中提取文本。

Tesseract-OCR安裝

首先,我們需要在系統(tǒng)上安裝Tesseract-OCR??梢酝ㄟ^以下鏈接下載適用于Windows的安裝包:

下載Tesseract-OCR安裝包

下載完成后,運(yùn)行安裝程序并選擇安裝目錄,默認(rèn)下一步安裝即可。

配置中文訓(xùn)練庫

為了使Tesseract能夠識別中文,我們需要下載中文簡體的訓(xùn)練庫文件chi_sim.traineddata,并將其放置在Tesseract的tessdata目錄下。

例如:

makefile
D:\Program Files\Tesseract-OCR\tessdata

可以從以下鏈接下載中文訓(xùn)練庫:

下載中文訓(xùn)練庫

更多訓(xùn)練庫可以在Tesseract官方GitHub倉庫找到。

引入依賴

為了在Java中使用Tesseract,我們需要引入tess4j庫。tess4j是一個Java的Tesseract API封裝,可以方便地在Java項(xiàng)目中使用Tesseract。此外,為了處理視頻幀,我們還需要javacv庫。

以下是需要在Maven項(xiàng)目中引入的依賴:

```xml
<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>5.3.0</version>
</dependency>
<!-- JavaCV: Java interface to OpenCV, FFmpeg, and more -->
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv-platform</artifactId>
    <version>1.5.7</version>
</dependency>

代碼實(shí)現(xiàn)

接下來,我們將實(shí)現(xiàn)一個Java類VideoTextExtractor,該類用于從視頻中提取文本。

完整代碼如下:

```java
import net.sourceforge.tess4j.TesseractException;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameUtils;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.Set;

public class VideoTextExtractor {
    // Tesseract-OCR安裝路徑
    public static final String pathToTessdataFolder = "D:\\Program Files\\Tesseract-OCR\\tessdata\\";
    // 加載視頻
    public static final String pathToVideoFile = "C:\\Users\\lixiewen\\Documents\\oCam\\錄制_2023_05_31_09_39_51_172.mp4";
    // 解析結(jié)果
    public static final String resultFile = "E:\\tmp\\tmp.txt";

    public static void main(String[] args) throws TesseractException {
        extracted();
    }

    private static void extracted() {
        // 設(shè)置Tesseract OCR庫的路徑
        File tessDataFolder = new File(pathToTessdataFolder);
        System.setProperty("TESSDATA_PREFIX", tessDataFolder.getAbsolutePath());
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(pathToVideoFile);
        try {
            grabber.start();
            Set<String> set = new LinkedHashSet<>();
            // 遍歷視頻幀
            int lengthInFrames = grabber.getLengthInFrames();
            for (int i = 0; i < lengthInFrames; i++) {
                System.out.println("進(jìn)度 " + i + " / " + lengthInFrames);
                try {
                    Frame frame = grabber.grabImage();
                    if (frame == null) continue;
                    BufferedImage bufferedImage = Java2DFrameUtils.toBufferedImage(frame);

                    // 將幀轉(zhuǎn)換為灰度圖像
                    BufferedImage grayImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
                    Graphics2D graphics = grayImage.createGraphics();
                    graphics.drawImage(bufferedImage, 0, 0, null);
                    graphics.dispose();

                    // 創(chuàng)建臨時文件保存圖像
                    File tempImageFile = File.createTempFile("frame", ".png");
                    ImageIO.write(grayImage, "png", tempImageFile);

                    Tesseract tesseract = getTesseract(tessDataFolder);
                    String result = tesseract.doOCR(tempImageFile);
                    set.add(result);
                    // 刪除臨時文件
                    tempImageFile.delete();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            File file = new File(resultFile);

            FileUtils.write2File(file, new ArrayList<>(set));

            grabber.stop();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static Tesseract getTesseract(File tessDataFolder) {
        // 使用Tesseract OCR進(jìn)行文字識別
        Tesseract tesseract = new Tesseract();
        // 設(shè)置中文訓(xùn)練庫
        tesseract.setLanguage("chi_sim");
        tesseract.setDatapath(tessDataFolder.getAbsolutePath());
        return tesseract;
    }
}

免安裝方式

如果不希望安裝Tesseract-OCR,可以直接在項(xiàng)目中引入訓(xùn)練庫。這種方式適合希望更方便地管理依賴的開發(fā)者。

  1. 引入Maven依賴
  2. 在代碼中引入訓(xùn)練庫
```java
import net.sourceforge.tess4j.Tesseract;

public class OCRUtil {
    public static ITesseract getTesseract() throws Exception {
        // 使用 Tesseract 識別文本
        ITesseract tesseract = new Tesseract();
        // 設(shè)置訓(xùn)練數(shù)據(jù)文件夾路徑
        tesseract.setDatapath("src/main/resources/traineddata");
        // 設(shè)置為中文簡體
        tesseract.setLanguage("chi_sim");
        return tesseract;
    }
}

優(yōu)化與提升

在實(shí)際應(yīng)用中,我們可以對視頻幀的處理和OCR識別進(jìn)行優(yōu)化,以提高識別效率和準(zhǔn)確性。以下是一些建議:

  1. 圖像預(yù)處理:在進(jìn)行OCR識別之前,可以對圖像進(jìn)行去噪、二值化、旋轉(zhuǎn)校正等預(yù)處理,以提高識別率。
  2. 多線程處理:對于長時間的視頻處理,可以使用多線程來提高幀處理速度。
  3. 自定義訓(xùn)練數(shù)據(jù):如果默認(rèn)的訓(xùn)練數(shù)據(jù)效果不理想,可以通過Tesseract的訓(xùn)練工具自定義訓(xùn)練數(shù)據(jù),以提高特定場景下的識別準(zhǔn)確率。
  4. 結(jié)果后處理:OCR識別的文本可能包含一些噪聲字符,可以通過正則表達(dá)式等方法對結(jié)果進(jìn)行清洗和校正。

以下是一個優(yōu)化后的圖像預(yù)處理示例:

```java
    // 轉(zhuǎn)換為灰度圖像
    BufferedImage grayImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
    Graphics2D graphics = grayImage.createGraphics();
    graphics.drawImage(image, 0, 0, null);
    graphics.dispose();

    // 二值化處理
    for (int y = 0; y < grayImage.getHeight(); y++) {
        for (int x = 0; x < grayImage.getWidth(); x++) {
            int rgb = grayImage.getRGB(x, y);
            int gray = (rgb & 0xff);
            gray = gray > 128 ? 255 : 0;
            grayImage.setRGB(x, y, (gray << 16) | (gray << 8) | gray);
        }
    }
    return grayImage;
}

總結(jié)

通過本文的介紹,我們詳細(xì)講解了如何在Java中使用Tesseract-OCR進(jìn)行文本提取的全過程。包括Tesseract-OCR的安裝、中文訓(xùn)練庫的配置、依賴庫的引入以及具體的代碼實(shí)現(xiàn),并提供了一些優(yōu)化建議。

這些內(nèi)容能幫助您在實(shí)際項(xiàng)目中更好地應(yīng)用Tesseract-OCR進(jìn)行文本識別。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java final與泛型詳細(xì)解析

    Java final與泛型詳細(xì)解析

    文章主要介紹了Java中的final關(guān)鍵字、泛型以及包裝類,final關(guān)鍵字用于確保變量、方法和類不會被修改,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-11-11
  • java使用jacob實(shí)現(xiàn)word轉(zhuǎn)pdf

    java使用jacob實(shí)現(xiàn)word轉(zhuǎn)pdf

    這篇文章主要為大家詳細(xì)介紹了java使用jacob實(shí)現(xiàn)word轉(zhuǎn)pdf,通過調(diào)用模板文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 詳解Java中String類型與默認(rèn)字符編碼

    詳解Java中String類型與默認(rèn)字符編碼

    這篇文章主要介紹了Java中String類型與默認(rèn)字符編碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • SpringBoot應(yīng)用內(nèi)存占用分析與優(yōu)化指南

    SpringBoot應(yīng)用內(nèi)存占用分析與優(yōu)化指南

    本文詳細(xì)分析了SpringBoot應(yīng)用內(nèi)存占用過高的原因,主要包括JVM堆內(nèi)存、元空間、線程棧內(nèi)存和直接內(nèi)存等,通過優(yōu)化Tomcat線程池配置、調(diào)整JVM參數(shù),并結(jié)合監(jiān)控機(jī)制,可以有效降低應(yīng)用內(nèi)存占用,提高性能和穩(wěn)定性,需要的朋友可以參考下
    2026-03-03
  • Mybatis實(shí)現(xiàn)聯(lián)表查詢并且分頁功能

    Mybatis實(shí)現(xiàn)聯(lián)表查詢并且分頁功能

    這篇文章主要介紹了Mybatis實(shí)現(xiàn)聯(lián)表查詢并且分頁功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Spring Cloud Eureka 服務(wù)上下線監(jiān)控的實(shí)現(xiàn)

    Spring Cloud Eureka 服務(wù)上下線監(jiān)控的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Cloud Eureka 服務(wù)上下線監(jiān)控的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Java程序員新手老手常用的八大開發(fā)工具

    Java程序員新手老手常用的八大開發(fā)工具

    這篇文章主要介紹了Java程序員新手老手常用的八大開發(fā)工具,需要的朋友可以參考下
    2017-05-05
  • Java String類的常用方法匯總

    Java String類的常用方法匯總

    這篇文章主要為大家詳細(xì)匯總了Java String類的常用方法,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Java?web實(shí)現(xiàn)簡單注冊功能

    Java?web實(shí)現(xiàn)簡單注冊功能

    這篇文章主要為大家詳細(xì)介紹了Java?web實(shí)現(xiàn)簡單注冊功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java Swing組件JFileChooser用法實(shí)例分析

    Java Swing組件JFileChooser用法實(shí)例分析

    這篇文章主要介紹了Java Swing組件JFileChooser用法,結(jié)合實(shí)例形式分析了java Swing組件JFileChooser文件選擇器的功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-11-11

最新評論

鄂伦春自治旗| 元阳县| 红河县| 天水市| 鹤岗市| 抚顺市| 沧州市| 东城区| 丘北县| 准格尔旗| 祁东县| 渝北区| 东港市| 富平县| 嘉荫县| 丰城市| 河西区| 平江县| 荣昌县| 佛冈县| 濮阳市| 泸州市| 雷波县| 塘沽区| 华阴市| 安塞县| 通山县| 保康县| 太湖县| 江阴市| 从江县| 明水县| 巴青县| 周宁县| 中超| 石渠县| 汤原县| 梓潼县| 屏东市| 高淳县| 乐清市|