Java 集成 Umi-OCR 实现本地图片文字提取
当需要从大量截图中提取数据时,手动输入效率低下且易出错。市面上的 OCR 工具要么付费,要么配置复杂。Umi-OCR 是一款免费、开源、可批量处理的离线 OCR 软件,适用于 Windows 系统,支持截图 OCR、批量 OCR、二维码识别等功能。本文将介绍如何用 Java 调用 Umi-OCR 进行图片文字提取。
如何在 Java 项目中集成 Umi-OCR 工具实现本地图片文字提取。Umi-OCR 是一款免费开源的离线 OCR 软件,支持截图、批量处理和二维码识别。文章详细讲解了三种调用方式:命令行调用、HTTP 接口调用以及工具类封装,并提供了具体的 Java 代码示例。此外,还涵盖了常见问题排查、Linux/macOS 跨平台替代方案(如 Tesseract)、实际应用场景(发票提取、翻译、二维码)以及与其他 OCR 工具的对比分析,帮助开发者高效利用 OCR 技术处理图像数据。
当需要从大量截图中提取数据时,手动输入效率低下且易出错。市面上的 OCR 工具要么付费,要么配置复杂。Umi-OCR 是一款免费、开源、可批量处理的离线 OCR 软件,适用于 Windows 系统,支持截图 OCR、批量 OCR、二维码识别等功能。本文将介绍如何用 Java 调用 Umi-OCR 进行图片文字提取。
无需编程,通过命令行即可体验 Umi-OCR 功能。
Umi-OCR.exe --screenshot
注意事项:
试试用这个命令识别桌面上的图片:
Umi-OCR.exe --path "C:/Desktop/test.png" --output result.txt
打开生成的 result.txt 文件,图片中的文字已被提取。
使用 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。HTTP 接口连接失败?
识别准确率不高?
虽然 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 在部署难度和离线支持方面优势明显,非常适合对隐私要求高、不想折腾复杂配置的开发者。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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