本地多模态视觉模型部署实战:让 Ollama 学会看图说话,OCR 和图片理解全在家里跑

先问一个扎心的问题:你手机里的截图、扫描件、…

先问一个扎心的问题:你手机里的截图、扫描件、合同照片、发票,有多少张是传到别人家服务器上被”看”过的?现在的 AI 不光会聊天,还会看图——上传一张图,它能提取文字、描述场景、分析表格。但市面上大部分”图片理解”服务,都是把图传到云端去处理,隐私这件事,从你把图交出去那一刻就结束了。

好消息是,多模态视觉模型(Vision-Language Model,简称 VLM)早就开源了,而且在你自己的机器上就能跑。今天这篇,我用 Ollama 把这套东西在本地搭起来,顺带把选型和避坑一次讲透。

一、先选型:别一上来就拉最大的

视觉模型和纯文本模型不一样,它多了一个”视觉编码器”,显存占用会额外往上蹿一截。所以选型的第一原则是看显存下菜。目前 Ollama 上能直接拉的视觉模型主要有这么几类:

  • qwen3-vl / qwen2.5vl:国产旗舰,中文 OCR 和表格识别最强,7B/8B 版本 6GB 左右显存能跑,中文场景首选。
  • llama3.2-vision:Meta 出品,11B,通用图片理解能力均衡,英文场景表现稳。
  • minicpm-v:轻量里的全能选手,8B,文档 OCR 精度高,低显存机器优先考虑。
  • moondream:2B 的极速小模型,2GB 显存就能跑,适合只做粗粒度描述的场景。
  • llava:老牌选手,1.6 版本,生态成熟,中文支持一般。
  • deepseek-ocr:OCR 专用,token 效率高,纯文字提取场景很省。

我的建议很直接:显存 6–8GB 选 minicpm-vqwen2.5vl:7b;8–16GB 直接上 llama3.2-visionqwen3-vl;只有 2GB 左右就 moondream。中文内容多就认准 qwen 系列,纯英文 OCR 认准 deepseek-ocr。

二、部署:一条命令的事

假设你机器上已经装好了 Ollama(没装的翻我之前的文章,一条命令的事),部署视觉模型就两句话:

# 拉取模型(以 qwen3-vl 8B 为例)
ollama pull qwen3-vl:8b

# 进入交互模式
ollama run qwen3-vl:8b

进入交互界面后,直接给一个图片路径加上你的问题,模型会自动把图编码后喂进去:

/root/photo.jpg 这张图里有什么?把里面的文字全部提取出来

到这一步,你已经有一个能”看图说话”的本地 AI 了。但光会聊天没用,得能接进工作流。

三、接进工作流:用 API 传图

Ollama 的 REST API 同样支持图片,关键点是:图片要传 base64 编码,不是文件路径。很多新手在这里踩坑——传了路径,结果模型当成纯文本处理,返回一堆”图片里有个男人站在……”之类的胡话。正确姿势是这样的:

curl http://localhost:11434/api/generate -d '{
  "model": "qwen3-vl:8b",
  "prompt": "提取这张图片里的所有文字,保持原有格式",
  "images": ["BASE64编码的图片内容"],
  "stream": false
}'

如果你用 Python,封装一下更顺手,以”发票自动提取”为例:

import base64, json, requests

with open("receipt.jpg", "rb") as f:
    b64 = base64.b64encode(f.read()).decode()

resp = requests.post("http://localhost:11434/api/generate", json={
    "model": "qwen3-vl:8b",
    "prompt": "这是一张发票,提取金额、日期、商户名,用JSON输出",
    "images": [b64],
    "stream": False,
})
print(json.loads(resp.text)["response"])

这段代码跑通之后,发票报销、相册整理、截图批量提取文字,就全都能自动化了。

四、五个避坑要点

  1. 图片必须 base64:API 只认 base64 编码的 images 数组,传路径、传 URL 都不行。
  2. 显存要留余量:视觉编码器会额外吃显存,7B 视觉模型实际可能占 8–10GB,别按纯文本模型的经验去估。
  3. 上下文长度:图片越大、越多,吃掉 context 越多。长图或多图场景记得把 num_ctx 调大,否则后半段直接截断。
  4. 分辨率别乱压:OCR 场景分辨率一低,识别率断崖式下跌。原图优先,实在太大再压到 2000px 以内。
  5. 格式限制:JPG、PNG 都行,但超大图(几 MB 以上)建议先降采样,编码和解码都更快。

五、写在最后

把这套跑起来之后,你会发现很多场景突然就有了本地解法:发票的自动识别、相册的自动整理、截图的批量文字提取,甚至监控画面的异常识别——而这些数据,一张都不用出你的内网。

如果你已经在玩 Ollama,强烈建议顺手拉一个视觉模型试试,成本就是一条命令加几个 GB 的显存。下一篇我可以聊聊怎么把它接进 paperless-ngx 这类文档系统,给本地文档库装一个”零上传”的 OCR 大脑。回见。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注