ByteNoteByteNote

字节笔记本

2026年8月29日

Ollama-OCR:本地视觉模型从图片和 PDF 抽文本

API中转
¥120

扫过的合同、截图里的报错、别人甩过来的 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 + 多种视觉模型 + 多种输出格式」,换模型成本更低。

环境准备

  1. 安装并启动 Ollama
  2. 拉一个视觉模型,例如:
bash
ollama pull llama3.2-vision:11b
# 文档理解可再试
ollama pull granite3.2-vision
# 边缘设备可试 moondream / minicpm-v
  1. 安装 Python 包:
bash
pip install ollama-ocr

显存不够就换更小的模型;准确率优先就用更大的 vision 权重。模型名必须和 ollama list 里一致。

最小可用:抽一张图或一份 PDF

python
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,比默认英文提示稳一点

批量目录

发票、截图一堆时,用批处理:

python
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

bash
git clone https://github.com/imanoop7/Ollama-OCR.git
cd Ollama-OCR
pip install -r requirements.txt   # 以仓库说明为准
streamlit run app.py

浏览器里拖文件、选模型、下结果。适合给同事临时用,或自己肉眼核对某一页抽得对不对。

怎么选模型(经验向)

场景更常试
一般截图 / UI 文案llama3.2-visionllava
表格、图表、信息图granite3.2-vision
笔记本 / 小显存moondreamminicpm-v
要极致文档 OCR可另跑专用 OCR 模型,再和本包装混用

LLaVA 类模型偶发胡写,重要单据建议抽完后人工扫一眼关键字段,或换更强的 vision / 专用 OCR 再跑一遍交叉验证。

和现有流水线怎么接

  • 脚本 / Agentprocess_image 返回字符串或结构化对象,直接塞进下游解析、入库、给编码代理当上下文
  • n8n / 自动化:Execute Command 调一段 Python,或先用 pdftoppm 拆页再逐页调用(多页 PDF 时自己控并发更稳)
  • 隐私:文件不出本机,适合合同、客户材料、内网文档

小结

Ollama-OCR 不是新模型,是一层「本机视觉 OCR」胶水:装好 Ollama、拉视觉权重、pip install ollama-ocr,图片和 PDF 就能抽成 Markdown 或结构化文本。先从单文件 + markdown 跑通,再按版式换模型、换 format_type,批量目录和 Streamlit 留给量上来之后。

分享: