基于Java实现OCR 文字识别的两种方案

 更新时间:2025年12月09日 09:26:47   作者:xienda  
OCR技术已广泛应用于图文转换、证件识别、票据处理等场景,作为 Java 开发者,如何快速实现 OCR 功能?本文将介绍两种常用方案,帮助你快速上手 Java OCR 开发,需要的朋友可以参考下

引言

OCR(Optical Character Recognition,光学字符识别)技术已广泛应用于图文转换、证件识别、票据处理等场景。作为 Java 开发者,如何快速实现 OCR 功能?本文将介绍两种常用方案:基于 Tesseract 的本地 OCR 引擎调用,以及基于百度 AI 开放平台的 OCR 接口调用,帮助你快速上手 Java OCR 开发。

方案一:本地 Tesseract OCR 引擎(离线识别)

Tesseract 是谷歌开源的 OCR 引擎,支持多语言识别,适合离线场景。Java 中可通过tess4j库简化调用。

1. 环境准备

步骤 1:安装 Tesseract 引擎

  • Windows:从 UB-Mannheim/tesseract 下载安装包,勾选 "Add to PATH"。
  • Linux:执行 sudo apt install tesseract-ocr
  • 验证:终端输入 tesseract --version,显示版本信息则安装成功。

步骤 2:下载语言包

Tesseract 默认支持英文,中文需额外下载语言包:

  • 从 tessdata 下载 chi_sim.traineddata(简体中文)。
  • 将语言包放入 Tesseract 安装目录的 tessdata 文件夹(如 C:\Program Files\Tesseract-OCR\tessdata)。

步骤 3:引入 Maven 依赖

pom.xml中添加tess4j依赖(封装了 Tesseract 的 Java 调用):

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>5.1.0</version>
</dependency>

2. 代码实现(本地识别)

核心逻辑:通过tess4j加载图片,指定语言包,调用识别接口。

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import java.io.File;

public class LocalOcrDemo {
    public static void main(String[] args) {
        // 1. 创建Tesseract实例
        ITesseract tesseract = new Tesseract();
        
        // 2. 配置语言包路径(默认会读取系统环境变量中的TESSDATA_PREFIX)
        // 若识别失败,可手动指定路径:tesseract.setDatapath("C:\\Program Files\\Tesseract-OCR\\tessdata");
        
        // 3. 设置识别语言(英文+中文,多个语言用+分隔)
        tesseract.setLanguage("eng+chi_sim");
        
        try {
            // 4. 识别图片(支持jpg、png、gif等格式)
            File imageFile = new File("test.png"); // 待识别的图片路径
            String result = tesseract.doOCR(imageFile);
            
            // 5. 输出识别结果
            System.out.println("识别结果:\n" + result);
        } catch (TesseractException e) {
            System.err.println("识别失败:" + e.getMessage());
        }
    }
}

3. 优化建议

  • 图片预处理:识别精度受图片质量影响,建议先对图片进行灰度化、降噪、放大处理(可使用Java ImageIOOpenCV实现)。
  • 自定义训练:对特定场景(如验证码、票据),可通过 Tesseract 训练工具生成专属语言包,提升精度。

方案二:百度 AI OCR 接口(在线识别)

百度 AI 开放平台提供了免费的 OCR 接口,支持通用文字、身份证、银行卡等场景,精度高于本地引擎,但需联网且有调用限制(免费额度:通用文字识别 500 次 / 天)。

1. 环境准备

步骤 1:获取 API 密钥

步骤 2:引入 SDK 依赖

百度提供了 Java SDK,简化接口调用:

<dependency>
    <groupId>com.baidu.aip</groupId>
    <artifactId>java-sdk</artifactId>
    <version>4.16.14</version>
</dependency>

2. 代码实现(API 调用)

核心逻辑:通过 SDK 获取访问令牌(AccessToken),调用通用文字识别接口。

import com.baidu.aip.ocr.AipOcr;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.HashMap;

public class BaiduOcrDemo {
    // 替换为你的API Key和Secret Key
    private static final String APP_ID = "你的APP_ID";
    private static final String API_KEY = "你的API_KEY";
    private static final String SECRET_KEY = "你的SECRET_KEY";

    public static void main(String[] args) {
        // 1. 初始化客户端
        AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
        
        // 2. 可选:设置网络参数(超时时间、重试次数等)
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);
        
        // 3. 调用通用文字识别(高精度版)
        HashMap<String, String> options = new HashMap<>();
        options.put("language_type", "CHN_ENG"); // 中英文混合
        options.put("detect_direction", "true"); // 检测方向
        
