cevencheng / Umi-OCR

OCR离线批量图片文字识别软件,带界面。可排除视频图片中的水印、游戏图片中的UI等干扰,提取干净的文本。基于 PaddleOCR 。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Umi-OCR 批量图片转文字工具

软件用途:读取剪贴板图片 / 批量导入本地图片,识别图片中的文本,输出到软件面板或本地 .txt / .md 文件。

适用于win10 x64平台。

下载

Github下载:

Umi-OCR 批量图片转文字 v1.2.5

蓝奏云下载:(请留意发布日期和版本号)

https://wwn.lanzoul.com/b036wwa4d 密码:5w36

系统支持

  • 支持 win10 x64 。
  • 不建议使用 win7 ,核心c++模块PaddleOCR-json基本无法运行。如果想尝试,win7 x64 sp1 打满系统升级补丁+安装vc运行库后有小概率能跑起来……

Umi-系列图片处理软件

Umi-OCR 批量图片转文字软件 ◁

Umi-CUT 批量图片去黑边/裁剪/压缩软件 (支持Win7)

简介

本软件用于读取剪贴板图片 / 批量导入本地图片,识别图片中的文本,输出到软件面板或本地txt文件。 除了能批量识别普通图片,本软件还有忽略指定区域的特殊功能:

类似含水印的视频截图、含有UI/按钮的游戏截图等,往往只需要提取字幕区域的文本,而避免提取到水印和UI文本。本软件可设置忽略某些区域内的文字,来实现这一目的。

当有大量的影视和游戏截图需要整理归档,或者想翻找包含某一段台词/字幕的截图;将这些图片提取出文字、然后Ctrl+F是一个很有效的方法。这是开发本软件的初衷。

本软件使用离线OCR模块 PaddleOCR-json 图片转文字程序 ,使用过程中无需联网。支持更换Paddle官方模型(兼容v2和v3版本)或自己训练的模型,支持修改PaddleOCR参数。通过添加不同的语言模型,软件可识别多国语言。

简单上手

准备

下载压缩包并解压全部文件即可,无需安装。

批量识别本地图片文件

  1. 打开主程序,将任意 图片/文件夹 拖入窗口中的白色背景表格区域,或点击左上方的 浏览 选择图片。
  2. 点击右上方 开始任务 ,等待进度条走完。
  3. 点击 识别内容 选项卡查看输出文字,或者前往 第一张图片的目录 查看识别结果txt文件。

快速识别剪贴板截图

  1. 按 [Win+Shift+S] 截取一张系统截图,或者在网页等地方复制一张图片。

  2. 切换到 识别内容 选项卡,点击 剪贴板读取

  3. 可以在 设置 选项卡中录制并启用 全局快捷键,快速唤起程序识别。若此时程序窗口处在被覆盖的后方或者被最小化,则会自动挪到最前的位置。

设置说明

点击 设置 选项卡,配置参数。大部分设置项修改后会自动保存。

计划任务:v1.2.5

  • 识图任务完成后,额外执行的任务。可执行打开生成文件/目录,自动关机/待机等。
  • 即使识图任务正在进行中,也可以随意修改这些选项。
自定义计划任务
  • 您可创建自己的计划任务,本质是调用一段cmd命令。
  • 点击 打开设置文件 ,在okMission中添加一项元素。
  • 键为任务名称,值为字典,其中code为cmd命令。多条命令可用&分隔。例:
"我的任务": {"code": "cmd命令1 & 命令2"}

忽略图片中某些区域内的文字:

  • 点击 添加区域 展开配置忽略区的新窗口。具体配置方式见后。
  • 点击 清空区域 清空已配置的所有忽略区域参数。
  • 已添加区域后,上方标题文字提示当前忽略区域的 生效分辨率

从剪贴板读取图片:

  • 点击 录制按键 后按下想要的快捷键,如 ctrl+shift+s 。然后勾选 启用全局快捷键
  • 按下快捷键后,程序检查当前剪贴板的第一位是否为图片,是则程序跳到顶层并展示识别文字。
  • 请检查并避免全局快捷键与其它程序冲突。
  • 可设置识图后 自动复制识别内容(不含任务时间等信息的纯内容文本)。此设置只对剪贴板识图生效,批量任务时无效。

