Umi-OCR 文字识别工具

免费,开源,可批量的离线OCR软件适用于 Windows7 x64 、Linux x64
- 免费
本项目所有代码开源,完全免费。 - 方便
解压即用,离线运行,无需网络。 - 高效
自带高效率的离线OCR引擎,内置多种语言识别库。 - 灵活
支持命令行、HTTP接口等外部调用方式。 - 功能
截图OCR / 批量OCR / PDF识别 / 二维码 / 公式识别


一、目录
-
截图识别 -
排版解析 – 识别不同排版,按正确顺序输出文字 -
批量识别 -
忽略区域 – 排除截图水印处的文字 -
二维码 支持扫码或生成二维码图片 -
文档识别 从PDF扫描件中提取文本,或转为双层可搜索PDF -
全局设置 -
命令行调用 -
HTTP接口 -
构建项目(Windows、Linux)
二、下载发行版
以下发布链接均长期维护,提供稳定版本的下载。
- 蓝奏云
https://hiroi-sora.lanzoul.com/s/umi-ocr (国内推荐,免注册/无限速) - GitHub
https://github.com/hiroi-sora/Umi-OCR/releases/latest - Source Forge
https://sourceforge.net/projects/umi-ocr
Scoop 是一款Windows下的命令行安装程序,可方便地管理多个应用。您可以先安装 Scoop ,再使用以下指令安装 Umi-OCR :
-
添加 extras桶:
scoop bucket add extras
-
(可选1)安装 Umi-OCR(自带 Rapid-OCR引擎,兼容性好):
scoop install extras/umi-ocr
-
(可选2)安装 Umi-OCR(自带 Paddle-OCR引擎,速度稍快):
scoop install extras/umi-ocr-paddle
-
不要同时安装二者,快捷方式可能会被覆盖。但您可以额外导入 插件 ,随时切换不同OCR引擎。
三、开始使用
软件发布包下载为 .7z 压缩包或 .7z.exe 自解压包。自解压包可在没有安装压缩软件的电脑上,解压文件。
本软件无需安装。解压后,点击 Umi-OCR.exe 即可启动程序。
遇到任何问题,请提 Issue ,我会尽可能帮助你。
3.1、界面语言
Umi-OCR 支持的界面多国语言。在第一次打开软件时,将会按照你的电脑的系统设置,自动切换语言。
如果需要手动切换语言,请参考下图,全局设置→语言/Language 。

3.2、标签页
Umi-OCR v2 由一系列灵活好用的标签页组成。您可按照自己的喜好,打开需要的标签页。
标签栏左上角可以切换窗口置顶。右上角能够锁定标签页,以防止日常使用中误触关闭标签页。
3.2.1、截图OCR

截图OCR:打开这一页后,就可以用快捷键唤起截图,识别图中的文字。
-
左侧的图片预览栏,可直接用鼠标划选复制。 -
右侧的识别记录栏,可以编辑文字,允许划选多个记录复制。 -
也支持在别处复制图片,粘贴到Umi-OCR进行识别。 -
关于 公式识别 功能
文本后处理

关于 OCR文本后处理 – 排版解析方案: 可以整理OCR结果的排版和顺序,使文本更适合阅读和使用。预设方案:
多栏-按自然段换行
适合大部分情景,自动识别多栏布局,按自然段规则进行换行。 多栏-总是换行
每段语句都进行换行。 多栏-无换行
强制将所有语句合并到同一行。 单栏-按自然段换行
/ 总是换行/无换行:与上述类似,不过 不区分多栏布局。单栏-保留缩进
适用于解析代码截图,保留行首缩进和行中空格。 不做处理
OCR引擎的原始输出,默认每段语句都进行换行。
上述方案,均能自动处理横排和竖排(从右到左)的排版。(竖排文字还需要OCR引擎本身支持)
批量OCR

