PaddleOCR-json | RapidOCR-json | |
---|---|---|
CPU要求 | CPU必须具有AVX指令集。不支持以下CPU: | 无特殊要求 👍 |
凌动Atom,安腾Itanium,赛扬Celeron,奔腾Pentium | ||
推理加速库 | mkldnn 👍 | 无 |
识别速度 | 快(启用mkldnn加速)👍 | 中等 |
极慢(不启用mkldnn) | ||
初始化耗时 | 约2s,慢 | 0.1s内,快 👍 |
组件体积(压缩) | 52MB | 15MB 👍 |
组件体积(部署) | 250MB | 30MB 👍 |
CPU占用 | 高,榨干硬件性能 | 较低,对低配机器友好 |
内存占用峰值 | >2000MB(启用mkldnn) | ~500MB 👍 |
~600MB(不启用mkldnn) |
这是一个基于 RapidOcrOnnx 的离线图片OCR文字识别程序。通过管道等方式输入本地图片路径,输出识别结果json字符串。适用于 Win7 x64
及以上的系统。
本项目旨在提供一个封装好的OCR引擎组件,使得没有C++编程基础的用户也可以用别的语言来简单地调用OCR,享受到更快的运行效率、更便捷的打包&部署手段。
下载 RapidOCR-json v0.2.0 并解压,即可。
方式一:
打开控制台,输入 path/RapidOCR-json.exe --image_path=path/test1.png
。
方式二:
直接双击打开 RapidOCR_json.exe
。等程序初始化完毕输出OCR init completed.
。
使用json字符串输入图片路径,建议使用ascii转义。如:
{"image_path":"D:/\u6d4b\u8bd5\u56fe\u7247.png"}
也支持传入图片base64编码的字符串。如:
{"image_base64":"……"}
还可以直接使用 Python API 。
键名称 | 值说明 | 默认值 |
---|---|---|
ensureAscii | 启用(1)/禁用(0) ASCII转义输出 | 0 |
models | 模型目录地址,可绝对or相对路径 | "models" |
det | det库名称 | "ch_PP-OCRv3_det_infer.onnx" |
cls | cls库名称 | "ch_ppocr_mobile_v2.0_cls_infer.onnx" |
rec | rec库名称 | "ch_PP-OCRv3_rec_infer.onnx" |
keys | rec字典名称 | "ppocr_keys_v1.txt" |
doAngle | 启用(1)/禁用(0) 文字方向检测 | 1 |
mostAngle | 启用(1)/禁用(0) 角度投票 | 1 |
numThread | 线程数 | 4 |
padding | 预处理白边宽度,可优化窄边图片识别率 | 50 |
maxSideLen | 图片长边缩小值,可提高大图速度 | 1024 |
boxScoreThresh | 文字框置信度门限值 | 0.5 |
boxThresh | 0.3 | |
unClipRatio | 单个文字框大小倍率 | 1.6 |
image_path | 初始图片路径 | "" |
例1:(启动时传入图片路径,执行一次识别,然后关闭程序)
RapidOCR_json.exe --image_path="D:/images/test(1).png"
输出: 识别结果
例2:(启动时不传入图片路径,进入无限循环,不断接受json输入)
RapidOCR_json.exe --ensureAscii=1
输出: OCR init completed.
{"image_path": "D:/images/test(1).png"}
输出: 识别结果
例3:(手动指定参数)
RapidOCR_json.exe --doAngle=0 --mostAngle=0 --numThread=12 --padding=100 --image_path="D:/images/test(1).png"
通过API调用一次OCR,无论成功与否,都会返回一个字典。
字典中,根含两个元素:状态码code
和内容data
。
状态码code
为整数,每种状态码对应一种情况:
100
识别到文字text
:文本内容,字符串。box
:文本包围盒,长度为4的数组,分别为左上角、右上角、右下角、左下角的[x,y]
。整数。score
:识别置信度,浮点数。{'code':100,'data':[{'box':[[13,5],[161,5],[161,27],[13,27]],'score':0.9996442794799805,'text':'飞舞的因果交流'}]}
101
未识别到文字No text found in image. Path:"图片路径"
{'code':101,'data':'No text found in image. Path: "D:\\空白.png"'}
200
图片路径不存在Image path dose not exist. Path:"图片路径".
{'code':200,'data':'Image path dose not exist. Path: "D:\\不存在.png"'}
使用 Unicode UTF-8 提供全球语言支持"
)时,不能读入含emoji等特殊字符的路径(如😀.png
)。但一般的中文及其他 Unicode 字符路径是没问题的,不受系统区域及默认编码影响。201
图片路径string无法转换到wstringImage path failed to convert to utf-16 wstring. Path: "图片路径".
202
图片路径存在,但无法打开文件Image open failed. Path: "图片路径".
203
图片打开成功,但读取到的内容无法被opencv解码Image decode failed. Path: "图片路径".
.png
改成.jpg或.exe
),也可以被正常识别。210
剪贴板打开失败Clipboard open failed.
211
剪贴板为空Clipboard is empty.
212
剪贴板的格式不支持Clipboard format is not valid.
213
剪贴板获取内容句柄失败Getting clipboard data handle failed.
214
剪贴板查询到的文件的数量不为1Clipboard number of query files is not valid. Number: 文件数量
215
剪贴板检索图形对象信息失败Clipboard get bitmap object failed.
216
剪贴板获取位图数据失败Getting clipboard bitmap bits failed.
217
剪贴板中位图的通道数不支持Clipboard number of image channels is not valid. Number: 通道数
299
未知异常An unknown error has occurred.
300
返回数据无法转换为json字符串JSON dump failed. Coding error.
使用示例:
import os
import sys
from RapidOCR_api import OcrAPI
ocrPath = '引擎路径/RapidOCR_json.exe'
ocr = OcrAPI(ocrPath)
res = ocr.run('样例.png')
print('OCR识别结果:\n', res)
ocr.stop()
其他待填坑……
👆当你需要修改项目源码时欢迎参考。
感谢 RapidAI/RapidOcrOnnx ,没有它就没有本项目。
本项目中使用了 nlohmann/json :
“JSON for Modern C++”
2023.9.25
imagePath
改为 image_path
image_base64
2023.4.29