Все статьи
Статья
3 августа 2026 г.7 мин

Работа с изображениями: vision для документов и скриншотов

Мультимодальные модели читают сканы, таблицы и скриншоты. Как подать картинку, вытащить структуру и не переплатить за токены изображения.

Роман Дьяченко


Работа с изображениями: vision для документов и скриншотов

Vision-модели закрывают то, с чем классический OCR мучается: рукописные пометки, кривые сканы, таблицы со сложной вёрсткой, скриншоты интерфейсов. Модель не просто распознаёт символы, а понимает структуру — где заголовок, где итоговая сумма, где подпись.

Как подать изображение

Картинка идёт в content как отдельный элемент — либо URL, либо base64:

import base64
with open("invoice.png", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
resp = client.chat.completions.create(
model="gemini-pro",
messages=[{"role": "user", "content": [
{"type": "text", "text": "Извлеки из счёта поставщика, сумму и дату. Верни JSON."},
{"type": "image_url", "image_url": {
"url": f"data:image/png;base64,{b64}"}},
]}],
response_format={"type": "json_object"},
)

Выбор модели

  • Gemini — сильна на документах и таблицах, большой контекст, хорошо держит русский текст на сканах.
  • Qwen-VL — крепкий вариант для скриншотов интерфейсов и диаграмм.
  • Для чистого печатного текста без структуры классический OCR всё ещё дешевле — vision берите там, где нужно понимание вёрстки, а не только символы.

Извлечение структуры

Vision особенно хорош, когда нужно не «весь текст», а конкретные поля из документа. Комбинируйте с JSON-режимом (как в примере выше) и жёсткой схемой. Для таблиц просите вернуть массив объектов:

Извлеки таблицу как JSON-массив, каждая строка — объект с ключами
из шапки. Пустые ячейки — null. Не додумывай строки, которых нет.

Токены изображения — где утекают деньги

Изображение стоит токенов, и немало: большая картинка может съесть столько же, сколько страница текста, а то и больше. Правила экономии:

  • Ресайзьте перед отправкой. Модели детализация выше ~1500px по длинной стороне обычно не нужна для документов. Сжатие вдвое режет счёт, не роняя качество.
  • Не шлите многостраничный PDF одной пачкой картинок «на всякий». Обрабатывайте нужные страницы.
  • Настройка detail (если поддерживается): low для «понять, что на картинке в общих чертах», high — для мелкого текста в таблице.

Грабли

  • Модель «читает» то, чего нет. На плохом скане vision склонна достраивать правдоподобные цифры. Для критичных полей (суммы!) добавляйте проверку: контрольная сумма, сверка с диапазоном, флаг «низкая уверенность».
  • Поворот и перекос. Сфотографированный под углом документ снижает точность. Выравнивайте перед отправкой, если контролируете источник.
  • Русский рукописный. Печатный текст читается отлично, рукописный русский — с ошибками. Не полагайтесь на него без проверки человеком.
  • Смешение полей в таблице. Если колонки узкие, модель сдвигает значения на соседнюю строку. Просите проверить, что число строк совпадает с исходником.

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

Обработка входящих счетов: скан → vision-модель с JSON-схемой → валидация суммы и даты → если confidence низкий или сумма вне диапазона, на ручную проверку, иначе в учёт. Такой конвейер снимает с людей рутину ввода, оставляя им только спорные случаи. Считайте стоимость по токенам изображения на реальной выборке — 1 кредит = 1 ₽, и большие сканы могут удивить.