PaddleOCR-VL Document Understanding
基于 VLM 的文档理解扩展——高精度 OCR、表格识别、关键信息抽取(KIE),擅长复杂版面与票据表单。需要 GPU 服务器。
1. 方案概述
paddle-ocr-vl 是一个 HTTP 桥接扩展:扩展本身是轻量客户端(约 MB 级),真正的 PaddleOCR-VL 1.6 模型跑在一台独立的 Python 推理服务上(推荐 Linux + NVIDIA GPU)。这种 拆分让扩展跨平台,重推理放到 GPU。
它提供四条命令:
| 能力 | 命令 | 输出 | 适用 |
|---|---|---|---|
| 高精度多语种 OCR | recognize | text_blocks + full_text | 复杂版面、多语种混排 |
| 表格识别 | recognize_table | HTML 表格 | 财务报表、检测报告中的表格 |
| 关键信息抽取(KIE) | extract_keys | 结构化字段 fields | 发票 / 票据 / 表单字段化 |
| 服务探活 | health | status / model_loaded / load_error | 部署后连通性与模型加载检查 |
数据流向:
与 paddle-ocr-v6 的核心区别:v6 是本地 ONNX、纯文字提取、边缘可跑;paddle-ocr-vl 是远端 VLM、能理解版面 / 表格 / 语义、需 GPU 服务。选型见第 7 节。
2. 物料清单(BOM)
| 物料 | 规格 | 用途 | 必需 |
|---|---|---|---|
| NeoMind 平台 | v0.9.0+ | 扩展宿主 | ✅ |
| paddle-ocr-vl 扩展 | v2.7.7+ | HTTP 桥接 | ✅ |
| GPU 推理服务器 | Linux + NVIDIA GPU(CUDA 12.6) | 运行 PaddleOCR-VL Python 服务 | ✅ |
| 本地 LLM | Ollama 等 | AI Chat 后端 | 可选 |
推理服务后端支持:Linux x86_64(CUDA,生产推荐)、Linux ARM64(Jetson + JetPack)、Windows(CUDA);macOS 仅 CPU——Apple Silicon 较慢、Intel 不实用。扩展本体为纯 Rust + HTTP 客户端,全部平台均可安装。
3. 前置准备:部署推理服务
在 GPU 服务器的扩展源码 server/ 目录下:
cd extensions/paddle-ocr-vl/server
python -m venv .venv_paddleocr && source .venv_paddleocr/bin/activate
# GPU(CUDA 12.6)
pip install paddlepaddle-gpu==3.2.1 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
# 或 CPU:pip install paddlepaddle==3.2.1
pip install -r requirements.txt
./download_models.sh # 预下载 1–2GB 模型权重到 ~/.paddlex(可选;首次推理也会自动下载)
python3 server.py # → http://0.0.0.0:8000
# 可用 HOST / PORT / PADDLE_DEVICE 环境变量覆盖
GPU 服务器注意:服务端
PADDLE_DEVICE默认为cpu,GPU 机器需显式以PADDLE_DEVICE=gpu python3 server.py启动,否则 VLM 回落到 CPU 推理(极慢)。
没有 GPU、或想先验证接线,可跑 mock 服务:它实现与真实服务完全相同的 HTTP 接口,返回固定示例响应,只依赖
fastapi+uvicorn,一台普通笔记本就能跑:
cd extensions/paddle-ocr-vl/server
pip install fastapi uvicorn
python3 mock_server.py # → http://127.0.0.1:8000
mock 服务对 KIE 请求返回如下固定示例(/health 恒为 {"status": "ok", "version": "1.6-mock", "model_loaded": true}):
{
"fields": {
"invoice_no": "INV-2026-0001",
"date": "2026-07-06",
"total": "$86.50",
"vendor": "Acme Corp",
"customer": "NeoMind"
},
"processing_time_ms": 30.0
}
mock 只用于打通「扩展 → 服务 → 卡片渲染」链路,不能评估识别精度;验证通过后把 endpoint 指向真实服务地址即可(扩展默认 endpoint 就指向 127.0.0.1:8000,本机联调时无需修改)。
服务就绪后,在扩展详情页执行 health 命令:返回 status: ok 即服务在线。model_loaded 在首次推理后才变为 true(/health 探活不会主动加载模型);若返回 status: degraded,看响应里的 load_error 字段定位加载失败原因。
📷 待补截图|health 检查 · 建议路径
…/neomind/paddle-ocr-vl/01-health.png
4. 安装与配置扩展
进入 Extensions 页面,从扩展市场安装 paddle-ocr-vl(安装方式见扩展管理);在 Configuration 里把 endpoint 指向推理服务地址(如 http://<GPU服务器IP>:8000)。
| 配置项 | 类型 | 默认值 | 范围 / 选项 | 说明 |
|---|---|---|---|---|
endpoint | String | http://127.0.0.1:8000 | http(s) URL | PaddleOCR-VL 服务地址(末尾多余 / 自动去除) |
language | String | ch | ch / en / japan / korean / german / french | OCR 语言提示 |
use_doc_orientation_classify | Boolean | false | true / false | 识别前做方向分类并自动旋转 |
use_doc_unwarping | Boolean | false | true / false | 去扭曲(拍摄 / 弯曲文档) |
timeout_ms | Integer | 30000 | 1000–120000 | HTTP 超时(ms);超出范围的值会被忽略并保持默认 |
recognize命令的language/use_doc_orientation_classify/use_doc_unwarping参数可按次覆盖上述配置;未传时回落到配置值。命令级language另支持multilingual(多语种混排)。
扩展自身上报 5 个指标(详情页 指标 标签):
request_count、success_count、failure_count、last_latency_ms、last_recognized_block_count(后两项在首次成功请求后才开始上报)。排查故障时先看failure_count是否增长。
📷 待补截图|安装并配置 endpoint · 建议路径
…/neomind/paddle-ocr-vl/02-install-config.png
5. 使用方式
5.1 在 Dashboard 用卡片测试(PaddleOcrCard)
扩展自带前端组件 PaddleOcrCard——在 仪表板 添加该卡片即可图形化测试,无需手填命令参数:
- 上传一张图片(拖拽或点击,支持 PNG/JPG/WEBP)。
- 切换模式:Text(
recognize)/ Table(recognize_table)/ Keys(extract_keys)。 - 在设置里选语言,按需开启「自动旋转」「去变形」(适合拍摄歪斜的文档)。
- 执行后:Text 模式在图上叠加彩色文字块并列出文本(可切「分块 / 纯文本」视图);Table 模式直接渲染 HTML 表格;Keys 模式列出抽取的键值对。
底层调用的就是扩展命令,卡片只封装了上传、参数与结果可视化。
📷 待补截图|Dashboard PaddleOcrCard 测试 · 建议路径
…/neomind/paddle-ocr-vl/03-dashboard-card.png
5.2 接入 NE101 摄像头组件
在 NE101 摄像头组件 里把 processingExtensionId 选为 paddle-ocr-vl,模板 text_detection → 调 recognize。适合相机拍摄的海报、铭牌、屏幕等需要高质量 OCR 的场景,返回的 text_blocks 与组件的叠加渲染兼容。
5.3 通过 AI Chat
直接对 AI Chat 说「用 paddle-ocr-vl 把这张发票的发票号、日期、金额抽出来」,LLM 会自动调用命令并解读结果。