        // 图片路径或二进制数据(本地图片用getPath,网络图片需先下载)
        String imagePath = "test.png";
        JSONObject response = client.basicAccurateGeneral(imagePath, options);
        
        // 4. 解析响应结果
        parseResult(response);
    }

    // 解析JSON结果,提取识别文字
    private static void parseResult(JSONObject response) {
        if (response.has("words_result")) {
            JSONArray wordsArray = response.getJSONArray("words_result");
            System.out.println("识别结果:");
            for (int i = 0; i < wordsArray.length(); i++) {
                JSONObject wordObj = wordsArray.getJSONObject(i);
                System.out.println(wordObj.getString("words"));
            }
        } else {
            System.err.println("识别失败:" + response.toString());
        }
    }
}

3. 接口说明

百度 OCR 提供多种接口,根据场景选择:

  • basicGeneral:通用文字识别(快速版)
  • basicAccurateGeneral:通用文字识别(高精度版)
  • idcard:身份证识别
  • bankcard:银行卡识别

免费额度可在百度 AI 控制台查看,超出需付费。

两种方案对比

维度本地 Tesseract百度 AI OCR
网络依赖离线可用必须联网
识别精度依赖图片质量和语言包高(基于深度学习模型)
调用限制免费额度有限制
定制化可训练专属模型不可定制,依赖平台能力
适用场景离线、低频次、简单场景在线、高频次、高精度需求

注意事项

本地 Tesseract

  • 语言包必须与 Tesseract 版本兼容(建议使用最新版)。
  • 中文识别时,图片文字需清晰(避免艺术字、模糊字体)。

百度 AI OCR

  • APP_ID等密钥需妥善保管,避免泄露。
  • 大图片建议先压缩(接口限制单张图片≤4MB)。

总结

本文介绍了 Java 实现 OCR 的两种主流方案:本地 Tesseract 适合离线场景,百度 AI OCR 适合对精度要求高的在线场景。实际开发中可根据需求选择,也可结合两者(离线优先,失败时调用 API 兜底)。

以上就是基于Java实现OCR 文字识别的两种方案的详细内容,更多关于Java OCR 文字识别的资料请关注脚本之家其它相关文章!

相关文章

  • mybatis升级mybatis-plus时踩到的一些坑

    mybatis升级mybatis-plus时踩到的一些坑

    这篇文章主要给大家介绍了关于mybatis升级mybatis-plus时踩到的一些坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 基于Java实现经典蜘蛛纸牌游戏

    基于Java实现经典蜘蛛纸牌游戏

    《蜘蛛纸牌》(Ancient Spider) 是由Oberon Games开发的一款休闲益智类游戏。本文将利用Java语言实现这一经典游戏,需要的可以参考一下
    2022-05-05
  • IntelliJ IDEA2022中的Java文档注释设置、操作方法

    IntelliJ IDEA2022中的Java文档注释设置、操作方法

    这篇文章主要介绍了IntelliJ IDEA2022中的Java文档注释设置、操作详述,本文通过图文并茂的方式给大家介绍IDEA2022 文档注释设置方法,需要的朋友可以参考下
    2022-08-08
  • 基于Java实现获取本地IP地址和主机名

    基于Java实现获取本地IP地址和主机名

    这篇文章主要介绍了基于Java实现获取本地IP地址和主机名,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Spring Boot 利用WebUploader进行文件上传功能

    Spring Boot 利用WebUploader进行文件上传功能

    本文的重点是给大家介绍在Spring Boot项目中利用WebUploader如何进行文件上传,本文通过示例代码给大家介绍,需要的朋友参考下吧
    2018-03-03
  • log4j2使用filter过滤日志方式

    log4j2使用filter过滤日志方式

    这篇文章主要介绍了log4j2使用filter过滤日志方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java查搜索文件内容实现方式

    Java查搜索文件内容实现方式

    用户为解决无法搜索文件内容的问题,编写了一个支持单文件、文件夹及多层递归查找的工具,具备字符串匹配及忽略大小写功能,并计划扩展日期、创建人等组合搜索条件,最终打包成exe便于快速查找所有文件内容
    2025-09-09
  • Java中import导入的用法说明

    Java中import导入的用法说明

    这篇文章主要介绍了Java中import导入的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java并发包线程池ThreadPoolExecutor的实现

    Java并发包线程池ThreadPoolExecutor的实现

    本文主要介绍了Java并发包线程池ThreadPoolExecutor的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • IDEA设置允许一个类并行的方法

    IDEA设置允许一个类并行的方法

    这篇文章主要介绍了IDEA设置允许一个类并行的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04

最新评论