Мультимодальный AI локально: работа с изображениями через LLaVA

multimodalaillavaollama

LLM умеет не только текст. Мультимодальные модели анализируют изображения: описывают содержимое, отвечают на вопросы, извлекают данные. И всё это можно запустить локально.

Нейронные сети

Доступные модели

МодельРазмерVRAMКачествоЧерез Ollama
LLaVA 1.6 7B4.7 GB8 GBХорошееllava:7b
LLaVA 1.6 13B8 GB12 GBОчень хорошееllava:13b
Llama 3.2 Vision 11B6.4 GB10 GBОтличноеllama3.2-vision
Llama 3.2 Vision 90B55 GB80+ GBТоповоеllama3.2-vision:90b

Для начала — llava:7b или llama3.2-vision (если GPU позволяет).

Установка

ollama pull llama3.2-vision

Проверяем в чате:

ollama run llama3.2-vision
>>> [загружаем изображение] Что на этой картинке?

API для работы с изображениями

import ollama
import base64

def analyze_image(image_path: str, question: str) -> str:
    """Задаём вопрос по изображению."""
    with open(image_path, "rb") as f:
        image_data = base64.b64encode(f.read()).decode()

    response = ollama.chat(
        model="llama3.2-vision",
        messages=[{
            "role": "user",
            "content": question,
            "images": [image_data]
        }]
    )
    return response["message"]["content"]

# Примеры использования
print(analyze_image("screenshot.png", "Опиши, что на скриншоте"))
print(analyze_image("diagram.png", "Объясни эту архитектурную диаграмму"))
print(analyze_image("error.png", "Какая ошибка на скриншоте и как её исправить?"))

Практические сценарии

1. OCR из скриншотов

text = analyze_image(
    "terminal_screenshot.png",
    "Извлеки весь текст с этого скриншота терминала. "
    "Выведи только текст, без описания."
)
print(text)

2. Анализ Grafana-дашбордов

analysis = analyze_image(
    "grafana_cpu.png",
    "Проанализируй этот график CPU usage. "
    "Есть ли аномалии? Какой тренд?"
)

3. Описание для документации

description = analyze_image(
    "network_diagram.png",
    "Опиши эту сетевую диаграмму для документации. "
    "Перечисли все компоненты и связи между ними."
)

4. Автоматическая классификация

categories = ["скриншот кода", "диаграмма", "график", "фото", "мем"]

category = analyze_image(
    "image.png",
    f"К какой категории относится это изображение? "
    f"Выбери одну из: {', '.join(categories)}. "
    f"Ответь одним словом/фразой."
)

Работа с изображениями

Интеграция с Open WebUI

Open WebUI поддерживает мультимодальность из коробки. Если модель поддерживает изображения — в чате появляется кнопка загрузки:

  1. Скачиваем мультимодальную модель: ollama pull llama3.2-vision
  2. В Open WebUI выбираем эту модель
  3. Перетаскиваем изображение в чат
  4. Задаём вопрос

Это самый удобный способ для интерактивной работы.

Пайплайн: изображение → текст → действие

Комбинируем vision-модель с обычной LLM для сложных задач:

def smart_image_pipeline(image_path: str, task: str):
    # 1. Vision: описываем изображение
    description = ollama.chat(
        model="llama3.2-vision",
        messages=[{
            "role": "user",
            "content": "Подробно опиши это изображение",
            "images": [encode_image(image_path)]
        }]
    )["message"]["content"]

    # 2. LLM: выполняем задачу на основе описания
    result = ollama.chat(
        model="llama3.1:8b",
        messages=[{
            "role": "user",
            "content": f"На основе описания изображения:\n{description}\n\n{task}"
        }]
    )

    return result["message"]["content"]

# Пример: генерация alt-текста для веб-сайта
alt_text = smart_image_pipeline(
    "product_photo.jpg",
    "Напиши SEO-оптимизированный alt-текст для этого изображения. "
    "Максимум 125 символов."
)

Ограничения

  • Скорость: анализ одного изображения — 5-15 секунд на RTX 3060
  • Галлюцинации: модель может «увидеть» то, чего нет
  • Текст: OCR работает, но хуже специализированных решений (Tesseract)
  • Разрешение: высокое разрешение ≠ лучший результат (модели ресайзят внутри)

Итого

Мультимодальные модели локально — это реально. LLaVA/Llama 3.2 Vision через Ollama работают из коробки. Основные применения: OCR, анализ графиков, описание диаграмм, классификация изображений. Требуется GPU с 8+ GB VRAM.

© 2026 Terminal Notes. Built with SvelteKit.