

兼容低版本Windows和无AVX指令集的CPU的新识别引擎正在测试阶段,详情见这儿 。
蓝奏云下载:https://hiroi-sora.lanzoul.com/s/umi-ocr
Umi-OCR 软件本体含 简体中文&英文 通用识别库。
配套 多国语言识别扩展包 可导入繁中,英,日,韩,俄,德,法识别库,请按需下载。
pip install -r requirements.txtmain.py 启动程序。测试无异常后,运行 to_exe.py 一键打包。关于忽略指定区域的特殊功能:
类似含水印的视频截图、含有UI/按钮的游戏截图等,往往只需要提取字幕区域的文本,而避免提取到水印和UI文本。本软件可设置忽略某些区域内的文字,来实现这一目的。
当有大量的影视和游戏截图需要整理归档,或者想翻找包含某一段台词/字幕的截图;将这些图片提取出文字、然后Ctrl+F是一个很有效的方法。这是开发本软件的初衷。
关于离线OCR引擎 PaddleOCR-json :
对 PaddleOCR 2.6 cpu_avx_mkl C++ 的封装。效率高于Python版本PPOCR及部分Python编写的OCR引擎,通常比在线OCR服务更快(省去网络传输的时间)。支持更换Paddle官方模型(兼容v2和v3版本)或自己训练的模型,支持修改PPOCR各项参数。通过添加不同的语言模型,软件可识别多国语言。
下载压缩包并解压全部文件即可。
点击截图按钮或自定义快捷键,唤起截图识别。

v1.3.4 还可以设置截图后生成一个预览窗口。预览窗口可以被钉在屏幕顶层,或调为半透明,方便对比查看。
在任何地方(如文件管理器,网页,微信)复制图片,软件上点击粘贴按钮或快捷键,自动识别。

将图片或文件夹拖进软件,批量转换文字。也可以点击按钮打开浏览窗口导入。
识别结果将保存到本地。可选生成纯文本txt文件、带链接Markdown文件、原始信息jsonl文件等不同格式。可配置任务完成后执行关机/待机。

OCR识别出的文本是按“块”划分的,通常一行文字分为一块,有时还会将一行误划分为多块,这给阅读带来了不便。文本块后处理就是对文本块进行再加工的过程,合并同一行或同一段落内的文字,按正确的顺序排序。

将误划分为多块的同一行文字合并到一行。
将多个左对齐的行视为同一段落,合并文字。左侧未对齐或行距过大的行视为下一段落。
将多个左对齐的行视为同一段落,且第一行的开头允许多空出两个全角空格的宽度。
只要垂直投影有重叠,行高一致,距离较近的文本块,视为同一段落。
优化竖排识别,合并同一行文字,按从左到右或从右到左的顺序输出每一行。
注意,必须搭配支持竖排识别的模型库(识别语言)一起使用。
可以在忽略区域编辑器内预览文本块后处理的效果。编辑器中以虚线框标出识别到、经过后处理的文字块。
这里仅仅是借用了编辑器来展示后处理的效果,实际运行任务时 忽略区域机制 早于 后处理机制 执行,不受后处理的影响。
忽略区域是本软件特色功能,可用于排除图片中水印的干扰,让识别结果只留下所需的文本。
展开“忽略区域”是指图片上指定位置与大小的矩形区域,完全处于这些区域内的文字块,将被排除。
简单案例见下。





