光学字符识别(OCR)已成为现代软件开发中不可或缺的关键技术,它能让计算机将图像、扫描文档等各类文件转换为可编辑、可搜索的文本形式。在 Java 开发领域,集成 OCR 功能可实现强大的文档处理、高效的数据提取及便捷的辅助功能。本文章将详细介绍如何借助 Spire.OCR for Java 库在 Java 环境中实现 OCR 功能,充分利用其高级特性从图像中提取文本,包括带位置坐标和不带位置坐标两种示例。
目录:
为何选择 Java 实现 OCR?
OCR 技术的核心是将图像文本转化为机器可识别的格式。对 Java 开发者而言,其价值体现在:
- 自动化处理发票、收据等单据
- 将纸质档案、表单数字化存档
- 实现扫描文档的文本搜索功能
- 提取带空间坐标的结构化数据
而 Spire.OCR for Java 凭借以下优势成为优选:
- 先进的 OCR 算法确保准确的文本识别
- 支持多种图片格式与多语言识别
- 批量处理多个图像,提高效率
- 易于集成到各类 Java 应用
环境搭建与配置
步骤 1:将 Spire.OCR 添加到项目中
在 pom.xml 中添加以下内容:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.ocr</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
或者,您可以下载 Spire.OCR for Java 库,然后将其添加到 Java 项目中。
2. 下载 OCR 模型
Spire.OCR for Java 依赖预训练模型来提取图像文本。根据操作系统下载对应的 OCR 模型文件:
下载后,将文件解压缩到指定目录(例如,F:\win-x64)
使用 Java 从图片中提取文本
以下是一个基本的文本提取示例,即从图像中读取文本并将其保存到 .txt 文件。
适用场景:
- 将书籍、报纸等印刷资料转为数字文本存档
- 将图像(如屏幕截图、表情包、标牌)转换为可共享、可编辑的文本
读取图片中文本的 Java 代码:
import com.spire.ocr.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class ocrJava {
public static void main(String[] args) throws Exception {
// 创建 OcrScanner 类的实例
OcrScanner scanner = new OcrScanner();
// 创建 ConfigureOptions 类的实例
ConfigureOptions configureOptions = new ConfigureOptions();
// 设置 OCR 模型的路径
configureOptions.setModelPath("F:\\win-x64");
// 设置文本识别的语言
configureOptions.setLanguage("Chinese");
// 将配置选项应用于扫描器
scanner.ConfigureDependencies(configureOptions);
// 从图像中提取文本
scanner.scan("示例.png");
String text = scanner.getText().toString();
// 将提取的文本保存到文本文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter("OCR结果.txt"))) {
writer.write(text);
} catch (IOException e) {
e.printStackTrace();
}
}
}
核心流程解析:
初始化组件:创建 OcrScanner 实例处理 OCR 操作,ConfigureOptions 管理配置
配置参数:
setModelPath():指定 OCR 模型文件的位置
setLanguage():设置识别语言(支持英文、法语等)
处理图像:scan() 方法对目标图像执行 OCR 识别
导出文本:getText() 方法获取提取到的文本
输出:
使用 Java 从图片中提取带坐标的文本
在处理发票、表单等结构化文档时,文本的位置信息至关重要。Spire.OCR for Java 支持提取文本块的边界框坐标,满足精准定位需求。
适用场景:
- 自动化发票处理(定位金额、日期等关键信息)
- 表单数据提取(按位置识别对应字段内容)
提取带坐标文本的 Java 代码:
import com.spire.ocr.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class ExtractWithCoordinates {
public static void main(String[] args) throws Exception {
// 创建 OcrScanner 类的实例
OcrScanner scanner = new OcrScanner();
// 创建 ConfigureOptions 类的实例
ConfigureOptions configureOptions = new ConfigureOptions();
// 设置 OCR 模型的路径
configureOptions.setModelPath("F:\\win-x64");
// 设置文本识别的语言
configureOptions.setLanguage("Chinses");
// 将配置选项应用于扫描器
scanner.ConfigureDependencies(configureOptions);
// 从图像中提取文本
scanner.scan("报价单.png");
IOCRText text = scanner.getText();
// 创建一个列表来存储信息
List<String> results = new ArrayList<>();
// 遍历检测到的每个文本块
for (IOCRTextBlock block : text.getBlocks()) {
// 将提取的文本和坐标添加到列表中
results.add("文本: " + block.getText());
results.add("坐标: " + block.getBox());
results.add("---------");
}
// 保存到文本文件
try {
Files.write(Paths.get("提取文本与坐标.txt"), results);
} catch (IOException e) {
e.printStackTrace();
}
}
}
功能亮点:
文本和坐标提取:
- 遍历图像中检测到的文本块。
- getText():返回包含识别文本的 IOCRText 对象
- getBox ():返回文本块的边界框坐标 [x, y, 宽度,高度]
高效文件写入:
- 使用 Java NIO 的 Files.write 方法,提升文件写入效率
- 结果清晰区分文本与坐标,便于后续解析
输出结果:
OCR 进阶技巧
1. 自动旋转图片
处理倾斜或旋转的图片时,启用 SetAutoRotate() 方法可自动将图像旋转到正确的位置:
ConfigureOptions configureOptions = new ConfigureOptions();
configureOptions.SetAutoRotate(true); // 自动校正图像角度
2. 保留原始布局
如果需要保留图片中的原始视觉布局(例如表格、多列排版等),初始化 VisualTextAligner 类来保持文本格式:
// 对齐识别文本,还原原始布局
VisualTextAligner visualTextAligner = new VisualTextAligner(scanner.getText());
String scannedText = visualTextAligner.toString();
常见问题(支持的语言和图片格式)
问题 1:Spire.OCR for Java 支持哪些图片格式?
答:Spire.OCR for Java 支持所有常见格式:
- PNG
- JPEG/JPG
- BMP
- TIFF
- GIF
问题 2:Spire.OCR for Java 支持哪些语言?
答:支持多种语言:
- 英语(默认)
- 中文(简体和繁体)
- 日语
- 韩语
- 德语
- 法语
问题 3:如何提高 OCR 识别准确性?
答:要提高准确性:
- 使用高质量图像(300+ DPI,光线充足)
- 扫描前对图像进行预处理(调整对比度,去噪)
- 正确设置识别语言
问题 4:Spire.OCR for Java 能否在从扫描 PDF 文件中提取文本?
答:此任务需要结合 Spire.PDF for Java 实现,先将 PDF 转换为图片或从扫描的 PDF 中提取图片,然后使用上述 Java 示例从图片中获取文本。
结论
Spire.OCR for Java 为开发者提供了便捷的图片文本提取方案,从基础的文本识别到带坐标的精准提取,再到自动旋转、布局保留等高级功能,能满足多样化的 OCR 需求。通过本文的指导,你可快速将 OCR 功能集成到项目中,实现文档自动化处理、数据提取等实用功能,提升应用的竞争力。无论是处理日常办公文档,还是开发专业的文字识别系统,Spire.OCR for Java 都能助你高效实现图片到文本的转化。
点击申请 30 天的试用许可证,即可无限制地使用 Java 进行 OCR 处理。