Umi-OCR 实战:从截图OCR到批量处理,一篇搞定离线文字识别
【免费下载链接】Umi-OCROCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。项目地址: https://gitcode.com/GitHub_Trending/um/Umi-OCR
截一张代码图,框选,几秒后右边出现可选中、可复制的文本。这就是 Umi-OCR——一款免费、开源的离线 OCR 软件:不需要联网,数据不出本机,截图文字识别、批量图片识别、PDF 文档识别都在自己电脑上完成。
快速上手:三分钟完成第一次识别
无需安装。发行版是压缩包,解压即用。
- 解压
.7z压缩包,双击Umi-OCR.exe启动。 - 打开左侧「截图OCR」标签页,顶部「文字」开关默认已打开。
- 按快捷键
Ctrl+Shift+A,或点击顶部截图图标。 - 鼠标框选要识别的区域,按
Esc取消。 - 看右侧「记录」栏,选中记录按
Ctrl+C复制。
成功标志:框选到的文字出现在右侧「记录」栏,带时间戳和置信度。记录可以直接编辑,也可以划选多条一起复制。如果嫌截图麻烦,还能在别处复制一张图片,直接粘贴进 Umi-OCR 识别。
界面默认按系统语言显示,如果是英文或日文,去「全局设置」→「语言/Language」切换成简体中文。
截图里的代码,怎么变成能跑的文本?
代码截图只有一个核心要求:缩进不能丢。Umi-OCR 靠文本后处理的「排版解析方案」解决,预设 8 种,最常用的三种:
| 排版解析方案 | 适用 |
|---|---|
single_code单栏-保留缩进 | 代码截图,保留行首缩进和行中空格 |
multi_para多栏-按自然段换行 | 普通文档、报刊,按自然段自动分行 |
none不做处理 | 需要引擎原始输出 |
操作很简单:
- 框选代码截图。
- 右侧面板切到「设置」→ 排版解析方案,选「单栏-保留缩进」。
- 复制记录,直接粘进代码编辑器。
效果对比——一个三行 Python 函数的识别结果:
def add(a, b): total = a + b return total和原图逐行对照,缩进、行内空格完全一致,不用手工重排。这个方案在 HTTP/CLI 调用时对应参数tbpu.parser = single_code,后面会用到。
这里有个细节:各排版方案都自动处理横排和竖排,竖排文字还需要 OCR 引擎本身支持竖排识别才行。
批量扫描文档,忽略区域怎么设置
扫描文档批量入库时,水印、页眉页脚都会混进结果里。批量 OCR 的专门工具是「忽略区域」:画矩形,框内的文字不进结果。
- 切到「批量OCR」标签页,点「选择图片」添加文件或文件夹。jpg、png、webp、bmp、tif 都认,一次导入几百张也没有数量上限。
- 右侧面板进「设置」→ 忽略区域编辑器,按住右键拖动画出若干矩形,把水印完全包住。
- 注意:只有整个完全处于框内的文本块才会被忽略,不会切掉单个字符。
- 选输出格式:txt、jsonl、md、csv(Excel)都有。
- 点「开始任务」,顶部进度条显示整体进度,还可以设置任务完成后自动关机/待机。
遇到超大的长图、大图识别不准或偏慢时,把「页面设置 → 文字识别 → 限制图像边长」的数值调高即可。
参数调优:按场景挑配置
绝大多数参数不用动。想调的话,看这张「场景 → 配置」映射表,覆盖 4 个最高频参数:
| 场景 | 排版解析tbpu.parser | 边长限制ocr.limit_side_len | 语言库ocr.language |
|---|---|---|---|
| 代码截图 | single_code | 960 | models/config_en.txt |
| 中文文档批量 | multi_para | 960 | models/config_chinese.txt |
| 大图长图扫描件 | multi_para | 2880或更高 | models/config_chinese.txt |
| 英文论文 | multi_para | 2880 | models/config_en.txt |
三个参数各用一句话说清:
tbpu.parser:识别出的文字块怎么拼接、怎么换行。ocr.limit_side_len:大图先压缩到这个边长,值低速度快,值高精度好。ocr.language:语言模型库。中文config_chinese.txt、英文config_en.txt、日文config_japan.txt、韩文config_korean.txt、俄文config_cyrillic.txt。
对应的配置片段(也保存在./UmiOCR-data/.settings文件里,可手动改完再用--reload重载):
ocr.language = models/config_chinese.txt tbpu.parser = multi_para ocr.limit_side_len = 960上面ocr.*几个参数属于 PaddleOCR 引擎插件;其他引擎可调用参数查询接口/api/ocr/get_options拿到各自支持的全部参数。
引擎选择,三点就够:
- PaddleOCR:精度高、语言库全,适合复杂文档。
- RapidOCR:速度快、占内存少,适合批量和简单文档。
- 默认先用默认引擎,识别不准再切 PaddleOCR 并调高边长限制。
接入自动化:命令行与 HTTP 接口
手动操作嫌累,就用两种外部调用方式。它们都走本地 HTTP 服务(默认开启,端口 1224,可在全局设置里改)。
命令行最轻,两条典型命令:
umi-ocr --path "D:/docs" "-->" D:/docs.txt # 批量识别文件夹,结果存txt umi-ocr --screenshot --clip # 截图并复制到剪贴板--path可以传文件夹路径,会搜索其中所有图片(含子文件夹)全部识别。注意命令行任务沿用「截图OCR」标签页的设置,不想要弹窗就去该标签页关掉对应选项。
HTTP 接口适合程序集成,最小 Python 示例:
import requests, json, base64 b64 = base64.b64encode(open("a.png", "rb").read()).decode() r = requests.post("http://127.0.0.1:1224/api/ocr", data=json.dumps({"base64": b64, "options": {"data.format": "text"}})) print(json.loads(r.text)["data"]) # 识别文本返回值里code=100表示成功、101表示图中无文本;企业场景可以再开几个不同端口的实例做轮询负载均衡,天然是容灾 OCR 服务。
HTTP 服务的开关、端口、主机范围都在「全局设置」里,和快捷键、界面语言放在一起管理。
卡点速查与下一步
| 症状 | 大概率原因 | 对应操作 |
|---|---|---|
| 识别结果全是乱码 | 语言库不匹配 | 改ocr.language为对应语言 |
| 大图文字断行/精度差 | 边长限制太小 | ocr.limit_side_len调到 2880 或 4320 |
| 多栏排版顺序乱 | 排版解析不合适 | 切到multi_para(多栏-按自然段) |
| 混入水印文字 | 没设忽略区域 | 右键编辑器画矩形包住水印 |
| 命令行没反应 | HTTP 服务未开启 | 「全局设置」里检查服务开关 |
下一步:
- 先做一次截图识别,把快捷键和复制流程跑通。
- 再拿一批扫描文档试忽略区域,体会框的大小怎么画。
- 想集成进其他工具,读下面两篇接口手册。
- 想查所有参数:打开
./UmiOCR-data/.settings对照着看。
延伸阅读:
- 命令行手册
- HTTP接口手册
从截图到批量、从参数到接口,这四层用熟,离线文字识别这件事基本就闭环了。
【免费下载链接】Umi-OCROCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。项目地址: https://gitcode.com/GitHub_Trending/um/Umi-OCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考