如何使用 Aspose.OCR 和 GroupDocs.Parser 从 Java 图像中提取文本
在现代 Java 应用程序中,将文档的图片转换为可搜索、可编辑的文本是自动化、合规和分析的核心需求。How to extract text from image java 正是本指南要回答的问题。您将学习如何将 Aspose.OCR 的高精度光学字符识别与 GroupDocs.Parser 强大的布局感知解析相结合,同时处理流,使解决方案适用于 Web 服务、批处理作业和桌面工具。
快速答案
- 哪个库负责 OCR? Aspose.OCR 提供业界领先的印刷文本识别准确率。
- 哪个组件解析 OCR 输出? GroupDocs.Parser 将原始字符串转换为结构化的表格、表单和段落。
- 最低 Java 版本? JDK 8 或更高。
- 生产环境是否需要许可证? 试用版可用于评估;完整许可证可去除水印并解锁所有功能。
- 可以直接处理图像流吗? 可以——两个 API 都接受
InputStream,非常适合 HTTP 上传。
什么是“从图像中提取文本”?
从图像中提取文本是指将可视字符——例如扫描页或收据的照片——转换为普通的 Unicode 字符串,以便您的代码可以搜索、索引或转换。OCR 引擎分析像素模式,识别字形,并输出文本表示。
为什么将 Aspose.OCR 与 GroupDocs.Parser 结合使用?
将 Aspose.OCR 与 GroupDocs.Parser 结合使用,可同时获得高质量的字符识别和强大的布局分析。Aspose.OCR 从图像中提取原始文本,而 GroupDocs.Parser 解释该文本以识别表格、表单和多列结构,并以结构化格式返回数据,准备进行后续处理。
- 准确性: Aspose.OCR 提供业界领先的识别率。
- 灵活性: GroupDocs.Parser 能检测表格、表单字段和多列布局,返回 JSON 或 Java 对象的数据。
- 流友好: 两个库都直接从
InputStream读取,消除临时文件并简化云原生部署。
前提条件
- Java 开发工具包: 已安装 JDK 8+。
- Maven: 首选构建工具(如果愿意,也可以手动处理 JAR)。
- Aspose OCR 库: 将 JAR 添加到项目类路径。
- GroupDocs.Parser for Java: 通过 Maven 引入(见下文)或下载 JAR。
- 基本的 Java 知识: 您应熟悉流、异常处理和集合。
为 Java 设置 GroupDocs.Parser
Maven 设置
将仓库和依赖项添加到您的 pom.xml 中:
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/parser/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-parser</artifactId>
<version>25.5</version>
</dependency>
</dependencies>
直接下载
如果您不想使用 Maven,可从 GroupDocs Releases 获取最新的 JAR。
获取许可证
有效许可证可解锁 Aspose OCR 和 GroupDocs.Parser 的全部功能。您可以先使用免费试用版,或从供应商网站购买永久许可证。
基本初始化和设置
- Set the license for Aspose OCR:
License类从类路径加载许可证文件 (license.lic) 并激活所有 OCR 功能。
import com.aspose.ocr.License;
// Initialize and set the Aspose OCR license
License license = new License();
license.setLicense("YOUR_LICENSE_PATH/AsposeOcrLicensePath");
- Initialize GroupDocs.Parser:
基本解析不需要额外代码;当您传入识别后的字符串时,库会自动检测 OCR 输出格式。
如何在 Java 中提取图像文本?
加载图像流,运行 Aspose.OCR 的 recognizePage 方法,并将生成的文本输入到 GroupDocs.Parser——全部在不到十几行的 Java 代码中完成。这种直接方法消除中间文件,并为您提供可直接用于数据库插入或搜索引擎索引的结构化结果。recognizePage 处理提供的图像并返回识别后的文本字符串。
功能:从图像流识别文本
概述
该过程将传入的 InputStream 转换为 BufferedImage,可选地将 OCR 限制在特定区域,并调用 Aspose OCR 的 recognizePage 方法。返回的字符串随后交给 GroupDocs.Parser 进行布局分析。
步骤说明
- Create the AsposeOCR instance:
OcrEngine类是所有识别任务的入口。它封装了语言模型、预处理过滤器和输出设置。
import com.aspose.ocr.AsposeOCR;
AsposeOCR api = new AsposeOCR();
- Read the image stream into a BufferedImage:
BufferedImage是一个 Java 类,用于在内存中存储具有可访问像素数据的图像。ImageIO.read将字节流解码为光栅图像,供 OCR 引擎分析。使用BufferedImage还可以在识别前裁剪或旋转图片。
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
BufferedImage image = ImageIO.read(imageStream);
- Configure recognition settings (optional area selection):
当您知道感兴趣区域时(例如护照 MRZ),可以将 OCR 限制在矩形(Rectangle对象)内,以加快处理速度并减少误报。
import com.aspose.ocr.RecognitionSettings;
RecognitionSettings settings = new RecognitionSettings();
// Example: limit OCR to a specific rectangle
if (options != null && options.getRectangle() != null) {
ArrayList<Rectangle> areas = new ArrayList<>();
areas.add(new Rectangle(
(int) options.getRectangle().getLeft(),
(int) options.getRectangle().getTop(),
(int) options.getRectangle().getSize().getWidth(),
(int) options.getRectangle().getSize().getHeight()));
settings.setRecognitionAreas(areas);
}
- Run the recognition and handle warnings:
recognizePage调用返回一个RecognitionResult,其中包含提取的文本和任何诊断警告(例如低置信度片段)。检查result.getWarnings()以记录潜在的质量问题。
import com.aspose.ocr.RecognitionResult;
RecognitionResult result = api.RecognizePage(image, settings);
if (options != null && options.getHandler() != null) {
options.getHandler().onWarnings(pageIndex, result.warnings);
}
return result.recognitionText;
功能:从图像流识别文本区域
概述
当您需要分别获取每个文本块——例如表单上的各个字段——时,请启用区域检测。OCR 引擎随后返回包含边界框及其文本内容的列表,GroupDocs.Parser 可以将其映射到结构化模型。
步骤说明
- Enable area detection:
设置recognitionSettings.setDetectAreas(true)可指示引擎返回每个检测到的文本片段的矩形坐标。
RecognitionSettings settings = new RecognitionSettings();
settings.setDetectAreas(true);
(可选)定义特定区域 ——如果只关心图像的某些部分,可复用前一节的矩形逻辑。
Execute OCR and collect area information:
结果包含一组TextArea对象,每个对象提供getRectangle()和getText()。您可以遍历此集合以填充 DTO 或 JSON 负载。
import java.awt.Rectangle;
import java.util.ArrayList;
ArrayList<PageTextArea> areas = new ArrayList<>();
for (int i = 0; i < result.recognitionAreasRectangles.size(); i++) {
Rectangle rect = result.recognitionAreasRectangles.get(i);
String text = result.recognitionText;
areas.add(new PageTextArea(
text,
new Page(pageIndex, pageSize),
new Rectangle(
new Point(rect.getX(), rect.getY()),
new Size(rect.getWidth(), rect.getHeight()))));
}
return areas;
实际应用
- 文档管理系统: 为扫描的 PDF 建立索引,使用户无需打开原始扫描件即可搜索全文。
- 自动化数据录入: 从拍摄的收据、发票或运单中提取明细。
- 内容数字化: 将印刷手册转换为可搜索的电子书,保留表格和标题。
- 合规监控: 扫描监管表单并自动标记缺失或格式错误的字段。
性能考虑
- 批处理: 每个 JVM 线程最多处理 20 张图像,以摊销 OCR 模型加载开销。
- 图像质量: 300 dpi 或更高的扫描相比 150 dpi 图像可提升最高约 15 % 的识别准确率。
- 内存管理: 每次 OCR 之后调用
bufferedImage.flush(),并复用同一OcrEngine实例以保持本机模型在内存中。
常见问题与故障排除
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
| 字符乱码 | 低分辨率图像 | 使用 ≥300 dpi 的扫描;在 OCR 前进行图像锐化 |
| 未返回文本 | 不支持的颜色空间(CMYK) | 使用 BufferedImage.TYPE_INT_RGB 将图像转换为 RGB |
| 内存不足错误 | 非常大的图像(例如 >10 MP) | 将图像分块处理或增加 JVM 堆大小(-Xmx4g) |
常见问题
Q: 如何在 Maven 项目中安装 Aspose OCR?
A: 从 Aspose Maven 仓库将 Aspose OCR 依赖添加到您的 pom.xml,然后运行 mvn clean install。JAR 将自动解析。
Q: 能否从多页 PDF 中提取文本?
A: 可以。将每个 PDF 页面转换为图像(例如使用 Aspose.PDF),然后将每个图像流传入上述 OCR 方法。
Q: 该方法适用于手写文本吗?
A: Aspose OCR 针对印刷字符进行优化。对于手写文字,可考虑使用专门的手写识别服务,如 Azure Computer Vision 或 Google Cloud Vision。
Q: 生产环境是否需要许可证?
A: 试用许可证足以用于评估,但完整许可证可去除水印、解除使用限制,并为商业部署提供优先支持。
Q: 如何提升特定语言的准确性?
A: 在 RecognitionSettings 对象上设置语言(例如 settings.setLanguage(Language.Spanish);)。这会缩小字符集和词典范围,提高置信度分数。
最后更新: 2026-08-26
测试环境: Aspose.OCR 23.12, GroupDocs.Parser 25.5
作者: Aspose