兼容低版本Windows
和无AVX指令集的CPU
的新识别引擎正在测试阶段,详情见这儿 。
Github下载:Release v1.3.5
蓝奏云下载:https://hiroi-sora.lanzoul.com/s/umi-ocr
Umi-OCR 软件本体含 简体中文&英文 通用识别库。
配套 多国语言识别扩展包 可导入繁中,英,日,韩,俄,德,法
识别库,请按需下载。
pip install -r requirements.txt
main.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_*.py
ocr/tbou/*.py
utils/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.20
OCR init timeout: 5s
。#154 , #156。2023.4.26
2023.3.19
2022.12.1
不显示主窗口
。合并自然段-西文模式
,可在英文段落换行时补充空格。自动清空面板
,只显示本次识别结果,且隐藏时间信息。2022.11.4
横排-合并多行-自然段
优化逻辑,支持0~2全角空格首行缩进。2022.9.29
v1.2.1
,提供剪贴板支持。快捷识图通过剪贴板中转,无需再保存临时文件到硬盘。2022.9.1
v1.2.0
,提高识别速度、准确度。2022.7.22
2022.6.4
2022.5.31
2022.4.30
2022.4.16
v1.1.1
,修正了可能得到错误包围盒的漏洞。2022.4.8
2022.3.30
2022.3.30
2022.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 批量图片转文字软件 ◁
Umi-CUT 批量图片去黑边/裁剪/压缩软件