忽略区域A :正常情况下,处于 忽略区域A 内的文字 不会 输出。
识别区域 :当识别区域内存在文本时,忽略区域A失效 ;即处于忽略区域A内的文字也 会 被输出。
忽略区域B :当 忽略区域A失效 时,忽略区域B才生效;即处于区域A内的文字 会 输出、区域B内的文字 不会 输出。
| 识别区域 | 忽略区域A | 忽略区域B |
|---|---|---|
| × 不存在文字 | √ 生效 | × 失效 |
| √ 存在文字 | × 失效 | √ 生效 |
“忽略区域配置”只针对一种分辨率生效。假如配置的分辨率是1920x1080,那么批量识别图片时,只有符合1920x1080的图片才会排除干扰文本;1920x1081的图片中的文字会全部输出。
拖入预览的图片必须分辨率相同。假如先拖入1920x1080的图片,再拖入其它分辨率的图片;软件会弹窗警告。只有点击 清空 删除当前已配置的忽略区域,才能拖入其他分辨率图片,并应用此分辨率。
扩展包内置语言:繁中,英,日,韩,俄,德,法
en_dict.txt不是本目录下的那个,而是在上一级目录)PaddleOCR-json 文件夹中。PaddleOCR_json_config_[模板].txt ,改一下名。(文件名不允许有非英文字符!)PaddleOCR_json_config_XX.txt ,将 rec路径 rec_model_dir 和 字典路径 rec_char_dict_path 改成目标语言的文件(夹)的名称。若模型库是v2版本,还必须加上一行 rec_img_h 32 。Umi-OCR ,打开 Umi-OCR_config.json ,在 "ocrConfig" 中添加新语言的信息。键为语言名称,值的 path 为config txt文件的名称。保持json格式,注意逗号。(修改config.json文件时,请确保未打开软件,否则配置可能被覆盖。)识别语言下拉框是否已经能选择该语言。v1.3.3 后支持通过命令行调用Umi-OCR,执行部分识图任务。
若软件未在运行,则命令行会启动软件并执行任务。若软件已在后台运行,则命令行会直接调用后台的软件执行任务。这样多次调用时可以节省初始化的时间。
注意命令行调用入口是程序目录的extra中的umiocr.exe,而不是软件常规入口(Umi-OCR 文字识别.exe)。
⚠︎ umiocr.exe在程序目录的extra文件夹中。 ⚠︎
命令行语法按照谷歌gflags规则:
-命令或-命令=参数或-命令 参数
若软件尚未启动,则任意指令均会启动软件主程序。
umiocr.exe
或
umiocr.exe -show
无论主窗口处于什么状态(最小化、收到托盘、被别的窗口覆盖),该指令都会让主窗口弹到最上层。
umiocr.exe -hide
将窗口收到托盘区或最小化。
show和hide这两个指令可以与其它指令混用,如 umiocr.exe -clipboard -show
umiocr.exe -exit
umiocr.exe -img=图片.png
支持图片/文件夹;多个路径以逗号,分隔;含空格的路径加双引号""。如:
umiocr.exe -img="D:/图库,E:/my img/图片.png"
若路径含中文,请务必加双引号。
umiocr.exe -clipboard
umiocr.exe -screenshot
umiocr.exe -language=序号
“序号”为软件设置里各个语言的排序,从0开始。从上往下数,比如简中排第一,那么是-language=0。繁中排第二,那么是-language=1。英文排第四,-language=3。以此类推。
v1.3.5 起,支持快捷识图完成并将结果写入剪贴板后,发送一组指定按键,触发翻译软件进行翻译。当然也可以用于触发你的AHK脚本等,实现更多奇奇怪怪的功能。
这是一个隐藏高级功能,请先勾选设置页底部的高级选项,重启软件。设置页的快捷识图板块会多出一个项目:自动复制后发送按键 。可以录制一组快捷键并修改重复次数(支持单击、双击等)。当截图OCR完成后,会发送该按键组合。注意,必须同时勾选自动复制结果才能让该功能生效。
经过测试,Umi-OCR可以顺利地与 CopyTranslator 及 沙拉查词 联动触发翻译,以下是配置方法。
下载 CopyTranslator。这里示例所用的版本是 v11 。
如果不介意CopyTranslator监听剪贴板(每次剪贴板变动都尝试翻译),那么勾选Umi-OCR的自动复制结果 和CopyTranslator的监听剪贴板即可。

如果不一定始终开启监听剪贴板,又希望Umi-OCR在任何情况下能唤起CopyTranslator,可以这样处理:CopyTranslator在设置里勾选双Ctrl+C翻译;Umi-OCR的自动复制后发送按键录制为ctrl+c,2次。

基本选项,右边栏勾选后台保持运行。(如果不勾选也能使用,但必须保持浏览器开启。)隐私设置,右边栏点击设置快捷键。
在独立窗口中搜索剪贴板内容设置任意一组快捷键,然后右边改为全局。Umi-OCR的自动复制后发送按键录制为相同快捷键,1次。
权限管理,勾选读取剪贴板。
Umi-OCR_config.json 。也可以先打开软件,点击设置页最底部的 打开设置文件 ,然后退出软件。okMission中添加一项元素。code为cmd命令。多条命令可用&分隔。例:"我的任务": {"code": "cmd命令1 & 命令2"}
本功能默认关闭。
供内存占用十分敏感的用户使用,会有偶尔阻慢任务速度的副作用。 一般用户无需开启。
若有需要开启,请在设置页拉到底部,勾选高级选项,重启软件,然后:OCR识别引擎设置 → 自动清理内存 → 将任一参数改成>0的值 。
原理是满足任一条件(内存占用超限,或者一段时间没有执行任务)则重启引擎组件,释放当前引擎占用的所有内存。

umi。Win+R,在弹窗中输入umi,即可打开软件。ocr,因为系统可能存在同名的注册路径,无法用此指令唤起第三方软件。PaddleOCR引擎暂不支持在没有AVX指令集的CPU上运行,遇到该问题可尝试换用RapidOCR引擎。
下图指示如何判断该问题是否由缺失AVX引起。

常见的家用CPU一般都支持AVX指令集,如下:
| AVX | 支持的产品系列 | 不支持 |
|---|---|---|
| Intel | 酷睿Core,至强Xeon,11代及以后的赛扬Celeron和奔腾Pentium | 凌动Atom,安腾Itanium,10代及以前的赛扬Celeron和奔腾Pentium |
| AMD | 推土机架构及之后的产品,如锐龙Ryzen、速龙Athlon、FX 等 | K10架构及之前的产品 |
可通过 CPU-Z 软件查看自己CPU的指令集信息。
由于windows缩放对屏幕坐标系带来的影响,若外接多块屏幕,且缩放比例不一致时,可能导致Umi-OCR内置截图模块异常,如画面不完整、窗口变形、识别不出文字等。
若出现这种情况,以下提供三种可替代的解决方案,您可选择一种使用。

