GLM-OCR Flask服务实战:用python -m glmocr.server搭建文档解析HTTP服务
【免费下载链接】GLM-OCRGLM-OCR: Accurate × Fast × Comprehensive项目地址: https://gitcode.com/GitHub_Trending/gl/GLM-OCR
GLM-OCR 是一款面向复杂文档理解的多模态 OCR 模型,其官方 SDK 内置了一个基于 Flask 的轻量 HTTP 服务。本文带你用一条命令python -m glmocr.server搭建文档解析 HTTP 服务,把论文、表格、手写件、化学公式统一转成 Markdown 和 JSON 布局结果,让无 GPU 的机器也能通过 HTTP 调用你的 GPU 服务器。🚀
为什么要把 GLM-OCR 部署成 HTTP 服务?
很多场景下,OCR 能力需要被多个客户端共享:内部系统、脚本、甚至手机 App。与其让每台机器都装一遍模型和依赖,不如在 GPU 服务器上跑一个文档解析 HTTP 服务,其他机器发一个 POST 请求就能拿到结果。
GLM-OCR 的服务端把完整的解析流水线封装在一个 Flask 应用里:
- 布局检测:基于 PP-DocLayout-V3 定位标题、正文、表格、公式等区域;
- 并行识别:对每个区域并发调用 GLM-OCR 模型服务;
- 结果格式化:输出 JSON 布局明细 + Markdown 正文两种格式。
服务端实现全部集中在 glmocr/server.py 一个文件里,核心路由定义在 server.py 的parse()函数中,代码非常易读,适合想理解 OCR 服务内部机制的读者。
上面这张来自 examples/source/paper.png 的论文页面,就是典型的"硬骨头":双栏排版、行间公式、分栏定理编号。这正是 Flask 文档解析服务要解决的场景。
安装步骤:一条命令装好服务依赖
服务依赖按场景拆分成了可选依赖(extras),定义在 pyproject.toml:
| 安装方式 | 适用场景 |
|---|---|
pip install "glmocr[server]" | 只想跑 Flask 服务(云端 API 模式) |
pip install "glmocr[selfhosted,server]" | 自托管流水线 + Flask 服务(推荐) |
# 完整能力:本地布局检测 + OCR 流水线 + Flask 服务 pip install "glmocr[selfhosted,server]"💡 如果你的机器没有 GPU,只想调用云端或远程服务,装最轻量的
pip install glmocr即可作为纯客户端使用。
也可以从源码安装进行开发:
git clone https://gitcode.com/GitHub_Trending/gl/GLM-OCR cd GLM-OCR uv venv --python 3.12 --seed && source .venv/bin/activate uv pip install -e ".[selfhosted,server]"一键启动:python -m glmocr.server
安装完成后,启动服务只需要一条命令:
# 默认配置启动 python -m glmocr.server # 指定配置文件 python -m glmocr.server --config config.yaml # 打开调试日志(含各阶段耗时 profiling) python -m glmocr.server --log-level DEBUG启动后终端会打印类似提示:
GlmOcr Server starting on 0.0.0.0:5002... API endpoint: /glmocr/parse服务默认监听0.0.0.0:5002,监听地址与端口由 config.yaml 的server段控制:
server: host: "0.0.0.0" port: 5002 debug: false改端口、开 debug 热重载,只需调整这几行,无需改任何代码。
调用 /glmocr/parse 接口:最小可用请求
服务只暴露两个接口:
POST /glmocr/parse:文档解析主接口;GET /health:健康检查,返回{"status": "ok"},方便接入容器编排探活。
最小请求长这样(注意必须带 JSON 的 Content-Type,否则返回 400):
curl -X POST http://localhost:5002/glmocr/parse \ -H "Content-Type: application/json" \ -d '{"images": ["examples/source/code.png"]}'关于images字段的几个细节(见 server.py):
- 既可以是字符串,也可以是列表;列表会被视为同一份文档的多个页面;
- 支持
http/httpsURL、本地file路径和data:数据 URI; - 兼容 MaaS 协议的
file字段,老客户端可以直接迁移; - 要解析多份独立文档?发多次请求即可,一次请求 = 一份文档。
如上图所示(来自 GLM-4.5V_page0.jpg),服务内部会先对文档做布局检测,把doc_title、abstract、chart、figure_title等区域框出来,再分别送去识别——这是结果准确的关键第一步。
读懂响应:同时兼容 SDK 与 MaaS 两种协议
响应体由 _build_response 构造,同时携带两套字段:
{ "json_result": "[...]", "markdown_result": "……", "layout_details": "[...]", "md_results": "……", "model": "glm-ocr", "id": "chatcmpl-...", "created": 1709234567 }| 字段 | 说明 |
|---|---|
json_result/layout_details | 布局明细(区域类型、坐标、识别文本) |
markdown_result/md_results | 排版好的 Markdown 正文,可直接渲染 |
id/created/model | 对齐 MaaS 协议,方便现有客户端无缝切换 |
多页文档的 Markdown 会用---分隔符拼接各页结果(见 server.py),方便下游按页切分。
对于财务报表这类复杂表格(如 table.jpg),服务会把整块表格识别为 HTML 表格结构写入 Markdown,行列对应关系基本可还原。
进阶:让无 GPU 的客户端直连你的服务
这是 Flask 服务模式最大的价值——GPU 集中在一台机器,客户端零成本:
- GPU 机器按上文启动
python -m glmocr.server; - 客户端机器只需
pip install glmocr,把config.yaml的 MaaS 配置指向你的服务:
pipeline: maas: enabled: true api_url: http://<服务器IP>:5002/glmocr/parse api_key: any-string # 自建服务不校验 key verify_ssl: false之后客户端就能像调用云端 API 一样,用 CLI 或 Python API 解析本地文档:
from glmocr import GlmOcr with GlmOcr( mode="maas", api_url="http://<服务器IP>:5002/glmocr/parse", api_key="any-string", ) as parser: result = parser.parse("document.png") print(result.markdown_result)完整架构与协议细节可参考 examples/self-host/README.md。
效果一览:从手写件到化学式
这套文档解析 HTTP 服务覆盖的场景包括论文、财报表格、手写笔记和化学结构式。下图是一份化学分子的编号结构式(4.png),服务会将其中的编号、官能团与连接关系一并识别:
常见问题速查 🧩
| 问题 | 解决方法 |
|---|---|
返回Flask server support requires... | 未装服务依赖,执行pip install "glmocr[server]" |
请求返回 400Invalid Content-Type | 必须携带-H "Content-Type: application/json" |
| OCR 阶段大量 503/超时 | 调低 config.yaml 中pipeline.max_workers(默认 32) |
| 布局模型吃显存导致 OOM | 用--set pipeline.layout.device cpu把布局检测放到 CPU |
| 想看每个阶段耗时 | 启动时加--log-level DEBUG |
总结
GLM-OCR 的 Flask 服务把"布局检测 + 并行 OCR + 结果格式化"整条流水线压缩成了两个接口:装好依赖后,python -m glmocr.server一条命令即可对外提供文档解析 HTTP 服务;客户端无论走原生 SDK 还是 MaaS 协议都能直接消费结果。对于需要把 OCR 能力共享给团队、嵌入内部系统的读者,这是当前最轻量的落地方式。核心源码入口在 glmocr/server.py,配置参考 glmocr/config.yaml,照着本文跑一遍即可上手。
【免费下载链接】GLM-OCRGLM-OCR: Accurate × Fast × Comprehensive项目地址: https://gitcode.com/GitHub_Trending/gl/GLM-OCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考