一个用于快速评估百度智能云 文档解析(PaddleOCR-VL)API 的本地 Web Demo。
无需在本地部署模型,也没有第三方 Python 依赖。准备好百度智能云 API Key 和 Secret Key 后,复制环境变量文件并运行 server.py,即可在浏览器中上传文档,查看云 API 返回的阅读顺序、版面坐标、表格、图片、Markdown 和完整 JSON。
这个项目只展示百度云服务返回的原始文档解析结果,不做简历字段提取、正则匹配、章节截断或自定义阅读顺序,适合在接入业务系统前快速判断 API 能否处理自己的真实文档。
- PDF、Word、PPT、OFD、TXT 和多种图片格式统一上传
- 官方服务支持印刷文本和手写文本解析,实际效果以输入文档为准
- 公式、文档图片和语种识别无需额外开启
- 模型推断的文档阅读顺序和版面元素类型
- PDF/图片原件预览,以及版面元素和行级坐标高亮
- 浏览器无法直接显示的文档在接口返回有效坐标时尝试重建版面
- 表格 Markdown、单元格结构及跨页表格合并标识
- 图表内容解析、标题层级和印章文字识别
- Markdown 渲染、Markdown 源码和完整解析 JSON
- Markdown、JSON 结果下载
- 百度提交任务、轮询任务和下载结果的异步 API 调用链路
- Python 3.9 或更高版本
- 已开通百度智能云文字识别服务
- 可调用“文档解析(PaddleOCR-VL)”的 OCR 应用 API Key 和 Secret Key
- 运行环境能够访问百度智能云接口和
cdn.jsdelivr.net
本项目只使用 Python 标准库,不需要执行 pip install。
进入克隆后的仓库根目录,复制环境变量模板。
Windows PowerShell:
Copy-Item .env.example .envmacOS / Linux:
cp .env.example .env编辑新生成的 .env:
BAIDU_API_KEY=你的_API_Key
BAIDU_SECRET_KEY=你的_Secret_Key.env 已被 .gitignore 排除,不会随正常的 Git 提交进入仓库。也可以直接设置同名系统环境变量;系统环境变量优先于 .env。
Windows:
python server.pymacOS / Linux:
python3 server.py浏览器打开:http://127.0.0.1:8765
选择文档并点击“开始解析”即可。不要直接双击打开 index.html,页面需要通过本地 Python 服务访问 /api/parse。
| 类型 | 格式 | 当前 Demo 限制 |
|---|---|---|
| 图片 | JPG、JPEG、PNG、BMP、TIF、TIFF | 不超过 10 MB,最长边不超过 8192 px |
| 版式文档 | PDF、OFD | Base64 上传不超过 50 MB;PDF 最多 500 页 |
| 流式文档 | DOC、DOCX、TXT、WPS、PPT、PPTX | 不超过 50 MB |
百度接口允许部分版式文档达到 100 MB,但超过 50 MB 时需要使用 file_url。为了保持 Demo 足够简单,本项目只实现 file_data Base64 上传,因此统一在 50 MB 处拦截非图片文件。
以下能力无需额外参数:
- 版式文档公式识别
- 文档图片解析
- 语种自动识别
Demo 还会在提交任务时开启以下可选参数:
| 参数 | 作用 |
|---|---|
analysis_chart=true |
解析统计图表内容 |
merge_tables=true |
合并跨页表格并返回合并标识 |
relevel_titles=true |
对段落标题重新分级 |
recognize_seal=true |
识别印章文字 |
return_span_boxes=true |
返回行级文字和坐标 |
前端不会写死百度的版面类型枚举;接口新增或返回未知类型时,仍会按原值展示。
左侧是文档校样区:
- PDF 使用 PDF.js 渲染上传原件
- 浏览器可显示的图片直接复用上传原图
- 版面框来自
pages[].layouts[].position/polygon - 行级定位来自
pages[].layouts[].span_boxes - Word、PPT、OFD、TXT、TIFF 等可直接提交解析;浏览器无法显示原件时,Demo 会根据接口实际返回的数据尝试重建版面
右侧提供四种结果视图:
- 阅读顺序:按百度返回的 layout 顺序展示所有元素,可点击定位
- Markdown:查看最终 Markdown 渲染效果
- MD 源码:查看并下载原始 Markdown
- JSON:查看并下载
parse_result_url返回的完整结构
表格和图片在 layout.text 中可能为空,Demo 会根据 layout_id 自动关联 pages[].tables 和 pages[].images。
flowchart LR
A["浏览器选择文档"] --> B["本地 Python 服务"]
B --> C["获取 Access Token"]
C --> D["提交 PaddleOCR-VL 任务"]
D --> E["每 5 秒轮询任务状态"]
E --> F["下载 Markdown 和解析 JSON"]
F --> G["浏览器展示与定位"]
PaddleOCR-VL 是异步接口。任务成功后会返回 markdown_url 和 parse_result_url,链接有效期为 30 天。Demo 会在任务完成后立即下载主 Markdown 和解析 JSON,当前页面不再依赖这两个主结果链接;JSON 或 Markdown 中引用的图片等嵌入资源仍可能使用临时地址,本项目也不会持久化解析结果。
当前轮询间隔为 5 秒,最长等待 10 分钟。百度官方限制提交接口 QPS 为 2、查询接口 QPS 为 5;本项目定位为单人能力评估工具,没有实现任务队列或并发调度。
.
├── index.html # 上传和结果校样界面
├── server.py # 本地服务、百度鉴权、提交与轮询
├── .env.example # 密钥配置模板
├── .gitignore # 忽略本地密钥和 Python 缓存
├── LICENSE # MIT 开源许可证
└── README.md
通常是直接打开了 index.html,或把百度任务接口当成 GET 请求调用。请先运行 server.py,再访问 http://127.0.0.1:8765。Demo 对百度提交和查询接口都使用 POST + application/x-www-form-urlencoded。
确认终端中的 Python 服务仍在运行,并使用服务输出的地址打开页面。
确认仓库根目录存在 .env,并且两个字段都已填写。环境变量名必须是 BAIDU_API_KEY 和 BAIDU_SECRET_KEY。
确认对应应用已经开通“文档解析(PaddleOCR-VL)”,并检查免费额度、资源包或计费状态。Demo 会把百度返回的错误信息直接显示在页面上。
PDF 原件预览依赖浏览器加载 PDF.js。加载失败、页面尺寸不匹配或文档存在旋转时,Demo 会回退到百度解析结果的版面重建,不影响 Markdown 和 JSON 结果查看。
- 上传的文档会发送至百度智能云进行解析,请根据自己的数据合规要求使用。
- API 调用会消耗账户额度,并可能产生费用,请以自己的资源包和计费状态为准。
- 这是能力评估 Demo,不包含账号、权限、数据库、任务队列、持久化或生产级安全设计。
- 服务默认只监听
127.0.0.1。不要将这个未鉴权 Demo 直接暴露到公网,否则他人可以使用你的额度提交文档。 - 页面不对模型结果进行业务规则修正;识别错误会原样保留,便于真实评估模型能力。
- PDF 原件预览和 Markdown 渲染使用浏览器 CDN 依赖;即使 CDN 不可用,原始 JSON 和版面重建仍可展示。
- API 可用性、计费和模型效果以百度智能云官方说明为准。
本项目基于 MIT License 开源。百度智能云 API、服务条款及计费规则不属于本项目许可证范围。