软件附带了第二套截图方案:调用windows内置的“截图和草图”来完成截图并唤起OCR。可在软件设置里切换。(若系统截图后不能唤起OCR,请确保系统能通过 win+shift+S 触发截图,且自动复制到剪贴板 的开关不能关闭(默认是打开的)。见上图右。)
禁用软件的DPI缩放。对Umi-OCR 文字识别.exe,右键 → 属性 → 兼容性 → 更改更高DPI设置 → 勾选替代高DPI缩放行为 。
请将引擎组件 PaddleOCR-json 文件夹 放置于程序入口(main.py或exe)同目录下。
测试机器:
| CPU | TDP | RAM | 是否兼容mkldnn |
|---|---|---|---|
| r5 4600u | 15w | 16g | 无报错 |
测试集:
| 图片张数 | 测试条件 | 分辨率 | 平均字块数量 | 平均字符数量 | 文字语言 |
|---|---|---|---|---|---|
| 100 | 环境相同,多次测量取平均值 | 1920x1080 | 15 | 250 | 简体中文 |
测试结果:
| Umi-OCR版本 | 1.2.5 | 1.2.5 | 1.2.6 | 1.2.6 | 1.2.6 | 1.2.6 |
|---|---|---|---|---|---|---|
| PaddleOCR-json版本 | 1.1.1 | 1.1.1 | 1.2.0 | 1.2.0 | 1.2.0 | 1.2.0 |
| PP-OCR C++版本 | 2.1 | 2.1 | 2.6 | 2.6 | 2.6 | 2.6 |
| 是否开启mkldnn | ✅ | ✅ | ✅ | ✅ | ||
| PP-OCR模型库版本 | v2 | v2 | v2 | v3 | v3 slim | v3 |
| 总耗时(秒) | 90 | 120 | 65 | 63 | 170 | 400 |
| 平均单张耗时(秒) | 0.9 | 1.2 | 0.65 | 0.63 | 1.7 | 4.0 |
| 内存占用峰值(MB) | 1000 | 350 | 1200 | 1700 | 5800 | 500 |
结论:
v1.2.6 及之后的版本,比前代的效率具有显著优势。新版调教倾向于榨干硬件的性能,内存占用高于旧版。v1.2.5 的旧版本Umi-OCR。开发者滴碎碎念
pyinstaller打包。可以运行根目录下的 to_exe.py 一键打包。Umi-OCR_config.json在第一次运行程序时生成。若想自定义引擎组件的路径,可以修改其中的ocrToolPath属性。支持绝对/相对路径。可以实现多个前端共用一套引擎组件。v1.3.0 几乎重写了整个项目框架,将业务逻辑与UI代码解耦,划分出多个子模块。这些子模块我认为是比较方便拓展的:
ocr/output_*.pyocr/tbou/*.pyutils/config.py 里添加需要的配置项。在 _ConfigDict 里编写配置项参数后,可以自动生成tk.var变量,读、写本地配置文件。程序运行过程中,参数发生更改就会自动写入本地。ui/win_main.py 里添加需要的UI。需要tk.var动态变量时,直接 Config.getTK() 拿来绑定。Config 里拿就是了,比如要调用主窗口类的方法就用 Config.main ,要参数就 Config.get()。Config 就是中枢,是各个模块之间、模块与配置之间交流的全局接口。尽量不要跨线程同时读写。我是设计在执行任务时能修改到配置项的UI都给锁定,以免影响任务线程读取。不显示主窗口。合并自然段-西文模式,可在英文段落换行时补充空格。自动清空面板,只显示本次识别结果,且隐藏时间信息。no_avx 和 openblas 版本。点击版本号链接可前往对应备份分支。
2023.6.20OCR init timeout: 5s 。#154 , #156。2023.4.262023.3.192022.12.1不显示主窗口。合并自然段-西文模式,可在英文段落换行时补充空格。自动清空面板,只显示本次识别结果,且隐藏时间信息。2022.11.4横排-合并多行-自然段 优化逻辑,支持0~2全角空格首行缩进。2022.9.29v1.2.1,提供剪贴板支持。快捷识图通过剪贴板中转,无需再保存临时文件到硬盘。2022.9.1v1.2.0,提高识别速度、准确度。2022.7.222022.6.42022.5.312022.4.302022.4.16v1.1.1,修正了可能得到错误包围盒的漏洞。2022.4.82022.3.302022.3.302022.3.28本项目核心引擎组件源自 PaddlePaddle/PaddleOCR:
Awesome multilingual OCR toolkits based on PaddlePaddle
Python implementation of the Google commandline flags module.
This library allows you to control and monitor input devices.
A Windows system tray icon with a right-click context menu.
Pmw is a toolkit for building high-level compound widgets in Python using the Tkinter module.
Umi-OCR 批量图片转文字软件 ◁