Работа с изображениями: vision для документов и скриншотов
Мультимодальные модели читают сканы, таблицы и скриншоты. Как подать картинку, вытащить структуру и не переплатить за токены изображения.
Роман Дьяченко
Работа с изображениями: vision для документов и скриншотов
Vision-модели закрывают то, с чем классический OCR мучается: рукописные пометки, кривые сканы, таблицы со сложной вёрсткой, скриншоты интерфейсов. Модель не просто распознаёт символы, а понимает структуру — где заголовок, где итоговая сумма, где подпись.
Как подать изображение
Картинка идёт в content как отдельный элемент — либо URL, либо base64:
import base64with 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 ₽, и большие сканы могут удивить.