进阶 12 分钟视觉

本地多模态视觉LLM:支持图像分析 Ollama

描述照片、从截图中提取表格、读取扫描发票的总额:自 2024 年以来,开放权重的视觉大语言模型在这些任务上已能与 GPT-4o 媲美,而 Ollama 让调用这些模型像调用文本模型一样简单。本指南介绍如何使用 Ollama 安装本地视觉大语言模型,如何通过 Python 使用 base64 编码的图像调用它,以及如何根据您的显存容量利用 Qwen 3.5、Gemma 4 或 Qwen 3.8。

作者: Mohamed Meguedmi·更新于 2026-08-27·已在 Windows、macOS 和 Linux 上测试

#为何在本地部署视觉 LLM?

将客户发票、医疗截图或人力资源文件发送给 OpenAI 会带来保密问题,法务部门越来越不愿接受这种做法。本地视觉 LLM 可以满足这些具体需求:对会计凭证进行 OCR 识别、自动描述产品目录、图像审核、无障碍支持(替代文本)、从扫描版 PDF 中提取数据。

与传统 OCR(Tesseract、PaddleOCR)的区别在于:视觉大语言模型能够理解语义。它能说出“增值税号是 FR12345678901”,而 OCR 返回的却是一堆杂乱字符,需要您随后进行解析。在结构化文档上,使用“JSON 提取”模式时,可靠性超过 95%。

i
此处‘视觉’所指的内容
一个多模态视觉大语言模型(LLM)除了文本输入外,还支持图像输入。它不会生成图像(如需生成图像,请参考Stable Diffusion)。您提供一张图片和一个问题,模型将返回文本回答。

#Ollama 中可用的视觉模型

本地 AI 套件

只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。

  • 在线空间,终身可用
  • PDF + 文件
  • 终身更新

Ollama 从 0.4 版本(2024 年 10 月)起就原生支持多个视觉模型系列,而 2026 年这一代模型又改变了格局:视觉能力现已集成到 Qwen 3.5 和 Gemma 4 的标准标签中,不再需要单独的 -vl 变体。以下是 2026 年值得考虑的选项,按模型规模和法语 OCR 质量分类。

qwen3.5:9b
2026 年输出质量与显存需求之间的最佳折中。法语 OCR 表现出色,能理解表格和表单,上下文长度为 256k token,采用 Apache 2.0 许可证。Q4 量化后的模型权重约为 6.6 GB。
qwen3.5:4b
适用于 4–6 GB 显存或配备 16 GB 内存的 Mac M1/M2 的轻量版本。同属 Qwen 3.5 多模态系列,法语 OCR 表现尚可,描述稍欠丰富。约 3.4 GB。
qwen3.8:27b
针对 RTX 3090/4090/5090(24 GB):在复杂文档分析上的表现接近 GPT-4o。支持视觉、262k 上下文,采用 Apache 2.0 许可。模型大小约为 18 GB(Q4)。
gemma4:12b
Google 的替代方案(Gemma 4,2026 年 4 月),支持多模态,已改用 Apache 2.0 许可证。一般性描述能力很强,纯 OCR 能力稍逊。约 7.6 GB。
gemma4:26b
Gemma 4 26B-A4B,多模态专家混合模型。面向高强度专业用途的高端档位:权重约占 19 GB,可在配备 24 GB 显存的设备或采用统一内存的 Mac Studio 上运行。
gemma4:e2b-it-qat
采用 QAT 量化的 Gemma 4 E2B(约 4.3 GB)。适合显存较小的设备或边缘设备的紧凑型选择,采用 Apache 2.0 许可证。
qwen3.5:2b
Qwen 3.5 2B 多模态(约 1.9 GB,上下文长度 256k)。适用于 Raspberry Pi 5 或快速批量生成描述。不适合对复杂文档进行高质量 OCR。
llava:7b / llava:13b
2023 年的老一代模型。不要再部署:到 2026 年,Qwen 3.5 和 Gemma 4 的质量已经远远超过它。
→
默认推荐
如果您有 8 GB 或更多显存,请从 qwen3.5:9b 开始。在 2026 年的法语应用中,它的输出质量与模型大小之比最佳,标准标签已包含视觉能力,而且 Ollama 社区对其使用场景提供了完善的文档说明。

#硬件要求

视觉大模型所需的VRAM略高于同等文本模型,因为视觉编码器(通常为ViT)在运行时会持续占用额外内存。

