字节笔记本
2026年8月29日
Ollama-OCR:本地视觉模型从图片和 PDF 抽文本
扫过的合同、截图里的报错、别人甩过来的 PDF——很多时候你只想把字抠出来,又不想把文件丢到在线 OCR。Ollama-OCR 把这件事收成一层薄封装:本机跑视觉模型,图片和 PDF 都能抽文本,Python 包和 Streamlit 界面各有一份。
它解决什么问题
传统 OCR(Tesseract 一类)对版式干净的印刷体很稳,但对手写、表格、带图混排、截图里的 UI 字经常翻车。视觉语言模型(LLaVA、Llama 3.2 Vision、Granite Vision、MiniCPM-V 等)把整页当图像理解,再按你给的提示输出 Markdown、纯文本或结构化结果。
Ollama-OCR 干的事很直接:
- 通过本机 Ollama 调视觉模型
- 支持单张图片和 PDF(内部会按页处理)
- 输出可选 markdown / text / json / structured / key_value / table
- 提供批量目录扫描和可选的图像预处理
- 另有一份 Streamlit Web UI,适合不想写脚本的场景
仓库在 imanoop7/Ollama-OCR,PyPI 包名是 ollama-ocr。
它和「单独拉一个 OCR 专用模型到 Ollama」并不冲突:专用模型(比如偏文档的 GLM-OCR)适合固定流水线;这个包装的是「同一套 API + 多种视觉模型 + 多种输出格式」,换模型成本更低。
环境准备
- 安装并启动 Ollama
- 拉一个视觉模型,例如:
ollama pull llama3.2-vision:11b
# 文档理解可再试
ollama pull granite3.2-vision
# 边缘设备可试 moondream / minicpm-v- 安装 Python 包:
pip install ollama-ocr显存不够就换更小的模型;准确率优先就用更大的 vision 权重。模型名必须和 ollama list 里一致。
最小可用:抽一张图或一份 PDF
from ollama_ocr import OCRProcessor
ocr = OCRProcessor(model_name="llama3.2-vision:11b")
result = ocr.process_image(
image_path="invoice.png", # 也可以是 .pdf
format_type="markdown",
language="Chinese",
# custom_prompt="只提取日期、金额和公司名,忽略页眉页脚。",
)
print(result)几点实际注意:
image_path对 PDF 同样适用,不必先手动转图format_type决定提示词模板:要表格就用table,要键值对用key_value- 需要连远程 Ollama 时,构造时传
base_url(指向你的/api/generate) - 中文材料把
language设成Chinese,比默认英文提示稳一点
批量目录
发票、截图一堆时,用批处理:
from ollama_ocr import OCRProcessor
ocr = OCRProcessor(model_name="granite3.2-vision", max_workers=4)
batch = ocr.process_batch(
input_path="./scans",
format_type="markdown",
recursive=True,
preprocess=True,
language="Chinese",
)
for path, text in batch["results"].items():
print(path)
print(text[:500], "...\n")
stats = batch["statistics"]
print(stats["total"], stats["successful"], stats["failed"])preprocess=True 会做缩放/归一化一类预处理,扫描件糊的时候值得开;已经是清晰截图可以关掉省时间。
不想写代码:Streamlit
git clone https://github.com/imanoop7/Ollama-OCR.git
cd Ollama-OCR
pip install -r requirements.txt # 以仓库说明为准
streamlit run app.py浏览器里拖文件、选模型、下结果。适合给同事临时用,或自己肉眼核对某一页抽得对不对。
怎么选模型(经验向)
| 场景 | 更常试 |
|---|---|
| 一般截图 / UI 文案 | llama3.2-vision、llava |
| 表格、图表、信息图 | granite3.2-vision |
| 笔记本 / 小显存 | moondream、minicpm-v |
| 要极致文档 OCR | 可另跑专用 OCR 模型,再和本包装混用 |
LLaVA 类模型偶发胡写,重要单据建议抽完后人工扫一眼关键字段,或换更强的 vision / 专用 OCR 再跑一遍交叉验证。
和现有流水线怎么接
- 脚本 / Agent:
process_image返回字符串或结构化对象,直接塞进下游解析、入库、给编码代理当上下文 - n8n / 自动化:Execute Command 调一段 Python,或先用
pdftoppm拆页再逐页调用(多页 PDF 时自己控并发更稳) - 隐私:文件不出本机,适合合同、客户材料、内网文档
小结
Ollama-OCR 不是新模型,是一层「本机视觉 OCR」胶水:装好 Ollama、拉视觉权重、pip install ollama-ocr,图片和 PDF 就能抽成 Markdown 或结构化文本。先从单文件 + markdown 跑通,再按版式换模型、换 format_type,批量目录和 Streamlit 留给量上来之后。