调用Umi-OCR文字识别
March 28, 2024
Python, Umi-OCR, 文字识别, OCR

调用Umi-OCR文字识别

March 28, 2024
Python, Umi-OCR, 文字识别, OCR

离线环境python调用文字识别,先安装的是tesseract,安装和使用都很方便,但缺点是中文识别率略低,对图片质量要求较高,离线办公环境的截图信息质量一般,因此识别率偏低,而且由于不同图片的背景相差较大,需要设定不同的图片预处理参数,非常麻烦。 昨天在网上发现一个OCR文字识别软件,Umi-OCR,环境部署都是打包做好的,可以说是开箱即用。这里记录一下安装使用过程。

1. 系统需求: #

Windows7 x64 及以上

2. 版本选择 #

目前直接下载的有两个版本:Paddle版和RapidOCR版,安装后可以发现这个版本的最终形式是Paddle或Rapid引擎是在插件文件夹内:UmiOCR-data/plugins​。因为Umi-OCR (v2 以上)支持以插件的形式导入 OCR 引擎等组件,不过不同的插件对硬件有不同的需求,识别速度、识别率以及系统占用情况都不一样,可以根据硬件情况和需求下载不同插件,下载后解压即可,具体内容参见:GitHub - hiroi-sora/Umi-OCR_plugins: Umi-OCR 插件库。截止至:2024-03-28版本号为:Umi-OCR v2.1.0​

3. 下载地址 #

4. 安装使用 #

软件发布包下载为 .7z 压缩包或 .7z.exe 自解压包。自解压包可在没有安装压缩软件的电脑上,解压文件。
本软件无需安装。解压后,点击 Umi-OCR.exe 即可启动程序,或者点击主文件包中的bat运行也可。

5. 界面介绍 #

这里就略过,作者作了详细的介绍。具体参看:Umi-OCR: Umi-OCR 是一款免费、开源、可批量的离线 OCR 软件,基于 PaddleOCR,适用于 Windows10/11 平台 - Gitee.com

6. 调用 #

我这里使用python调用,取代tesseractOCR,不想折腾开发,因此直接使用了HTTP接口方式调用。

6.1 HTTP接口的前提条件 #

在全局设置里,必须允许HTTP服务才能使用HTTP接口(默认开启)。如果需要允许被局域网访问,请将主机切换到任何可用地址​。 在全局设置页中勾选高级​才会显示。 缺点:由于目前的一些缺陷,如果Umi-OCR关闭时仍有用户未断开HTTP接口连接,可能导致Umi-OCR关闭不完全(UI线程结束了,但负责网络的子线程未被关闭)。这时只能等待所有用户关闭连接,或者进任务管理器强制结束进程。当前此缺陷版本:Umi-OCR v2.1.0​

6.2 调用代码 #

首先需要将图片转换为base64,再用HTTP接口调用文字识别。

import requests
import json
import base64

# 图片转base64
with open(r"d:\文档\Desktop\auto\my_screenshot1.png", "rb") as f:
    base64_data = base64.b64encode(f.read()).decode()
# print(base64_data)

url = "http://127.0.0.1:1224/api/ocr"
data = {
    "base64": base64_data,
    # 可选参数
    "options": {
        # 通用参数
        "tbpu.parser": "single_code",
        "data.format": "text",
        # 引擎参数
        "ocr.cls": False,
        "ocr.language": "models/config_chinese.txt",
        "ocr.maxSideLen": 1024
    } # type: ignore
    # Paddle引擎模式
    # "options": {
    #     "ocr.language": "models/config_chinese.txt",
    #     "ocr.cls": False,
    #     "ocr.limit_side_len": 960,
    #     "tbpu.parser": "multi_para",
    #     "data.format": "text",
    # }
    # Rapid引擎模式
    # "options": {
    #     "ocr.language": "简体中文",
    #     "ocr.angle": False,
    #     "ocr.maxSideLen": 1024,
    #     "tbpu.parser": "multi_para",
    #     "data.format": "text",
    # }
}
headers = {"Content-Type": "application/json"}
data_str = json.dumps(data)
response = requests.post(url, data=data_str, headers=headers)
if response.status_code == 200:
    res_dict = json.loads(response.text)
    #若"data.format": "txet",返回识别结果,表示去掉位置信息,仅输出识别结果
    print("返回值字典\n", res_dict["data"])
    #若"data.format": "dict",返回全部识别结果,为字典,包含位置信息,匹配度等信息,循环输出识别结果
    # for i in res_dict["data"]:
    #     print(i["text"])

