PaddleOCR Official API CLI (paddleocr api) 实战指南:云端 OCR 与文档解析的命令行调用
【免费下载链接】PaddleOCR飞桨多语言OCR工具包(实用超轻量OCR系统,支持80+种语言识别,提供数据标注与合成工具,支持服务器、移动端、嵌入式及IoT设备端的训练与部署) Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR
PaddleOCR 官方 API CLI 是 PaddleOCR 提供的paddleocr api子命令,用于将本地文件或文件 URL 提交到托管的 PaddleOCR 云服务,异步等待任务完成后输出解析结果,全程不加载本地模型、不执行本地推理。本文将基于仓库中的 cli.en.md 文档,结合paddleocr/_api_client/的源码实现,完整讲解从安装鉴权、参数配置、任务模型选择到输出与错误处理的端到端使用方式。
一、工作原理与适用场景
paddleocr api是对 PaddleOCR 官方 API 的命令行封装,其调用链与 Python SDK 完全一致(见 client.py):
- 提交任务:将
file_url(远程文件地址)或file_path(本地文件,上传为 multipart 表单)连同模型名、optionalPayload参数提交到任务接口; - 轮询等待:以指数退避方式轮询任务状态(
pending→running→done/failed),见 poller.py; - 拉取结果:任务完成后从
resultUrl指向的 JSONL 地址下载结果并解析为结构化对象(OCR 或文档解析两类),见 poller.py。
因此它的典型使用场景是:脚本化批量 OCR、快速验证云端模型效果、无需本地 GPU 与模型下载的文档解析流水线。官方默认服务地址定义在 http.py:DEFAULT_BASE_URL = "https://paddleocr.aistudio-app.com",接口路径为/api/v2/ocr/jobs。
二、安装与鉴权
2.1 安装
先按 Install paddleocr 安装核心paddleocrPython 包。安装完成后,api子命令开箱即用——它属于核心包自带能力,无需安装任何额外的依赖分组。
从代码看,api子命令由 _cli.py 中的_register_api_command注册,真正实现位于 paddleocr/_api_client/cli.py,使用标准argparse定义参数。
2.2 获取 Access Token
需要先在 AI Studio Access Token 页面获取访问令牌。CLI 默认从环境变量PADDLEOCR_ACCESS_TOKEN读取:
export PADDLEOCR_ACCESS_TOKEN="your-access-token"也可以显式通过--token传入。底层 client.py 的优先级是:--token参数 >PADDLEOCR_ACCESS_TOKEN环境变量;两者都缺失时抛出AuthError("Token is required. Set PADDLEOCR_ACCESS_TOKEN or pass token=."),CLI 会将错误打印到 stderr 并以非零退出码结束。
说明:认证采用
Authorization: Bearer <token>请求头,见 http.py。请求头中还可通过--client_platform自定义Client-Platform头。
三、基础用法
paddleocr api \ --model_type ocr \ --file_url https://example.com/invoice.pdf两个强制约束(由源码 cli.py 与 _core.py 共同保证):
--model_type必填,只能取ocr或doc_parsing;--file_url与--file_path二选一,同时省略或同时提供都会抛出InvalidRequestError。
--file_url提交时走submit_url(JSON body),--file_path走submit_file(multipart 文件上传,且会先校验本地文件存在,见 http.py)。
四、常用参数详解
以下为paddleocr api的完整参数清单,默认值以 cli.py 源码为准:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--model_type | str | 必填 | 任务类型:ocr或doc_parsing |
--model | str | 随任务类型而定 | 模型名,取值见第五节;不传时按model_type使用默认模型 |
--file_url | str | None | 待处理文件的远程 URL |
--file_path | str | None | 待处理文件的本地路径(上传到服务端) |
--base_url | str | 官方服务地址 | PaddleOCR API 服务基础地址;也可通过环境变量PADDLEOCR_BASE_URL设置 |
--token | str | None | 访问令牌(或用PADDLEOCR_ACCESS_TOKEN环境变量) |
--request_timeout | float | 300.0 | 单次 HTTP 请求的超时秒数 |
--poll_timeout | float | 600.0 | 等待远端任务完成的总体超时秒数 |
--output | str | None | JSON 输出文件路径;省略则打印到 stdout |
--save_resources | str | None | 保存结果对象引用的资源(图片等)的目录 |
--overwrite_resources | flag | False | 保存资源时是否覆盖已存在的文件 |
--page_ranges | str | None | 页范围,例如"2,4-6" |
--batch_id | str | None | 可选批标识,用于查询相关任务 |
--use_doc_orientation_classify | bool | None | 文档方向分类(True/False) |
--use_doc_unwarping | bool | None | 文档矫正/去弯曲(True/False) |
--use_textline_orientation | bool | None | 文本行方向检测(True/False) |
--text_det_limit_side_len | int | None | 文本检测的图像边长限制 |
--text_det_limit_type | str | None | 边长限制类型:min或max |
--text_rec_score_thresh | float | None | 文本识别结果的分数阈值 |
--use_layout_detection | bool | None | 版面检测(doc_parsing 用) |
--use_seal_recognition | bool | None | 印章识别(doc_parsing 用) |
--use_table_recognition | bool | None | 表格识别(PP-StructureV3 用) |
--use_formula_recognition | bool | None | 公式识别(PP-StructureV3 用) |
--use_chart_recognition | bool | None | 图表识别(doc_parsing 用) |
--visualize | bool | None | 生成结果可视化图片 |
--prettify_markdown | bool | None | Markdown 美化(doc_parsing 用) |
参数按功能分组,与 SDK 中的选项数据类一一对应:OCR 任务使用OCROptions(见 models.py),doc_parsing中 PaddleOCR-VL 系列使用PaddleOCRVLOptions,PP-StructureV3 使用PPStructureV3Options(其中还包含layout_threshold、temperature、top_p、max_new_tokens等更细粒度参数,models.py 中有完整字段)。
布尔参数在命令行中使用True/False字符串,由str2bool解析;top_p、temperature、min_pixels/max_pixels等在提交前会经过校验(如top_p必须满足0 < top_p <= 1,见 models.py),非法值会以InvalidRequestError拒绝。
五、两种任务的实战示例
5.1 OCR 示例(本地文件)
paddleocr api \ --model_type ocr \ --model PP-OCRv5 \ --file_path ./invoice.pdf \ --request_timeout 300 \ --poll_timeout 600 \ --output ocr-result.json要点:
--file_path上传本地invoice.pdf;--request_timeout 300与--poll_timeout 600分别控制单次 HTTP 请求与整体轮询的等待上限,多页大文件建议按需调大;--output ocr-result.json将格式化 JSON 写入文件并打印保存路径;不写则直接打印到 stdout。
5.2 文档解析示例(远程文件 URL)
paddleocr api \ --model_type doc_parsing \ --file_url https://example.com/report.pdf \ --use_chart_recognition True \ --save_resources ./doc-assets \ --output doc-result.json要点:
- 输入走
--file_url(服务端直接拉取,无需本地下载); --use_chart_recognition True开启图表识别;--save_resources ./doc-assets会把结果中引用的 Markdown 图片与输出图片下载到本地目录(注意:目标目录必须已存在,见 resources.py)。
资源保存的命名规则可在 resources.py 中确认:OCR 结果图片按ocr-page-{页号}.{扩展名}命名;文档解析结果按结果对象中的资源名(markdown_images与output_images的 key)保存。默认遇到同名文件会报错,加--overwrite_resources可覆盖。
六、模型选择
| 任务 | --model_type | 默认模型 | 可选模型 |
|---|---|---|---|
| OCR | ocr | PP-OCRv6 | PP-OCRv5,PP-OCRv5-latin,PP-OCRv6 |
| 文档解析 | doc_parsing | PaddleOCR-VL-1.6 | PP-StructureV3,PaddleOCR-VL,PaddleOCR-VL-1.5,PaddleOCR-VL-1.6 |
以上模型集合定义在 models.py 的Model枚举与_OCR_MODELS/_DOCUMENT_PARSING_MODELS/_VL_MODELS三个集合中。
需要注意两点(对应 cli.py 的调度逻辑):
- 模型与任务必须匹配:例如对
--model_type ocr传入PP-StructureV3,CLI 会打印Error: OCR task does not support PP-StructureV3.并以退出码 2 结束; - 不同模型走不同的参数集合:
doc_parsing任务中,PaddleOCR-VL 系列使用PaddleOCRVLOptions(支持use_layout_detection、use_chart_recognition等),PP-StructureV3 使用PPStructureV3Options(额外支持use_table_recognition、use_formula_recognition等),选择不当会在提交前被resolve_document_options拒绝(见 _core.py)。
七、输出行为与结果结构
7.1 标准输出结构
成功时命令输出格式化 JSON(ensure_ascii=False, indent=2),两种任务的字段由 cli.py 定义:
OCR 输出:jobId+ 每页的prunedResult(裁剪后的识别结果)与ocrImageUrl(识别可视化图地址):
{ "jobId": "xxx", "pages": [ { "prunedResult": "...", "ocrImageUrl": "https://..." } ] }文档解析输出:jobId+ 每页的markdownText(Markdown 文本)、markdownImages(Markdown 中引用的图片映射)、outputImages(输出图片映射):
{ "jobId": "xxx", "pages": [ { "markdownText": "...", "markdownImages": {}, "outputImages": {} } ] }7.2 输出落盘行为
--output <path>:写入该文件并打印Result saved to: <path>;省略则直接向 stdout 打印 JSON;--save_resources <dir>:将结果引用的资源下载到指定目录,并打印Resources saved to: <dir> (N files)(此提示输出到 stderr);- 二者可同时使用。
从源码看,这些结构对应 results.py 中的OCRResult/OCRPage与DocParsingResult/DocParsingPage数据类;服务端返回的是 JSONL 格式,由parse_ocr_result/parse_doc_parsing_result逐行解析(poller.py)。
八、错误处理与排错指南
错误统一打印到 stderr,并以非零退出码返回。常见原因与对应的错误类型(定义见 errors.py):
| 场景 | 错误类型 | 说明 |
|---|---|---|
缺少PADDLEOCR_ACCESS_TOKEN或令牌无效/过期 | AuthError | 对应 HTTP 401/403 |
--model与--model_type不匹配 | InvalidRequestError | CLI 层直接拒绝,退出码 2 |
参数校验失败(如file_url/file_path同时提供) | InvalidRequestError | 对应 HTTP 400 |
| 请求超时 / 连接失败 | RequestTimeoutError/NetworkError | --request_timeout内未完成 |
轮询超过--poll_timeout | PollTimeoutError | 等待任务完成的总超时 |
| 远端任务执行失败 | JobFailedError | 任务状态为failed,携带服务端errorMsg |
| 响应不符合约定 schema / 结果 JSONL 无法解析 | ResponseFormatError/ResultParseError | 一般属服务端异常或版本不匹配 |
| 每日配额超限(HTTP 429) | RateLimitError | 见官方配额规则 |
| 服务过载或网关超时(HTTP 503/504) | ServiceUnavailableError | 可稍后重试 |
排错建议顺序:先确认环境变量PADDLEOCR_ACCESS_TOKEN是否已导出 → 再确认--model与--model_type匹配 → 检查--request_timeout/--poll_timeout是否对大文件过小 → 最后核对本地文件路径是否存在(--file_path不存在会抛FileNotFoundError)。
九、相关资源
- 官方 API 总览:overview.en.md(介绍 Python / TypeScript / Go SDK 与 CLI 四种客户端形态)
- CLI 实现源码:paddleocr/_api_client/cli.py、paddleocr/_api_client/client.py
- 底层通信与轮询:paddleocr/_api_client/_http.py、paddleocr/_api_client/_poller.py
- 参数与结果模型:paddleocr/_api_client/models.py、paddleocr/_api_client/results.py
- 测试用例:tests/api_client/test_cli.py、tests/api_client/test_http.py
各模型的 API 参考文档(PP-OCRv5、PP-StructureV3、PaddleOCR-VL、PaddleOCR-VL-1.5)以及 API 配额规则与错误码说明,可在 AI Studio 官方文档区查阅,以获取最新的模型能力、配额限制与错误码定义。
【免费下载链接】PaddleOCR飞桨多语言OCR工具包(实用超轻量OCR系统,支持80+种语言识别,提供数据标注与合成工具,支持服务器、移动端、嵌入式及IoT设备端的训练与部署) Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考