8 GB 显存(RTX 3060 12GB、4060、M1/M2 16GB)
qwen3.5:4b 可轻松运行,也可选择 qwen3.5:9b(6.6 GB),其 Q4 量化版本刚好能容纳。
12 GB VRAM (RTX 3060 12GB, 4070, 5070)
qwen3.5:9b 运行轻松,gemma4:12b 使用 Q4_K_M 量化。
16 GB VRAM(RTX 4070 Ti Super、4080、5070 Ti)
上述所有内容,再加上 32k token 的上下文;或者使用 qwen3.5:9b-q8_0,以获得该档位的最高质量。
24 GB VRAM(RTX 3090、4090、5090)
qwen3.8:27b(约 18 GB)或 gemma4:26b,质量接近云端模型。
Mac M系列 24-48GB 统一内存
通过统一内存支持 qwen3.5:9b 或 qwen3.8:27b。建议使用 M3/M4 以获得更高的带宽。

Ollama 版本必须至少为 0.4,以支持现代视觉模型。请使用 ollama --version 检查版本。如果版本过低,请先更新再继续操作。

#1. 安装视觉模型

安装方式与文本模型相同:ollama pull t一次性下载权重和视觉编码器。

终端 — 安装 Qwen 3.5 9B
ollama pull qwen3.5:9b

下载大小约为 6.6 GB(Q4 量化后的 LM 权重 + ViT 编码器)。光纤网络下预计耗时 2-3 分钟。下载完成后,请确认模型已列出:

终端
ollama list

# NAME            ID            SIZE      MODIFIED
# qwen3.5:9b      abc123...     6.6 GB    2 minutes ago
!
标准标签已包含视觉功能
好消息:从 Qwen 3.5 和 Gemma 4 起,默认标签(qwen3.5:9b、gemma4:12b)就已包含视觉能力。不再有上一代模型必须使用单独的 -vl 标签(qwen2.5vl 与 qwen2.5)的坑。只需确认您拉取的是较新的多模态模型,而不是旧的纯文本模型。

#2. 首次 CLI 测试

Ollama 从 0.4 版本开始支持直接在命令行中传入图片:在提示语后加上文件路径。

用法语描述一张图片
ollama run qwen3.5:9b "Décris cette image en 3 phrases en français." ./photo.jpg

模型加载图像,通过 ViT 编码,并以流式方式响应。在 RTX 4070 上,短描述耗时约 2-4 秒,详细分析耗时约 8-12 秒。

典型输出
L'image montre un chat tigré assis sur un rebord de fenêtre en bois clair.
Le pelage présente des rayures grises et noires caractéristiques d'un tabby.
À l'arrière-plan, on devine un jardin flou avec de la végétation verte.
→
一次使用多张图片
您可以传入多个文件路径:ollama run qwen3.5:9b "比较这两张图片" photo1.jpg photo2.jpg。适合进行视觉差异比较或去重。

#3. 带 base64 图像的 Python API

要将具备视觉能力的 LLM 集成到应用中,Ollama 在 http://localhost:11434 提供 REST 接口。图像可以通过文件路径传入(Python 绑定),也可以通过 base64 编码传入(直接使用 HTTP)。

推荐方法:官方 ollama-python 库。它会自动处理 base64 编码,并支持直接路径输入。

安装
pip install ollama pillow
vision_local.py — 简单调用
import ollama

response = ollama.chat(
    model='qwen3.5:9b',
    messages=[{
        'role': 'user',
        'content': 'Quel est le texte visible sur cette image ? Réponds en français.',
        'images': ['./screenshot.png'],
    }],
)

print(response['message']['content'])

如果您更愿意自行处理 base64(图像位于内存中、S3 blob、通过 FastAPI 上传),下面是显式处理的版本:

使用显式base64编码
import base64
import requests

with open('facture.png', 'rb') as f:
    img_b64 = base64.b64encode(f.read()).decode('utf-8')

response = requests.post(
    'http://localhost:11434/api/chat',
    json={
        'model': 'qwen3.5:9b',
        'messages': [{
            'role': 'user',
            'content': 'Décris cette image.',
            'images': [img_b64],
        }],
        'stream': False,
    },
    timeout=120,
)

print(response.json()['message']['content'])
i
所需的 base64 格式
Ollama 支持原始 base64 数据,无需 data:image/png;base64, 前缀。若从浏览器获取图像,请在调用前移除该前缀。

#4. 实际案例:法国发票的OCR识别

从扫描文档中提取结构化数据,是需求最多的商业应用场景。效果最好的做法是:在提示词中明确给出 schema,并要求输出 JSON。

ocr_facture.py
import ollama
import json

SYSTEM = '''Tu es un assistant d'extraction de données comptables.
Tu réponds UNIQUEMENT en JSON valide, sans markdown, sans commentaire.'''

