PaddleOCR-json

PaddleOCR-json

基于PaddleOCR的跨平台离线文字识别组件

PaddleOCR-json是基于PaddleOCR开发的离线文字识别组件,支持Windows和Linux系统。该项目提供简单的API接口,兼容多种编程语言,便于快速集成OCR功能。其特点包括部署便捷、识别迅速、精度较高,支持多语言识别,适用于多种复杂场景的文字识别需求。作为开源项目,PaddleOCR-json为开发者提供了一个灵活高效的OCR解决方案。

PaddleOCR-jsonOCR图像识别离线组件APIGithub开源项目

离线OCR组件系列项目:

PaddleOCR-jsonRapidOCR-json
CPU要求CPU必须具有AVX指令集。不支持以下CPU:无特殊要求 👍
凌动Atom、安腾Itanium、赛扬Celeron、奔腾Pentium
推理加速库mkldnn 👍
识别速度快(启用mkldnn加速)👍中等
初始化耗时约0.6秒0.1秒内,快 👍
组件体积(压缩)100MB70MB 👍
组件体积(部署)369MB80MB 👍
CPU占用较高较低,对低配机器友好
建议预留内存2000MB800MB 👍

PaddleOCR-json

支持:Win7 x64Linux x64Docker

这是一个基于PaddleOCR v2.6v2.8 cpp_infer的离线图片OCR文字识别程序,可以快速为你的程序添加OCR功能。它可以作为子进程被上层程序调用,也可以作为独立进程通过TCP调用。本项目提供了Python等语言的API,你可以忽略技术细节,通过两行代码使用它。

本项目旨在提供一个封装好的OCR引擎组件,使得没有C++编程基础的开发者也可以用其他语言简单地调用OCR,享受更快的运行效率和更便捷的打包部署方式。

  • 方便:部署简单,解压即用,无需安装和配置环境,无需联网。发布方便,可嵌入程序包也可作为外挂组件。
  • 高速:基于PPOCR C++版引擎,识别效率高于Python版本PPOCR及其他一些由Python处理任务流的OCR引擎。
  • 精准:附带PPOCR-v3 / v4识别库,对非常规字形(手写、艺术字、小字、杂乱背景等)也有不错的识别率。
  • 灵活:可以以多种方式指定OCR任务,支持识别本地图片路径、Base64编码的图片、TCP局域网调用。

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

兼容性

  • 系统:x86-64的Windows 7+、Linux。

  • 若Win7报错"计算机中丢失VCOMP140.DLL",请安装VC运行库

  • CPU必须具有AVX指令集。常见的家用CPU一般都满足该条件。

    AVX支持的产品系列不支持
    Intel酷睿Core,至强Xeon凌动Atom,安腾Itanium,赛扬Celeron,奔腾Pentium
    AMD推土机架构及之后的产品,如锐龙Ryzen、速龙Athlon、FX等K10架构及之前的产品
  • 如果需要在无AVX的CPU上使用OCR,可以看看RapidOCR-json

准备工作

下载可执行文件包:

简单试用

PaddleOCR-json.exe -image_path="test.jpg"

通过API调用

调用流程大体分为以下几步。不同API的具体接口可能有细微差别。

  • 启动:启动并初始化引擎子进程。
  • 工作:调用识图接口,获取返回值。目前支持识别本地图片文件剪贴板中的图片Base64编码的图片
  • 关闭:结束引擎进程,释放内存资源。

API列表

资源目录下有更详细的使用说明及演示示例。

1. Python API

资源目录

<details> <summary>使用示例</summary>
from PPOCR_api import GetOcrApi # 初始化识别器对象,传入 PaddleOCR_json.exe 的路径 ocr = GetOcrApi("……\PaddleOCR-json.exe") # 识别图片,传入图片路径 getObj = ocr.run(r'………\测试.png') print(f'图片识别完毕,状态码:{getObj["code"]} 结果:\n{getObj["data"]}\n')

Python API 提供了丰富的附加模块:便于开发者调试观察的可视化模块;以及来自Umi-OCR的文本块后处理(段落合并)技术。详细使用方法请参见 资源目录

</details>

2. Node.js API

资源目录

<details> <summary>使用示例</summary>
npm install paddleocrjson
const OCR = require('paddleocrjson'); // const OCR = require('paddleocrjson/es5'); // ES5 const ocr = new OCR('PaddleOCR-json.exe', [/* '-port=9985', '-addr=loopback' */], { cwd: './PaddleOCR-json', }, false); ocr.flush({ image_path: 'path/to/test/img' }) .then((data) => console.log(data)); .then(() => ocr.terminate());
</details>

