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 高精度语言包,同时保证原图清晰无模糊、倾斜。
相关推荐
旧书包的青春1 小时前
2026年6月11日
java
一直奔跑在路上1 小时前
深入浅出RDMA:原理、应用与实战指南
开发语言·php
j7~1 小时前
【C++】STL--string类--拆析解剖string类的实现以及string类的底层详解(2)
开发语言·c++·浅拷贝·深拷贝·string类的实现·string拷贝构造·string赋值重载
实在智能RPA1 小时前
航空Agent落地效果评估指标:2026年企业级智能自动化价值度量体系拆解
java·网络·人工智能·ai·自动化
程序员二叉2 小时前
【JUC】AQS底层深度拆解|独占/共享模式|队列原理全详解
java·开发语言·面试·juc
踏着七彩祥云的小丑2 小时前
Go 学习第6天:结构体 + 切片 + range遍历
开发语言·学习·golang·go
读书札记20222 小时前
Qt中windeployqt.exe工具的使用:解决使用CMake创建的项目点击exe文件后系统提示0xc000007b的问题
开发语言·qt
地铁潜行者2 小时前
消息堆积后,为什么一扩容消费者,MySQL 先被打崩了?
java·后端
AI人工智能+2 小时前
银行回单识别技术通过OCR与深度学习实现财务数字化转型
深度学习·自然语言处理·ocr·银行回单识别