输入设置:

  • 递归读取子文件夹中所有图片 若勾选,拖入文件夹到处理列表时,会导入所有子文件夹中的图片。否则只会导入一层文件夹下的图片。
图片后缀正常情况无需改动。
  • 图片后缀 配置软件允许载入的图片后缀,不同后缀以空格分隔,必须全为小写。
    • 如果你有必要添加新的图片后缀,要保证该图片同时满足c++模块的PaddleOCR和python的PIL均可识别。比如 .gif 图片,虽然PIL可以识别,但PaddleOCR无法识别,载入gif文件会导致软件任务失败,因此不允许载入 .gif
    • 不在许可后缀范围内的文件,拖入软件也不会被载入。目前默认的图片后缀为:.jpg .jpe .jpeg .jfif .png .webp .bmp .tif .tiff

输出设置:

  • 识别内容写入本地文件 取消勾选后,不会再生成本地文件,只能在 识别内容 选项卡中查看输出信息。若设置了本次任务完成后自动关机,请务必勾选此项,以免至今为止的努力全部木大。
其他项正常情况无需改动。
  • 输出调试信息 若勾选,则会额外输出程序工作状态的内容。
  • 忽略无文字的图片 若勾选,则不含文字(或文字全被忽略区域屏蔽掉)的图片名称不会出现在输出信息中。
    • 若想生成一份用于浏览的markdown文件,则建议取消勾选
  • 生成文件可选择两种风格:纯文本.txt文件Markdown风格.md文件 。前者可用于查找等一般用途。后者在编辑器或浏览器中渲染为图文并茂的页面,可用于浏览和欣赏图集。
  • 输出目录输出文件名 设置生成的文件的位置和名称。
    • 当拖入第一张图片且这两项设置为空时,自动设置输出路径为第一张图片的父目录,输出文件名为 [转文字]_{父目录}.txt。除非要自定目录和名称,否则这两项默认留空即可
  • 处理列表标签页的 清空表格 按钮,除了会清空已导入的图片列表,还会清空 输出目录输出文件名 设置。这样下次拖入新图片时,就能在新的位置存放输出文件。

识别器设置:

  • 识别器路径 配置当前使用的识别器exe程序。
切换模型库和语言

英文

中文识别库自带英文识别,无需切换。

日文

软件附带日文识别库,需要手动切换。将 识别器路径 修改为 PaddleOCR-json\PaddleOCR_json_jp.exe 即可。

其他语言

需要下载和简单修改配置文件。以法文为例:

  1. 前往 PP-OCR系列 多语言识别模型列表 下载对应的 推理模型french_mobile_v2.0_rec_infer.tar字典文件french_dict.txt
  2. PaddleOCR-json目录下创建文件夹rec_fr,将解压后的三个模型文件放进去。字典文件可直接放在目录下。
  3. 复制一份识别器PaddleOCR_json.exe,命名为PaddleOCR_json_fr.exe
  4. 复制一份配置单PaddleOCR_json_config.txt,命名为PaddleOCR_json_fr_config.txt
  5. 打开配置单PaddleOCR_json_fr_config.txt,将# rec config相关的两个配置项改为:
    # rec config
    rec_model_dir  rec_fr
    char_list_file french_dict.txt
  6. 保存文件,打开软件,将 识别器路径 改为 PaddleOCR-json\PaddleOCR_json_fr.exe

其他模型库

软件附带的v2版模型可能过时,可以重新下载PaddleOCR的最新官方模型,享受更精准的识别质量。或者使用自己训练的模型。

