乐于分享
好东西不私藏

Umi-OCR 文字识别工具

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 Installer(点击展开)

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.pypubsub_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种变量类型: intfloatlistdict 。
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 )。想要添加其他保存类型,必须在软件界面中勾选。

往期推荐

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Umi-OCR 文字识别工具

猜你喜欢

  • 暂无文章