批量OCR:这一页用于批量导入本地图片进行识别。
-
支持格式: jpg, jpe, jpeg, jfif, png, webp, bmp, tif, tiff。 -
保存识别结果的支持格式: txt, jsonl, md, csv(Excel)。 -
与截图OCR一样,支持 文本后处理功能,整理OCR文本的排版和顺序。 -
没有数量上限,可一次性导入几百张图片进行任务。 -
支持任务完成后自动关机/待机。 -
如果要识别像素超大的长图或大图,请调整:页面的设置→文字识别→限制图像边长→【调高数值】。 -
拥有特殊功能 忽略区域。
忽略区域

关于 OCR文本后处理 – 忽略区域: 批量OCR中的一种特殊功能,适用于排除图片中的不想要的文字。
-
在批量识别页的右栏设置中可进入忽略区域编辑器。 -
如上方样例,图片顶部和右下角存在多个水印 / LOGO。如果批量识别这类图片,水印会对识别结果造成干扰。 -
按住右键,绘制多个矩形框。这些区域内的文字将在任务中被忽略。 -
请尽量将矩形框画得大一些,完全包裹住水印所有可能出现的位置。 -
注意,只有处于忽略区域框内部的整个文本块(而不是单个字符)会被忽略。如下图所示,黄色边框的深色矩形是一个忽略区域。那么只有 key_mouse才会被忽略。pubsub_connector.py、pubsub_service.py这两个文本块得以保留。

3.2.2、文档识别

文档识别:
-
支持格式: pdf, xps, epub, mobi, fb2, cbz。 -
对扫描件进行OCR,或提取原有文本。可输出为 双层可搜索PDF 。 -
支持设定 忽略区域 ,可用于排除页眉页脚的文字。 -
可设置任务完成后 自动关机/休眠 。
3.2.3、二维码

扫码:
-
截图/粘贴/拖入本地图片,读取其中的二维码、条形码。 -
支持一图多码。 -
支持19种协议,如下:
Aztec,Codabar,Code128,Code39,Code93,DataBar,DataBarExpanded,DataMatrix,EAN13,EAN8,ITF,LinearCodes,MatrixCodes,MaxiCode,MicroQRCode,PDF417,QRCode,UPCA,UPCE

生成码:
-
输入文本,生成二维码图片。 -
支持19种协议和纠错等级等参数。
全局设置