3. PowerShell API

资源目录

4. Java API

资源目录

5. .NET API

资源目录

6. Rust API

资源目录

7. Go API

资源目录

更多语言API

欢迎补充!请参考 详细使用指南

常用配置参数说明

键名称默认值值说明
config_path""可以指定不同语言的配置文件路径,识别多国语言。详情见下节
models_path""可以指定语言库 models 文件夹的路径。详情见下节
dettrue启用det目标识别。如果你的图片中只含一行文本,且没有空白区域,那么可以关闭det以加快速度。
clsfalse启用cls方向分类,识别方向不是正朝上的图片。
use_angle_clsfalse启用方向分类,必须与cls同时设置。
enable_mkldnntrue启用CPU推理加速,关掉可以减少内存占用,但会降低速度。
limit_side_len960对图像边长进行限制,降低分辨率,加快速度。
如果对大图/长图的识别率低,可增大 limit_side_len 的值。
建议为 32 和 48 的公倍数,如 960, 2880, 4320

更多参数详见 args.cpp。(不支持其中GPU相关、表格识别相关的参数。)

语言库与切换识别语言:

Release压缩包中,默认附带了 简中,繁中,英,日,韩 的语言库与配置文件,在 models 目录下。

models 目录中,每一个 config_xxx.txt 是一组语言配置文件(如英文是config_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 识别到文字
  • data内容为数组。数组每一项为字典,包含三个固定元素:
    • text:文本内容,字符串。
    • box:文本包围盒,长度为4的数组,分别为左上角、右上角、右下角、左下角的[x,y]。整数。
    • score:识别置信度,0~1的浮点数。越接近1表示文字内容越可信。
  • (v1.4.0新增)如果启用了 clsuse_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 未识别到文字
  • data为字符串:No text found in image. Path:"图片路径"
  • 例:{'code':101,'data':'No text found in image. Path: "D:\\空白.png"'}
  • 这是正常现象,识别没有文字的空白图片时会出现这种结果。
200 图片路径不存在
  • data:Image path dose not exist. Path:"图片路径".
  • 例:{'code':200,'data':'Image path dose not exist. Path: "D:\\不存在.png"'}
  • 注意,在系统未开启utf-8支持(使用 Unicode UTF-8 提供全球语言支持)时,不能读入含emoji等特殊字符的路径(如😀.png)。但一般的中文及其他 Unicode 字符路径是没问题的,不受系统区域及默认编码影响。
201 图片路径string无法转换到wstring
  • data:Image path failed to convert to utf-16 wstring. Path: "图片路径".
  • 使用API时,理论上不会报这个错。
  • 开发API时,若传入字符串的编码不合法,有可能报这个错。
202 图片路径存在,但无法打开文件
  • 数据:图片打开失败。路径:"图片路径"。
  • 可能由系统权限等原因引起。
203 图片打开成功,但读取到的内容无法被OpenCV解码
  • 数据:图片解码失败。路径:"图片路径"。
  • 注意,引擎不以文件后缀来区分各种图片,而是对存在的路径,均读入字节尝试解码。若传入的文件路径不是图片,或图片已损坏,则会报这个错。
  • 反之,将正常图片的后缀改为别的(如.png改成.jpg或.exe),也可以被正常识别。
<details> <summary> <strong>剪贴板相关接口已弃用,不建议使用</strong> </summary>
210 剪贴板打开失败
  • 数据:剪贴板打开失败。
  • 可能由别的程序正在占用剪贴板等原因引起。
211 剪贴板为空
  • 数据:剪贴板为空。
212 剪贴板的格式不支持
  • 数据:剪贴板格式无效。
  • 引擎只能识别剪贴板中的位图或文件。若不是这两种格式(如复制了一段文本),则会报这个错。
213 剪贴板获取内容句柄失败
  • 数据:获取剪贴板数据句柄失败。
  • 可能由别的程序正在占用剪贴板等原因引起。
214 剪贴板查询到的文件的数量不为1
  • 数据:剪贴板查询文件数量无效。数量:文件数量
  • 只允许一次复制一个文件。一次复制多个文件再调用OCR会得到此报错。
215 剪贴板检索图形对象信息失败
  • 数据:剪贴板获取位图对象失败。
  • 剪贴板中是位图,但获取位图信息失败。可能由别的程序正在占用剪贴板等原因引起。
216 剪贴板获取位图数据失败
  • 数据:获取剪贴板位图数据失败。
  • 剪贴板中是位图,获取位图信息成功,但读入缓冲区失败。可能由别的程序正在占用剪贴板等原因引起。
217 剪贴板中位图的通道数不支持
  • 数据:剪贴板图像通道数无效。数量:通道数
  • 引擎只允许读入通道为1(黑白)、3(RGB)、4(RGBA)的图片。位图通道数不是1、3或4,会报这个错。
</details>
300 base64字符串解析为string失败
  • 数据:Base64解码失败。
  • 传入非法Base64字符串引起。(注意,传入Base64信息不应带有data:image/jpg;base64,前缀。)
301 base64字符串解析成功,但读取到的内容无法被OpenCV解码
  • 数据:Base64数据图像解码失败。
400 JSON对象转字符串失败
  • 数据:JSON转储失败。CODE_ERR_JSON_DUMP
  • 输入异常:传入非法JSON字符串,或者字符串含非UTF-8编码字符导致无法解析引起。
401 JSON字符串转对象失败
  • 数据:JSON转储失败。CODE_ERR_JSON_DUMP
  • 输出异常:输出时OCR结果无法被编码为JSON字符串。
402 JSON对象解析某个键时失败
  • 数据:JSON解析键"键名"失败。
  • 比错误码400更精准的提示。如果发生异常,程序优先报402,无法处理才报400
403 未发现有效任务
  • 数据:没有有效任务。
  • 本次传入的指令中不含有效任务。

详细使用指南

👆当你需要修改或开发新API时欢迎参考。

项目构建指南

稳定版,基于PP-OCR v2.6

最新开发版,基于PP-OCR v2.8

致谢

本项目使用了 ReneNyffenegger/cpp-base64

"基于 C++ 的 base64 编码和解码"

本项目使用了 nlohmann/json

"现代 C++ 的 JSON 库"

感谢 PaddlePaddle/PaddleOCR,没有它就不会有本项目:

"基于 PaddlePaddle 的出色多语言 OCR 工具包"

感谢所有为本项目开发 API 及贡献代码的朋友们!

更新日志

版本号链接可前往对应备份分支。

v1.4.1 dev 1 2024.7.31

  • 更新推理后端至 Paddle Inference 3.0.0 beta-1
  • 大幅优化内存占用:峰值由 2.5GB 降至约 1.5GB。
  • 增加命令行参数:内存自动清理界限 --cpu_mem。详见 文档
  • 小幅优化初始化耗时。
  • 支持 PP-OCR V4 系列模型库,及 PPOCR 算法挑战赛 冠军方案模型库
  • 由于后端依赖库的更新,在 非 AVX512 的 CPU 上,OCR 速度可能有 小幅下降
  • 由于语言库 cyrillic(斯拉夫字母/俄语)的准确度较低、使用频率较低,发行包中不再包含此语言库。有需要的用户可 自行下载
  • Python API:修复了布尔类型启动参数设为 False 不生效的问题。

v1.4.0 2024.7.22

v1.4.0 beta 2 2024.7.9

  • 返回值新增:文字方向分类相关参数。

v1.4.0 beta 2024.7.5

  • 兼容 Linux。
  • 调整:默认禁用剪贴板识图功能,需自行编译开启。

v1.3.1 2023.10.10

  • 兼容 Win7 x64。

v1.3.0 2023.6.19

  • 修复了一些 BUG。

v1.3.0 alpha 2023.5.26

  • 重构代码,条理更清晰,易于移植。
  • 新功能:Base64 传图片。
  • 新功能:套接字服务器模式。

v1.2.1 2022.9.28

  • 修复了一些 BUG。
  • 解决非中文 Windows 难以读取中文路径的问题,拥抱 UTF-8,彻底摆脱对 GBK 等区域性编码的依赖。
  • 新功能:直接读取并识别剪贴板内存中的图片。
  • 错误代码和提示更详细。

v1.2.0 2022.8.29

  • 修复了一些 BUG。
  • 增强了面对不合法编码时的健壮性。
  • 默认开启 MKLDNN 加速。
  • 新功能:JSON 输入及热更新。

v1.2.0 beta 2022.8.26

  • 重构整个工程,核心代码同步 PaddleOCR 2.6。
  • 对 v3 版识别库的支持更好。
  • 新功能:启动参数。
  • 新功能:ASCII 转义。(感谢 @AutumnSun1996 的提议 issue #4

v1.1.1 2022年4月16日

  • 修复了一个漏洞:当"文本检测"识别到区域但"文本识别"未在该区域内检测到文字时,可能会输出不匹配的边界框。

v1.1.0 2022年4月2日

  • 修改了JSON输出格式,改为状态码+内容的形式,以便调用方进行判断。

v1.0 2022年3月28日

编辑推荐精选

问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多