本程序兼容v2和v3版本模型库,但个人实测v3的效果不稳定,v2在速度和精确性上均占优。(见issue #4

  1. 下载模型
  • 前往PaddleOCR下载一组推理模型(非训练模型)。中英文超轻量PP-OCRv2模型 体积小、速度快,中英文通用PP-OCR server模型 体积大、精度高。一般来说,轻量模型的精度已经非常不错,无需使用标准模型。
  1. 放置模型
  • 将下载下来的方向分类器(如ch_ppocr_mobile_v2.0_cls_infer.tar)、检测模型(如ch_PP-OCRv2_det_infer.tar)、识别模型(如ch_PP-OCRv2_rec_infer.tar)解压,将文件分别放到对应文件夹 cls、det、rec
  1. 调整配置
  • 仿照修改语言的方法,复制一份PaddleOcr_json.exe及其配置单[exe名称]_config.txt,修改其中的路径参数。打开exe,若无报错,则模型文件已正确加载。“Active code page: 65001”是正常现象。
  • 配置单中,可设置更多OCR识别参数等。调整它也许能获得更高的识别精度和效率。具体参考官方文档
  • 注意,如果修改了exe名称,也需要同步修改配置文件名的前缀。

如何精准识别超大分辨率图片

  • 为了提高速度,PaddleOCR预先将长度超标的图片进行压缩,再执行文字识别。这可能导致超大分辨率(4k以上)图片的识别准确度下降,比如漏掉小字。调整启用压缩阈值可改善该问题,方法见issue #5。注意,减少压缩可能导致识别耗时大幅增加。

忽略区域功能

忽略区域是本软件特色功能,可用于排除图片中水印的干扰,让识别结果只留下所需的文本。

展开详情

“忽略区域”是指图片上指定位置与大小的矩形区域,完全处于这些区域内的文字块,将被排除。

  • 点击 设置 选项卡中的 添加忽略区域 ,进入忽略区域选择窗口。
  • 将任意图片 拖入 该窗口,可预览该图片。将新图片拖入窗口可切换预览,但已绘制的忽略区域不会消失;可切换不同图片来仔细调整忽略区域。
  • 绘制 忽略区域 :拖入图片后,点击选中左起第一按钮 +忽略区域 1 ,然后在图片上按住左键拖拽,绘制矩形区域。可 撤销 步骤。
  • 绘制完后,点击 完成 返回软件主窗口。若不想应用此次绘制,则右上角X,取消。

简单案例见下。

简单排除视频截图中的水印:

  1. 打开忽略区域设置窗口,拖入任一张截图。 稍等约1秒,面板上会显示出图片,识别到的文字区域会被虚线框起来。发现右上角的水印也被识别到了。
  2. 点击选择 +忽略区域 1 。在画面上按住左键拖拽,绘制矩形完全包裹住水印区域,范围可以大一些。
  3. 点击 完成 。返回主窗口, 开始任务

排除游戏截图中的两种UI:

  • 假设有一组游戏截图,主要分为两类图片,这两类图片的文字位置和UI位置不太相同:
    • A类(上图左)为对话模式,字数少,要保留的台词文本在画面下方,要排除的UI分布于底端。
    • B类(上图右)为历史文本模式,字数多,从上到下都有要保留的文本(与A类UI位置有重合),要排除的UI分布在两侧。
  1. 拖入一张A类图片。选择 +忽略区域 1 ,绘制矩形包裹住要排除的 底端UI
  2. 拖入一张B类图片。选择 +识别区域 ,绘制矩形包裹住 小部分要保留的文本 。注意只要该区域内含有任意保留文本即可,不需要画得很大,不需要包裹住所有保留文本;不能与A类图中 可能存在的任何文本 重合。
  3. 然后选择 +忽略区域 2 ,绘制矩形包裹住B类图要排除的 两侧UI
  4. 点击 完成 。返回主窗口, 开始任务

忽略区域处理逻辑:

  • 忽略区域1 :正常情况下,处于 忽略区域1 内的文字 不会 输出。

  • 识别区域 :当识别区域内存在文本时,忽略区域1失效 ;即处于忽略区域1内的文字也 被输出。

  • 忽略区域2 :当 忽略区域1失效 时,忽略区域2才生效;即处于区域1内的文字 输出、区域2内的文字 不会 输出。

    识别区域 忽略区域1 忽略区域2
    × 不存在文字 √ 生效 × 失效
    √ 存在文字 × 失效 √ 生效
  • “忽略区域配置”只针对一种分辨率生效。假如配置的分辨率是1920x1080,那么批量识别图片时,只有符合1920x1080的图片才会排除干扰文本;1920x1079的图片中的文字会全部输出。

  • 拖入预览的图片必须分辨率相同。假如先拖入1920x1080的图片,再拖入其它分辨率的图片;软件会弹窗警告。只有点击 清空 删除当前已配置的忽略区域,才能拖入其他分辨率图片,并应用此分辨率。

测试报告

用它跑完了我珍藏的10000多张各类截图文件,效果十分满意。 跟以前使用百度云在线OCR接口(标准文字识别)跑的对比:

  • Umi-OCR使用轻量模型时速度很快,平均识别耗时<1s(使用笔记本低压u)。在线OCR受限于网络,耗时>1s。
  • Umi-OCR对符号的正确识别率更高,比如能正确识别中文逗号。在线OCR的结果中,很大一部分中文逗号被识别为英文。
  • 对于文字内容,Umi-OCR与在线OCR的准确度几乎没有差异。都能满足所需。
  • 排除UI与水印干扰,是Umi-OCR的独有技能。理论上在线OCR的高精度识别接口也能做到,不过那玩意死贵死贵

开发说明

  • 本软件工作流程是python调用c++编译的识别器exe程序,识别器exe再加载模型文件和必要的dll链接库,完成图片识别工作。因此可切换不同exe识别器和模型文件,实现切换多国语言的识别。而且,c++识别器比python版PaddleOCR具有更高的性能。
  • 启动任务时,运行tk的主线程创建了一个新线程和一个事件循环。耗时量大的OCR任务在新线程中执行,对tk界面的修改由事件循环提交到主线程中执行。大概是这么回事?反正能跑起来就对了。无论任务跑得多满,界面都不会卡,除非实在顶不住
  • PaddleOCR_json.exe接收输入一个本地图片路径,以json格式字符串输出这张图片的识别结果,如此循环往复。具体见 PaddleOCR-json 图片转文字程序
  • 由于PaddleOCR-json只接受硬盘文件,所以读取剪贴板图片时,会先将其缓存到同目录下的Umi-OCR_temp。每次任务时清空前一次的缓存。
  • 代码很丑,有空重构 下次一定
  • 使用pyinstaller打包,参数为 pyinstaller -F -w -i icon/icon.ico -n "Umi-OCR 批量图片转文字" main.py

TODO

  • 输出内容可选为markdown风格并嵌入图片路径。
  • 设置项能保存。
  • 自动打开输出文件or文件夹。
  • 识别剪贴板中的图片。
  • 任务进行时,禁用部分设置项。
  • 计划任务:完成后自动关机/休眠等。
  • 递归导入文件夹。

低(有)优(生)先(之)级(年):

  • 对图片重命名。
  • 忽略区域能保存预设。
  • 缩减离线OCR模块的体积。

更新日志

v1.2.5 2022.7.22
  • 添加新功能:计划任务。识图完成后执行自动关机等任务。
  • 添加新功能:可选拖入文件夹时递归导入子文件夹中所有图片。
  • 调整UI:添加一些配置文件的快捷入口。
v1.2.4 2022.6.4
  • 添加新功能:可选识别剪贴板图片后自动复制识别的文本。
  • 补充功能:快捷键调用剪贴板识图时,若程序窗口被最小化,则恢复前台状态并挪到最前位置。
v1.2.3 2022.5.31
  • 添加新功能:读取剪贴板图片。配置全局快捷键调用该功能。
v1.2.2 2022.4.30
  • 添加新功能:可选任务完成后自动打开输出文件或目录。
v1.2.1 2022.4.16
  • 更新PaddleOCR-json模块至v1.1.1,修正了可能得到错误包围盒的漏洞。
v1.2.0 2022.4.8
  • 可选生成Markdown风格的图文并茂的.md文件,作为索引使用有更佳的观感。当然也可以继续选择生成纯文本.txt文件。
  • 修改设置面板的样式,改为滚动面板以容纳更多设置选项。
  • 用户修改配置项后可自动保存。
v1.1.1 2022.3.30
  • 修正了漏洞:退出 [忽略区域窗口] 时,OCR子进程未关闭。
v1.1.0 2022.3.30
  • 添加新功能:[忽略区域窗口] 以虚线框 展示识别出的文字块。
v1.0.0 2022.3.28
  • “梦开始的地方”

About

OCR离线批量图片文字识别软件,带界面。可排除视频图片中的水印、游戏图片中的UI等干扰,提取干净的文本。基于 PaddleOCR 。


Languages

Language:Python 100.0%