PaddleOCR-json | RapidOCR-json | |
---|---|---|
CPU要求 | CPU必须具有AVX指令集。不支持以下CPU: | 无特殊要求 👍 |
凌动Atom,安腾Itanium,赛扬Celeron,奔腾Pentium | ||
推理加速库 | mkldnn 👍 | 无 |
识别速度 | 快(启用mkldnn加速)👍 | 中等 |
初始化耗时 | 约0.6s | 0.1s内,快 👍 |
组件体积(压缩) | 100MB | 70MB 👍 |
组件体积(部署) | 369MB | 80MB 👍 |
CPU占用 | 较高 | 较低,对低配机器友好 |
建议预留内存 | 2000MB | 800MB 👍 |
支持: Win7 x64、Linux x64、Docker
这是一个基于 PaddleOCR v2.6 及 v2.8 cpp_infer 的离线图片OCR文字识别程序,可快速让你的程序拥有OCR能力。它可以作为一个子进程被上层程序调用,也可以作为一个单独的进程通过TCP调用。本项目提供了Python等语言的API,你可以无视技术细节,通过两行代码使用它。
本项目旨在提供一个封装好的OCR引擎组件,使得没有C++编程基础的开发者也可以用别的语言来简单地调用OCR,享受到更快的运行效率、更便捷的打包&部署手段。
计算机中丢失 VCOMP140.DLL
,请安装 VC运行库 。CPU必须具有AVX指令集。常见的家用CPU一般都满足该条件。
AVX | 支持的产品系列 | 不支持 |
---|---|---|
Intel | 酷睿Core,至强Xeon | 凌动Atom,安腾Itanium,赛扬Celeron,奔腾Pentium |
AMD | 推土机架构及之后的产品,如锐龙Ryzen、速龙Athlon、FX 等 | K10架构及之前的产品 |
下载可执行文件包:
PaddleOCR-json.exe -image_path="test.jpg"
调用流程大体分为如下几步。不同API的具体接口可能有细微差别。
资源目录
下有更详细的使用说明及demo。
欢迎补充!请参考 详细使用指南 。
键名称 | 默认值 | 值说明 |
---|---|---|
ensure_ascii | true | 启用ascii编码转换,以ascii编码(纯英文数字)输出unicode字符,如 你好 →\u4f60\u597d 。 |
一般情况下,json解码器会自动将ascii码翻译回原字符。此选项建议开启,以提高编码兼容性。 | ||
config_path | "" | 可以指定不同语言的配置文件路径,识别多国语言。详情见下节。 |
models_path | "" | 可以指定语言库 models 文件夹的路径。详情见下节。 |
det | true | 启用det目标识别。如果你的图片中只含一行文本,且没有空白区域,那么可以关闭det以加快速度。 |
cls | false | 启用cls方向分类,识别方向不是正朝上的图片。 |
use_angle_cls | false | 启用方向分类,必须与cls同时设置。 |
enable_mkldnn | true | 启用CPU推理加速,关掉可以减少内存占用,但会降低速度。 |
limit_side_len | 960 | 对图像边长进行限制,降低分辨率,加快速度。如果对大图/长图的识别率低,可增大此选项的值。 |
建议为 32 & 48 的公倍数,如 960, 2880, 4320 |
更多参数详见 args.cpp 。(不支持其中GPU相关、表格识别相关的参数。-)
Release压缩包中,默认附带了 简中,繁中,英,日,韩
的语言库与配置文件,在 models
目录下。
models
目录中,每一个 config_xxx.txt
是一组语言配置文件(如英文是congfig_en.txt
)。只需将这个文件的路径传入 config_path
参数,即可切换为对应的语言。以 Python API 为例:
enginePath = "D:/Test/PaddleOCR_json.exe" # 引擎路径
argument = {"config_path": "models/config_en.txt"} # 指定使用英文库
ocr = GetOcrApi(enginePath, argument)
如果 config_path 留空,则 PaddleOCR-json 默认加载并使用简体中文识别库。
但是,当使用默认路径或单独设置 config_path
时,PaddleOCR-json可执行文件必须与语言库在同一目录下。比如:
.
├─ PaddleOCR-json.exe
└─ models
├─ ...
如果语言库在另外一个文件夹下,PaddleOCR-json就无法找到语言库。
在这种情况下,你可以使用 models_path
参数来设置语言库的位置。PaddleOCR-json会使用用户设置的语言库位置为基准来加载其他文件。
这样一来,即使 PaddleOCR-json 与语言库不在同一目录下也能正常使用。以 Python API 为例:
enginePath = "D:/Test/PaddleOCR_json.exe" # 引擎路径
modelsPath = "D:/Hello/models" # 语言库路径路径
# 这里的参数顺序不影响结果
argument = {
# 指定语言库位置
"models_path": "D:/Hello/models",
# 指定使用英文库
"config_path": "D:/Hello/models/config_en.txt",
}
ocr = GetOcrApi(enginePath, argument)
本项目支持 PP-OCR 系列官方 V2~V4 模型,或自己训练的符合PP规范的模型。更多 PP-OCR 系列官方模型下载: https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/models_list.md
若你希望删除吃灰的语言库文件以便减少软件体积,可以删除 models
目录中含有对应语言前缀和 rec_infer 后缀的文件夹。比如你希望删除日语japan
相关的库,只需删除该文件夹:
japan_PP-OCRv3_rec_infer
一组语言的rec库大约占用10MB空间(未压缩)。若删除到仅剩1组语言,可以节省约60MB空间。
请不要删除cls_infer及det_infer后缀的文件夹,这是所有语言公用的检测/方向分类库。
通过API调用一次OCR,无论成功与否,都会返回一个字典。
字典中,根含两个元素:状态码code
和内容data
。
状态码code
为整数,每种状态码对应一种情况:
100
识别到文字text
:文本内容,字符串。box
:文本包围盒,长度为4的数组,分别为左上角、右上角、右下角、左下角的[x,y]
。整数。score
:识别置信度,0~1的浮点数。越接近1表示文字内容越可信。cls
和 use_angle_cls
,那么会多出两个元素:
cls_label
:方向分类标签,整数。0 表示文字方向是顺时针 0°或90°,1 表示 180°或270° 。cls_score
:方向分类置信度,0~1的浮点数。越接近1表示方向分类越可信。{'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
),也可以被正常识别。300
base64字符串解析为string失败Base64 decode failed.
data:image/jpg;base64,
前缀。)301
base64字符串解析成功,但读取到的内容无法被opencv解码Base64 data imdecode failed.
400
json对象 转字符串失败Json dump failed.CODE_ERR_JSON_DUMP
401
json字符串 转对象失败Json dump failed.CODE_ERR_JSON_DUMP
402
json对象 解析某个键时失败Json parse key 键名 failed.
400
更精准的提示。如果发生异常,程序优先报402
,无法处理才报400
。403
未发现有效任务No valid tasks.
👆当你需要修改或开发新API时欢迎参考。
注:此版本基于 Paddle Inference 3.0.0 推理后端,使用带 AVX512 指令集的高端 CPU 时性能更好。普通家用 CPU 则有性能劣化,建议使用上面的稳定版。
本项目中使用了 ReneNyffenegger/cpp-base64 :
“base64 encoding and decoding with c++”
本项目中使用了 nlohmann/json :
“JSON for Modern C++”
感谢 PaddlePaddle/PaddleOCR ,没有它就没有本项目:
“Awesome multilingual OCR toolkits based on PaddlePaddle”
感谢各位为本项目开发API及贡献代码的朋友!
版本号链接可前往对应备份分支。
2024.8.28
3.0.0
的不稳定性,沿用 2.3.2
旧版推理库。繁体中文
配置文件不正确的问题。glibc
依赖库向下调整至 2.31
版本,兼容 debian11、ubuntu20.04 等旧系统。2024.7.31
3.0.0 beta-1
。--cpu_mem
。见 文档 。PP-OCR V4
系列模型库,及PPOCR算法挑战赛 冠军方案模型库 。cyrillic
(斯拉夫字母/俄语)的准确度较低、使用频率较低,发行包中不再包含此语言库。有需要的用户可 自行下载 。False
不生效的问题。2024.7.22
2024.7.9
2024.7.5
2023.10.10
2023.6.19
2023.5.26
2022.9.28
2022.8.29
2022.8.26
2022.4.16
文本检测
识别到区域但文本识别
未在区域中检测到文字时,可能输出不相符的包围盒。2022.4.2
2022.3.28