#以下为转化为excel表格并写入excel
import pandas as pd 
import numpy as np 
data=res_dict
data=data['data'].split('\n')
data=pd.Series(data)
#data每行按空格分割,并删除空行
data=data[data!='']
data=data.str.split(pat=None, n=-1, expand=True)
print(data)
#data转为dataframe
df=pd.DataFrame(data)
df.to_excel('data.xlsx',index=False,header=False)
6.3 代码的解释: #

​options​ 中有两部分参数:通用参数 和 引擎参数 。 通用参数 :是在任何情况下都适用的,选项:

  • ​data.format​ :数据返回格式。返回值字典中,[“data”]​ 按什么格式表示OCR结果数据。可选值(字符串):
    • ​dict​:含有位置等信息的原始字典(默认)
    • ​text​:纯文本
  • ​tbpu.parser​ :排版解析方案。可选值(字符串):
    • ​multi_para​:多栏-按自然段换行(默认)
    • ​multi_line​:多栏-总是换行
    • ​multi_none​:多栏-无换行
    • ​single_para​:单栏-按自然段换行
    • ​single_line​:单栏-总是换行
    • ​single_none​:单栏-无换行
    • ​single_code​:单栏-保留缩进,适用于解析代码截图
    • ​none​:不做处理 引擎参数 :对于加载不同引擎插件时,可能有所不同。完整参数说明请通过 get_options 接口查询。以下是一些示例(自用的是paddle引擎因此只介绍此):
PaddleOCR 引擎参数 类型 默认值 描述
​ocr.language​ string ​models/config_chinese.txt​ 识别语言。可选值请通过 get_options 接口查询
​ocr.cls​ boolean ​false​ 是否进行图像旋转校正。true/false​
​ocr.limit_side_len​ int ​960​ 图像压缩边长。允许 960/2880/4320/999999​
Base64 响应格式
​json​
字段名 类型 描述
code int 任务状态。100​为成功,101​为无文本,其余为失败
data list/string 识别结果,格式见下
time double 识别耗时(秒)
timestamp double 任务开始时间戳(秒)
data​ 格式
图片中无文本(code==101​),或识别失败(code!=100 and code!=101​)时:
  • ​[“data”]​为string,内容为错误原因。例: {“code”: 902, “data”: “向识别器进程传入指令失败,疑似子进程已崩溃”}​ 识别成功(code==100​)时,如果options中data.format​为dict​(默认值):
  • ​[“data”]​为list,每一项元素为dict,包含以下子元素:
参数名 类型 描述
text string 文本
score double 置信度 (0~1)
box list 文本框顺时针四个角的xy坐标:[左上,右上,右下,左下]​
end string 表示本行文字结尾的结束符,根据排版解析得出。可能为空、空格、换行。
识别成功(code==100​)时,如果options中data.format​为text​:
  • ​[“data”]​为string,即所有OCR结果的拼接。

7. 优缺点 #

优点是安装使用方便,识别效率高。 缺点就是系统占用太大,但可以通过全局设置里对软件的占用做一定限制:线程数限和内存占用设置上限,避免系统开销过大。


© 2024 Powered By Hugo,模板:Hugo-book . Contact: tndyx@hotmail.com

本站总访问量 本文总阅读量