全局设置:在这里可以调整软件的全局参数。常用功能如下:
-
一键添加快捷方式或设置开机自启。 -
更改界面语言。Umi支持繁中、英语、日语等语言。 -
切换界面主题。Umi拥有多个亮/暗主题。 -
调整界面文字的大小和字体。 -
切换OCR插件。 - 渲染器
软件界面默认支持显卡加速渲染。如果在你的机器上出现截屏闪烁、UI错位的情况,请调整 界面和外观→渲染器,尝试切换到不同渲染方案,或关闭硬件加速。
3.3、调用接口
3.3.1、命令行手册
基础说明
命令行调用入口就是主程序 Umi-OCR.exe 。如果你使用的是备用启动器(如UmiOCR-data/RUN_GUI.bat),可能无法使用命令行。
如上图,必须允许HTTP服务才能使用命令行(默认开启)。主机选择 仅本地 就行了。
Umi-OCR 依赖HTTP接口进行跨进程通信,将你输入的命令行指令传递给后台的Umi-OCR处理进程。通信过程仅在系统内部的本地环回进行,不会泄露到外部(不经过物理网卡),请放心使用。
获取说明:umi-ocr --help
软件操控指令
弹出主窗口:umi-ocr --show
隐藏主窗口:umi-ocr --hide
关闭软件:umi-ocr --quit
重新加载配置文件:umi-ocr --reload (v2.1.5以上版本支持)
Umi-OCR 的配置文件是
./UmiOCR-data/.settings,ini格式;软件界面上设置的参数将会保存到此文件。允许手动修改配置文件,然后使用--reload指令来重新加载该配置文件并刷新软件设置界面。
OCR指令
鼠标截屏:umi-ocr --screenshot
范围截屏 指令:
umi-ocr --screenshot screen=0 rect=x,y,w,h
范围截屏控制参数:
screen
: 要截图的显示器编号(多个显示器时有效),从0开始。缺省为0。 rect
: 截图范围矩形框, x坐标,y坐标,w宽度,h高度。缺省为全屏。
注意:
-
这两个参数的前面无需加 --。 -
这两个参数至少要填一个,才能触发范围截图。没有任一参数时,执行鼠标截屏。
示例1:截取第1个显示器的全屏
umi-ocr --screenshot screen=0
示例2:截取第2个显示器,从左上角 (50,100) 开始,大小为 300×200 的矩形区域
umi-ocr --screenshot screen=1 rect=50,100,300,200
示例3:与 HotkeysCMD 工具配合,实现点击 快捷键 进行范围截图。
向 HotkeysCMD 的配置文件中添加这一行,表示点击 F10 时进行范围截图:
F10 umi-ocr --screenshot screen=0 rect=50,100,300,200
更多快捷键定义方式,详见 HotkeysCMD 文档。
粘贴图片:umi-ocr --clipboard
指定路径:umi-ocr --path "D:/xxx.png"
-
可传入文件夹的路径。将搜索文件夹中所有图片(包括嵌套子文件夹),并输出所有识别结果。 -
可传入多个路径。请用双引号 ""包裹单个路径,不同路径间用空格隔开。
指定多个路径 示例:umi-ocr --path "D:/img1.png" "D:/img2.png" "D:/image/test"
提示:
-
多图识别时,耗时较长;一次命令结束前不要输入下一个命令。 -
对于截屏、粘贴、路径指令,OCR参数(如识别语言,是否复制到剪贴板、是否弹出主窗口)采用 截图OCR标签页的设定。如果不希望命令行任务弹出主窗口,请在截图OCR标签页中关闭该选项。
二维码指令
识别二维码:umi-ocr --qrcode_read "D:/xxx.png"
-
与OCR指令一致,二维码识别的指令也支持传入多个图片&文件夹路径。
生成二维码:umi-ocr --qrcode_create "文本内容" "D:/输出图片.jpeg"
-
默认的图片宽高为最小适配长度。也可以在指令后方加上数字,手动指定图片宽高:
例,同时指定宽高为128像素:umi-ocr --qrcode_create "文本内容" "D:/输出图片.jpeg" 128
例,宽128,高256像素:umi-ocr --qrcode_create "文本内容" "D:/输出图片.jpeg" 128 256
关于指令简写
-
所有指令支持用前几个字母替代,如 --screenshot、--clipboard可以分别简写为--sc、--clipbo。具体可自己尝试。 -
对于大部分系统,支持使用小写文件名+省略 .exe来调用程序。即umi-ocr --sc等价于Umi-OCR.exe --sc。
命令行结果输出
- 复制到剪贴板
--clip - 输出到文件(覆盖)
--output "file.txt" - 输出到文件(追加)
--output_append "file.txt"
也可以使用箭头符号:
"-->"
等价于 --output"-->>"
等价于 --output_append
例:
umi-ocr --screenshot --clip umi-ocr --screenshot --output test.txt umi-ocr --screenshot "-->" test.txt
注:由于运行环境的一些限制,Umi-OCR 暂时无法重定向输出流,系统管道重定向符
>、管道操作符|可能失效。如果需要用程序 调用命令行指令,但是发现无法收到回传,可使用 HTTP转发命令行 代替。
高级指令
(仅供有经验的开发者使用)
高级指令代表了一种无限的可能性(笑),允许通过命令行调用任意标签页(模块)上的任意函数。但是用法比较复杂,你需要在一定程度上阅读本项目源码才能知道该调用哪个函数、传入什么参数。
页面指令
“页面模板”相当于收藏夹,可以从收藏夹中打开一个新页面。“已打开的页面”可以关闭。
查询当前已打开的页面,及所有页面模板:可以获取 [index]
umi-ocr --all_pages
创建新标签页:[index] 为页面模板序号
umi-ocr --add_page [index]
删除已创建的标签页:[index] 为现有页面序号
umi-ocr --del_page [index]
模块指令
每个标签页,通常会具有两个模块,一个是py,一个是qml。还可能会有一些不依附于标签页的独立py或qml模块。每个模块上都有一些函数可以被调用。 模块名 [name] 允许简写,如一个模块全称是 “ScreenshotOCR_1” ,那么可用 “ScreenshotOCR” 来代替。每次程序运行,模块名(的后缀)不一定相同。请使用简写来忽略后缀。
查询当前存在的py和qml模块:可获取 [name]
umi-ocr --all_modules
函数指令
查询某个py模块上有什么可调用的函数: [name] 为模块名
umi-ocr --call_py [name]
查询某个qml模块上有什么可调用的函数: [name] 为模块名
umi-ocr --call_qml [name]
调用py模块上的函数:
-
[name] 为模块名,[function] 为函数名。 [..paras] 为任意个参数。 -
paras 输入字符串。会根据文本结构,自动转为4种变量类型: int、float、list、dict。
umi-ocr --call_py [name] --func [function] [..paras]
调用qml模块上的函数:
umi-ocr --call_qml [name] --func [function] [..paras]
示例,调用二维码页qml模块的路径扫码函数,传入路径列表:
umi-ocr --call_qml QRCode --func scanPaths '[\"D:/Pictures/Screenshots/test/二维码/1111.png\",\"D:/Pictures/Screenshots/test/二维码/2222.png\"]'
同步调用函数
命令行解析器运行在子线程。为了确保线程安全,默认转到主线程执行命令。所以对于你来说就是异步执行的了,即无法取得函数的返回值。如果要获取函数返回值,可传入 –thread 指令,同步执行命令。这种操作较不安全,可能导致功能不正常甚至程序崩溃。
umi-ocr --call_qml [name] --func [function] --thread [..paras]
高级指令示例:
示例目标:将一些PDF文档添加到软件,生成双层可搜索PDF。
(提示:这个例子只是用来演示高级指令能做到什么事情。PDF文档识别可以直接调用 HTTP接口 。)
做法:
1. (可选)如果当前没有打开批量文档标签页,那么打开它:
-
1.1. 查询当前所有页面模板:
umi-ocr --all_pages
-
1.2. 已知 BatchDOC标签页的template_index为3。创建该标签页:
umi-ocr --add_page 3
-
1.3. 检查 BatchDOC模块是否已存在:
umi-ocr --all_modules
-
发现在 Qml modules中,已存在BatchDOC_1,那么就是正确的。
2. 将多个文档的路径,输入软件:
-
假设想要添加以下的文件:
C:\Users\My\Desktop\111.epub C:\Users\My\Desktop\222.pdf
-
使用以下指令,输入文档路径:(路径中 \需要改为/)
umi-ocr --call_qml BatchDOC --func addDocs '[ \"C:/Users/My/Desktop/111.epub\", \"C:/Users/My/Desktop/222.pdf\"]'
关于addDocs后面路径参数的格式:
-
在 Powershell 中,最外层为单引号 ',且左双引号前面必须有空格。即:'[■\"path_1\",■\"path_2\",■\"path_3\"]'(将■替换为空格)。单个路径为'[■\"路径1\"]'。 -
在 Terminal (终端)中,最外层为双引号 "。即:"[\"path_1\",\"path_2\",\"path_3\"]"。 -
这是 Windows 解析命令行参数的规则限制,与 Umi 自身的设计无关。
3. 启动任务:
umi-ocr --call_qml BatchDOC --func docStart
-
暂时无法通过CLI更改保存文件的类型(默认为 双层可搜索PDF )。想要添加其他保存类型,必须在软件界面中勾选。
往期推荐
夜雨聆风