hiroi-sora / RapidOCR-json

OCR离线图片文字识别命令行windows程序,以JSON字符串形式输出结果,方便别的程序调用。基于 RapidOcrOnnx 。
MIT License
199 stars 35 forks source link

离线OCR组件 系列项目:

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)

RapidOCR-json

这是一个基于 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 识别到文字
101 未识别到文字
200 图片路径不存在
201 图片路径string无法转换到wstring
202 图片路径存在,但无法打开文件
203 图片打开成功,但读取到的内容无法被opencv解码
210 剪贴板打开失败
211 剪贴板为空
212 剪贴板的格式不支持
213 剪贴板获取内容句柄失败
214 剪贴板查询到的文件的数量不为1
215 剪贴板检索图形对象信息失败
216 剪贴板获取位图数据失败
217 剪贴板中位图的通道数不支持
299 未知异常
300 返回数据无法转换为json字符串

通过API调用

1. Python API

资源目录

使用示例:

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++”

更新日志

v0.2.0 2023.9.25

v0.1.0 2023.4.29