在 AI Chat 中,OCR 的精度对 AI 问答的质量,有着重要的影响。近期,智谱发布了专为复杂文档理解而设计的多模态 OCR 模型 —— GLM-OCR。
该模型实现了 “小尺寸,高精度”。模型的参数量仅有 0.9B,但在权威 OmniDocBench V1.5 文档解析榜单中,以 94.6 分取得 SOTA。在文本、公式、表格和信息抽取方面的表现也优于多款 OCR 模型。
GLM-OCR 特点
完全开源,易于使用,配备完善 SDK 和推理工具链 高效推理,支持 vLLM、SGLang 和 Ollama 部署 专为复杂表格、代码密集型文档、印章等实际业务场景优化
本地部署
GLM-OCR 官方文档已经详细介绍了在 vLLM/SGLang 上如何部署 GLM-OCR,接下来我将介绍在 macOS 下,使用 mlx-vlm 在本地部署 GLM-OCR。
1.配置虚拟环境
python3 -m venv .venv
source .venv/bin/activate
安装 mlx-vlm
pip install mlx-vlm
下载模型
hf download mlx-community/GLM-OCR-8bit --local-dir ./models/GLM-OCR-8bit
hf download mlx-community/GLM-OCR-bf16 --local-dir ./models/GLM-OCR-bf16
运行 GLM-OCR 模型
4.1 文本识别
代码:
from mlx_vlm import load, generate
from mlx_vlm.prompt_utils import apply_chat_template
model, processor = load("models/GLM-OCR-bf16")
prompt = "Text Recognition:"
formatted_prompt = apply_chat_template(
processor, model.config, prompt, num_images=1)
result = generate(
model,
processor,
formatted_prompt,
image=["./images/codeblock.png"],
max_tokens=2048,
verbose=True,
)
输入图片:
结果:
4.2 公式识别
代码:
from mlx_vlm import load, generate
from mlx_vlm.prompt_utils import apply_chat_template
model, processor = load("models/GLM-OCR-bf16")
prompt = "Formula Recognition:"
formatted_prompt = apply_chat_template(
processor, model.config, prompt, num_images=1)
result = generate(
model,
processor,
formatted_prompt,
image=["./images/formula.png"],
max_tokens=2048,
verbose=True,
)
输入图片:
结果:
4.3 表格识别
代码:
from mlx_vlm import load, generate
from mlx_vlm.prompt_utils import apply_chat_template
model, processor = load("models/GLM-OCR-bf16")
prompt = "Table Recognition:"
formatted_prompt = apply_chat_template(
processor, model.config, prompt, num_images=1)
result = generate(
model,
processor,
formatted_prompt,
image=["./images/complex-table.png"],
max_tokens=2048,
verbose=True,
)
输入图片:
结果:
4.4 手写识别
代码:
from mlx_vlm import load, generate
from mlx_vlm.prompt_utils import apply_chat_template
model, processor = load("models/GLM-OCR-bf16")
prompt = "Text Recognition:"
formatted_prompt = apply_chat_template(
processor, model.config, prompt, num_images=1)
result = generate(
model,
processor,
formatted_prompt,
image=["./images/handwriting.png"],
max_tokens=2048,
verbose=True,
)
输入图片:
结果:
4.5 Bad Cases
在测试表格识别的时候,也出现失败的案例。比如,对以下图片进行表格识别,就出现丢失的问题。该图片中的表格,没有包含完整的网格线。
输入图片:
结果:
同一张图片,使用 PaddleOCR 提供的 PaddleOCR-VL-1.5 在线环境进行测试,识别效果如下:
同一张图片,使用 MinerU 提供的 MinerU VLM 在线环境进行测试,识别效果如下:
总结
经过对 GLM-OCR 的能力进行多方面测试,虽然也有出现识别失败的情形,总体来说 GLM-OCR 的综合能力还是挺强的,本地的推理速度也挺快。如果 GLM-OCR 不能满足你的需求,你可以尝试 PaddleOCR-VL-1.5、MinerU2.5 或 DeepSeek OCR2 等模型。
Vidpai 已经接入 Qwen3-TTS,将随新版本一起发布,敬请期待
