Tesseract OCR的Java使用(附安装包,非常详细)

一、工具简介

Tesseract OCR 是一款开源免费、支持离线运行的光学字符识别引擎,能够从图片中提取文字并转为可编辑、复制的文本内容。

它全面兼容 PNG、JPEG、GIF、BMP、TIFF 等主流图片格式,识别结果可导出为 TXT、PDF、HTML 等文件;内置上百种语言识别库,完美支持英文、简体中文等常用语种,图片清晰度越高,识别准确率越好

目前市面上主流 OCR 工具还有 ABBYY FineReader、EasyOCR、百度智能云 OCR 等。对比而言,Tesseract OCR 核心优势为:完全免费、无需联网离线使用、支持 Windows/Linux/Mac 跨平台部署,同时支持自定义训练模型,可适配各类复杂场景的文字识别需求。

二、Tesseract OCR 安装包下载

1. 官方资源

2. 百度网盘(整合包,推荐新手)

已打包好安装程序 + 全量语言包,直接解压即可使用

链接:https://pan.baidu.com/s/1KZI0aaTIJKhfVX7TIDrUTQ

提取码:amhi

文件名称:Tesseract-OCR.zip

三、系统环境变量配置

安装 / 解压完成后,必须配置两道环境变量,否则 Java 项目无法正常调用。

1. 新增 TESSDATA_PREFIX 变量(语言包目录)

该变量用于指定语言库 tessdata 所在路径,路径指向 tessdata 文件夹根目录

  • 变量名:TESSDATA_PREFIX
  • 变量值:E:\dev\OCR\Tesseract-OCR\tessdata

提示:请根据你实际的安装 / 解压路径修改。

2. 配置 Path 环境变量(程序执行目录)

将 Tesseract 主程序目录添加到系统 Path 中,示例:

复制代码
E:\dev\OCR\Tesseract-OCR

四、Java 项目集成(Tess4J)

Java 通过 Tess4J 框架调用 Tesseract 原生能力,下面提供完整依赖、工具类及使用说明。

1. 引入 Maven 依赖

pom.xml 中添加核心依赖:

xml 复制代码
<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>5.7.0</version>
</dependency>

2. 通用 OCR 工具类

封装识别方法,增加参数优化、异常捕获、日志打印,适配中文 + 英文混合场景:

java 复制代码
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;

/**
 * Tesseract OCR 图片文字识别工具类
 *
 * @Author:
 * @Date:
 */
public class OCRUtils {

    private static final Logger log = LoggerFactory.getLogger(OCRUtils.class);

    /**
     * 图片文字识别
     * @param file 待识别图片文件
     * @return 识别后的文本内容
     */
    public static String ocr(File file) {
        long startTime = System.currentTimeMillis();
        log.info("开始执行图片OCR识别");

        // 校验语言包环境变量
        String tessdataPath = System.getenv("TESSDATA_PREFIX");
        if (tessdataPath == null || tessdataPath.isBlank()) {
            log.error("环境变量 TESSDATA_PREFIX 未配置,请检查!");
            throw new RuntimeException("Tesseract 环境变量配置异常");
        }
        log.debug("当前语言包路径:{}", tessdataPath);

        Tesseract tesseract = new Tesseract();
        // 识别语言:chi_sim简体中文 + eng英文,按需删减
        tesseract.setLanguage("chi_sim+eng");
        // 页面分割模式:整张图片作为单个文本块(适配常规截图/图片)
        tesseract.setPageSegMode(6);
        // 引擎模式:混合引擎(LSTM+传统),综合识别精度最高
        tesseract.setOcrEngineMode(3);

        String result;
        try {
            result = tesseract.doOCR(file);
        } catch (TesseractException e) {
            log.error("OCR 识别失败", e);
            throw new RuntimeException("图片文字识别异常", e);
        }

        long costTime = System.currentTimeMillis() - startTime;
        log.info("OCR识别完成,耗时:{} 毫秒,识别结果:{}", costTime, result);
        return result;
    }
}

3. 调用示例

java 复制代码
public class TestMain {
    public static void main(String[] args) {
        // 传入本地图片文件
        File imgFile = new File("C:\\Users\\86183\\Desktop\\test.png");
        String text = OCRUtils.ocr(imgFile);
        System.out.println("最终识别内容:\n" + text);
    }
}

五、参数说明 & 优化建议

  1. setLanguage("chi_sim+eng")

    复制代码
    chi_sim

    简体中文、

    复制代码
    eng

    英文,纯中文场景可简写为

    复制代码
    chi_sim
  2. setPageSegMode(6)

    将整张图片视为一个完整文本块,适配绝大多数截图、文档图片;图片倾斜可改为 1,多段落图文可改为 3。

  3. setOcrEngineMode(3)

    启用 LSTM + 传统混合引擎,是目前识别精度、兼容性最优配置。

六、运行效果

配置完成后运行代码,即可成功提取图片内文字,识别效果参考:

七、常见问题排查

  1. 报错找不到 tesseract 程序:检查 Path 环境变量是否配置正确;
  2. 中文乱码 / 识别为空:检查 TESSDATA_PREFIX 路径、是否放置 chi_sim.traineddata 中文语言包;
  3. 识别精度低:替换 tessdata_best 高精度语言包,同时保证原图清晰无模糊、倾斜。

题排查

  1. 报错找不到 tesseract 程序:检查 Path 环境变量是否配置正确;
  2. 中文乱码 / 识别为空:检查 TESSDATA_PREFIX 路径、是否放置 chi_sim.traineddata 中文语言包;
  3. 识别精度低:替换 tessdata_best 高精度语言包,同时保证原图清晰无模糊、倾斜。
相关推荐
她的男孩10 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
荣码12 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
plainGeekDev13 小时前
Gson → kotlinx.serialization
android·java·kotlin
小bo波1 天前
Java Swing 图形用户界面实验 —— 从算术练习到游戏开发的完整实践
java·课程设计·gui·游戏开发·扫雷·swing
咖啡八杯1 天前
GoF设计模式——备忘录模式
java·后端·spring·设计模式
SamDeepThinking1 天前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
朕瞧着你甚好1 天前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程
MacroZheng1 天前
短短几天,暴涨2.8万Star!又一款编程神器开源!
java·人工智能·后端