Java 集成 Umi-OCR 实现本地图片文字提取
背景与需求
当需要从大量截图中提取数据时,手动输入不仅效率低下,还容易出错。市面上的 OCR 工具要么需要付费订阅,要么配置复杂。Umi-OCR 是一款开源免费的离线 OCR 工具,能快速将图片中的文字转化为可编辑文本。本文将介绍如何用 Java 代码实现图片文字提取。
快速体验
在深入 Java 集成前,可以先用简单的命令行操作体验 Umi-OCR 功能。
操作要点:
Java 集成 Umi-OCR 实现本地图片文字提取。介绍 Umi-OCR 离线运行、命令行与 HTTP 接口特性。通过 ProcessBuilder 和 HttpClient 示例展示 Java 调用方法。涵盖乱码、路径等故障排查,提供 Linux/macOS 替代方案 Tesseract。包含发票信息提取、截图翻译等实战场景,对比不同 OCR 工具部署难度与准确率。适合需要本地化、隐私保护的图片文字识别需求。
当需要从大量截图中提取数据时,手动输入不仅效率低下,还容易出错。市面上的 OCR 工具要么需要付费订阅,要么配置复杂。Umi-OCR 是一款开源免费的离线 OCR 工具,能快速将图片中的文字转化为可编辑文本。本文将介绍如何用 Java 代码实现图片文字提取。
在深入 Java 集成前,可以先用简单的命令行操作体验 Umi-OCR 功能。
操作要点:
Umi-OCR.exe --screenshot
注意事项:
试试用这个命令识别桌面上的图片:
Umi-OCR.exe --path "C:/Desktop/test.png" --output result.txt
打开生成的 result.txt 文件,你会发现图片中的文字已经被完美提取出来了。
Umi-OCR 支持批量处理和二维码识别,有三个显著优势让开发者青睐:
1. 零依赖离线运行:不像其他 OCR 工具需要联网调用 API,Umi-OCR 所有识别都在本地完成,数据隐私有保障,识别速度也更快。
2. 命令行与 HTTP 双接口:提供两种调用方式,命令行适合简单场景,HTTP 接口适合复杂集成。
3. 丰富的输出格式:支持直接输出文本、JSON 或保存到文件,满足不同场景需求。
Java 调用外部程序可以使用 ProcessBuilder。核心代码如下:
ProcessBuilder pb = new ProcessBuilder("Umi-OCR.exe", "--path", "test.png");
Process process = pb.start();
String result = new String(process.getInputStream().readAllBytes(), "GBK");
操作要点:
--output result.txt 可保存结果到文件Umi-OCR 内置 HTTP 服务,Java 程序通过发送请求就能调用。启动服务后,在全局设置中确认 HTTP 服务已开启。
核心代码示例:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://127.0.0.1:1224/argv"))
.POST(HttpRequest.BodyPublishers.ofString("[\"--path\",\"test.png\"]"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
把常用功能封装成工具类,用的时候直接取:
public class UmiOcrUtils {
private static final String EXE_PATH = "C:/Umi-OCR/Umi-OCR.exe";
public static String ocrImage(String imagePath) throws Exception {
Process process = new ProcessBuilder(EXE_PATH, "--path", imagePath).start();
return new String(process.getInputStream().readAllBytes(), "GBK");
}
}
--encoding utf-8 参数--batch 参数启用批量模式--threads 4虽然 Umi-OCR 主要面向 Windows 系统,但 Linux 和 macOS 用户也有替代方案。
# 安装 Tesseract
sudo apt install tesseract-ocr
# 调用命令
tesseract image.png output
brew install tesseract
tesseract image.png output
// 批量处理发票图片
List<String> paths = Arrays.asList("invoice1.png", "invoice2.png");
String result = UmiOcrUtils.batchOcr(paths, "--format json");
// 解析 JSON 提取金额、日期等关键信息
JSONArray json = new JSONArray(result);
for (int i = 0; i < json.length(); i++) {
System.out.println("金额:" + json.getJSONObject(i).getString("amount"));
}
// 调用截图 OCR
String text = UmiOcrUtils.screenshotOcr();
// 调用翻译 API
String translated = TranslationApi.translate(text, "en");
System.out.println("翻译结果:" + translated);
// 识别图片中的二维码
String qrContent = UmiOcrUtils.recognizeQrCode("qr_code.png");
System.out.println("二维码内容:" + qrContent);
| 工具 | 部署难度 | 识别速度 | 准确率 | 离线支持 | 多语言 |
|---|---|---|---|---|---|
| Umi-OCR | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ✅ | ⭐⭐⭐⭐ |
| Tesseract | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ✅ | ⭐⭐⭐⭐⭐ |
| OCR.Space | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ❌ | ⭐⭐⭐⭐ |
| 百度 OCR | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ❌ | ⭐⭐⭐⭐⭐ |
Umi-OCR 在部署难度和离线支持方面优势明显,非常适合对隐私要求高、不想折腾复杂配置的开发者。
编写 Java 程序,调用 Umi-OCR 识别一张本地图片,并将结果打印到控制台。
识别包含表格的图片,使用正则表达式提取特定数据(如价格、日期),并保存到 Excel 文件。
开发一个批量 OCR 处理系统,支持拖放上传图片文件夹,自动识别并按规则命名输出文件,实现错误重试机制。
完成这三个任务,你就能熟练掌握 Java 集成 Umi-OCR 的全部技巧。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online