PROMPT = '''Extrais les informations de cette facture française au format JSON :
{
  "fournisseur": str,
  "siret": str ou null,
  "numero_facture": str,
  "date": "YYYY-MM-DD",
  "montant_ht": float,
  "tva": float,
  "montant_ttc": float,
  "lignes": [{"description": str, "quantite": float, "prix_unitaire": float}]
}'''

response = ollama.chat(
    model='qwen3.5:9b',
    messages=[
        {'role': 'system', 'content': SYSTEM},
        {'role': 'user', 'content': PROMPT, 'images': ['./facture.png']},
    ],
    format='json',
    options={'temperature': 0.1},
)

data = json.loads(response['message']['content'])
print(f"Fournisseur : {data['fournisseur']}")
print(f"Montant TTC : {data['montant_ttc']} €")

两个能显著提升整体可靠性的技巧:设置 format='json'(Ollama 会强制输出有效的 JSON)以及将温度参数降至 0.1,以减少对金额的幻觉错误。在 100 张不同类型的法国发票中,Qwen 3.5 9B 通常能正确提取出含税总额、日期和供应商信息,准确率在 92% 至 96% 之间。

!
始终验证金额
即使准确率达到 96%,每 100 张发票仍会出现 4 个错误。在生产环境中,请始终验证 montant_ht + tva ≈ montant_ttc,并标记不一致之处,交由人工复核。LLM 并不是持证会计人员。

#Qwen 3.5 对比 Gemma 4:应如何选择?

这两大系列在 2026 年的开放权重视觉模型领域占据主导地位。以下是我们在法语使用场景下对 qwen3.5:9b 与 gemma4:12b 进行的实际对比:

法语OCR(发票、合同)
Qwen 3.5 明显胜出。Gemma 4 在处理模糊文档时容易“编造”数字。Qwen 的准确率高出 15%。
图像的一般描述
不分胜负。Gemma 4 的描述更偏叙事,Qwen 3.5 的描述更偏重事实。取决于个人喜好。
表格理解
Qwen 3.5 表现优异。它是少数能够准确解析 Excel 数据透视表而不混淆的同级别模型之一。
多语言图像描述(法/英/西)
Qwen 3.5的训练涵盖了更多语言。Gemma 4在纯英语任务上略胜一筹。
RTX 4070 的延迟
响应时间相近:短回答约 2-4 秒。Gemma 4 12B 在首次推理阶段快 10-15%(视觉编码器更轻量)。
许可证
两者均采用 Apache 2.0 许可(可自由商用):Gemma 4 于 2026 年 4 月转为 Apache 2.0,使 Google 与 Qwen 保持一致。不再需要关注 MAU 限制。
→
实用结论
对于 90% 的法语使用场景(OCR、提取、描述),Qwen 3.5 9B 是默认选择。如果您已经使用 Google/Gemma 生态系统(微调、部署),或需要面向大众的英文图像描述,Gemma 4 12B 仍然适用。想在 24 GB 的配置上获得最佳文档处理质量?请改用 qwen3.8:27b。

#故障排除

"Error: model does not support images"
您正在调用文本模型。请确认已拉取较新的多模态模型(qwen3.5、gemma4,或较早的 llava)。ollama list 应显示正确的模型。
该模型描述的内容与图像不符
Base64 数据可能已损坏,或包含 data:image 前缀。调用前请移除 `data:image/png;base64,`。先通过命令行(CLI)测试,以排查问题。
加载时VRAM已饱和
除了语言模型权重,还需要加载视觉编码器。请切换到更激进的量化方式(q3_K_M),或在环境变量中将 OLLAMA_NUM_CTX 降至 4096。
OCR 无法正确识别法语重音符号
在system prompt中明确指定"以法语回复并保留重音符号"。否则模型有时会将é转换为e。
响应时间 > 30秒
一张 4000x3000 的图片会使视觉 token 数量暴增。发送前请将图片缩小至不超过 1024x1024:只需原来 10% 的计算量,就能保留 90% 的 OCR 质量。
推理前调整尺寸
from PIL import Image

img = Image.open('facture_4k.png')
img.thumbnail((1024, 1024), Image.LANCZOS)
img.save('facture_resized.png', optimize=True)

#深入了解

您现在已经有了一个能正常运行的本地视觉大语言模型。接下来可以从以下三个方向继续探索:

集成到完整的 Python 应用中
《通过 REST API 将 Ollama 集成到 Python 应用中》指南详细介绍了 FastAPI、流式输出和函数调用——这些内容可原样应用于视觉模型。
构建文档提取流水线
《会计:发票提取》指南展示了如何以本地视觉 LLM 为基础,构建完整的生产化流程(作业队列、验证、ERP 导出)。
选择适合您负载的GPU
《为本地 AI 选择 GPU》指南涵盖 12/16/24 GB 显存档位及其对 4B/9B/27B 视觉模型的影响。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。