OCR (Yandex Vision OCR)
Нода OCR распознает текст в изображениях и PDF-файлах с помощью Yandex Vision OCR. Поддерживает обычный печатный текст, многоколоночный текст, рукописный текст, таблицы, формулы (LaTeX), а также шаблонные документы (паспорт, водительское удостоверение, СТС, автомобильные номера).
Нода занимается только распознаванием. Чтобы проиндексировать результат в базу знаний для последующего поиска, подключите к её выходу ноду Индексация в базу знаний.
Назначение
- Извлечение текста из сканов документов и фотографий
- Распознавание паспортов, водительских удостоверений, СТС, автомобильных номеров
- OCR таблиц с возвратом структурированных данных
- Распознавание рукописного текста (русский / английский)
- Извлечение математических формул в формате LaTeX
Настройки
URL файла
URL изображения или PDF, который нужно распознать. Поддерживает подстановку переменных через {{переменная}}:
https://storage.example.com/{{input.document_id}}.pdf
Кнопка справа от поля позволяет вставить ссылку на переменную из workflow.
Если поле оставлено пустым, нода использует:
- Текущий элемент цикла ForEach (если в нем строка с URL)
- Поле
fileUrl/url/file_urlиз выхода предыдущей ноды - Строковый выход предыдущей ноды
Модель
Выбор модели определяет, какой алгоритм Yandex использует для распознавания.
Текстовые модели
| Значение | Описание |
|---|---|
| page | По умолчанию -- одноколоночный печатный текст |
| page-column-sort | Многоколоночный текст (две и больше колонок) |
| handwritten | Рукописный + печатный текст. Только русский и английский |
| table | Таблицы. Только русский и английский |
| markdown | Возвращает результат в формате Markdown |
| math-markdown | Математические формулы в LaTeX-разметке внутри Markdown |
Шаблонные документы
| Значение | Описание |
|---|---|
| passport | Основной разворот российского паспорта |
| driver-license-front | Водительское удостоверение, лицевая сторона |
| driver-license-back | Водительское удостоверение, обратная сторона |
| vehicle-registration-front | СТС, лицевая сторона |
| vehicle-registration-back | СТС, обратная сторона |
| license-plates | Все автомобильные номера на изображении |
Шаблонные модели возвращают распознанные поля в массиве entities (см. ниже).
Языки
Список языковых кодов ISO 639-1 (ru, en, de, fr, ...). По умолчанию: ru, en.
Для каждого вызова Yandex использует одну языковую модель. Если на одном изображении есть текст на нескольких языках вне одного семейства, лучше выполнять отдельные вызовы.
Модели handwritten и table поддерживают только русский и английский. При выборе других языков нода вернет ошибку ConfigurationError ещё до вызова Yandex.
Лимит символов inline
Максимум символов в inline-поле text. По умолчанию: 50 000.
Если распознанный текст превышает лимит, поле text обрезается, ставится флаг truncated: true, а полный массив pages[] сохраняется без изменений. Это позволяет downstream нодам (например, ForEach) обрабатывать длинные документы постранично, не нагружая контекст LLM.
Тайм-аут async
Используется при распознавании многостраничных PDF. По умолчанию: 180 секунд, диапазон 30--300.
Yandex обрабатывает PDF в асинхронном режиме (отправка → polling → результат). Если за указанное время операция не завершилась, нода возвращает ошибку APIError.
Лимиты Yandex Vision OCR
- Форматы: JPEG, PNG, PDF
- Максимальный размер файла: 10 МБ
- Максимальный размер изображения: 20 мегапикселей (длина × ширина)
Нода проверяет размер прямо при скачивании -- если файл больше 10 МБ, скачивание прерывается без буферизации (защита от OOM).
Входные данные
URL файла из настроек ноды или из выхода предыдущей ноды (через fallback-цепочку, см. раздел «URL файла»). Внутри ForEach -- текущий элемент массива, если это строка-URL.
Выходные данные
{
"__success": true,
"__error": false,
"text": "Полный распознанный текст (возможно, обрезанный)",
"pages": [
"Текст страницы 1",
"Текст страницы 2"
],
"truncated": false,
"totalChars": 12345,
"blocks": [
{
"text": "PENGUINS\nCROSSING",
"vertices": [
{"x": "460", "y": "777"},
{"x": "460", "y": "906"},
{"x": "810", "y": "906"},
{"x": "810", "y": "777"}
],
"layoutType": "LAYOUT_TYPE_TEXT",
"languages": [{"languageCode": "en"}],
"page": 0
}
],
"entities": [],
"tables": [],
"markdown": null,
"model": "page"
}
| Поле | Описание |
|---|---|
text | Полный текст всех страниц, склеенный через \n\n. Обрезается по maxInlineChars. |
pages | Массив текстов по страницам. Всегда полный, никогда не обрезается -- удобно для ForEach. |
truncated | true, если text был обрезан по лимиту inline |
totalChars | Длина полного текста до обрезки |
blocks | Блоки с координатами, типом layout и языком (для отображения областей на изображении) |
entities | Извлеченные поля шаблонных документов (паспорт, ВУ, СТС, номера) |
tables | Структурированные таблицы (для модели table) |
markdown | Markdown-вариант результата (для моделей markdown / math-markdown) |
model | Использованная модель |
При ошибке распознавания:
{
"__success": false,
"__error": true,
"error": "Yandex Vision OCR failed: invalid model",
"errorType": "APIError",
"status": 400
}
Возможные значения errorType: ConfigurationError (валидация настроек), ValidationError (формат / размер файла), DownloadError (не удалось скачать URL), APIError (ошибка от Yandex), и имя класса исключения для прочих случаев.
Подключения
- Вход: один вход (слева)
- Выход: один выход
output(справа)
Примеры использования
Извлечение данных из паспорта
URL файла: {{input.passport_url}}
Модель: passport
Языки: ru
В выходе массив entities содержит распознанные поля паспорта (серия, номер, ФИО, дата рождения и т.д.). Дальше можно подключить агента или функцию для извлечения нужных полей.
Распознавание длинного PDF + индексация в базу знаний
Сценарий: пользователь загружает 50-страничный договор, по нему нужно отвечать на вопросы.
- OCR -- URL
{{input.contract_url}}, модельpage. Возвращаетtextиpages[]. - Индексация в базу знаний -- получает
textот OCR, складывает в KB через выбранный пайплайн. - (Позже, в другом workflow или ветке) Поиск (Retrieve) -- запрос
{{input.question}}ищет по проиндексированному документу. - LLM -- ответ на вопрос с использованием результатов RAG.
Индексация выполняется в фоне (Celery), поэтому RAG-нода в том же запуске может ещё не увидеть документ. Для интерактивных сценариев лучше разделить на два workflow: первый только индексирует, второй отвечает на вопросы.
Постраничная обработка через ForEach
Сценарий: распознать PDF и получить саммари каждой страницы отдельно.
- OCR -- модель
page. Возвращаетpages[]. - ForEach --
inputPath: "pages", внутренняя операция «LLM». - LLM -- промпт
Сделай краткое саммари: {{_loop_item}}. - Сообщение -- собрать все саммари в один ответ.
OCR таблицы
URL файла: {{input.report_url}}
Модель: table
Языки: ru, en
В выходе будет заполнен массив tables со структурированным представлением таблицы (строки, ячейки, координаты).
Распознавание формул
URL файла: {{input.equation_url}}
Модель: math-markdown
Языки: en
Поле markdown будет содержать результат с формулами в LaTeX-обертке вида $E = mc^2$.
Для интерактивных сценариев загрузите файл в S3-совместимое хранилище (Yandex Object Storage, AWS S3, MinIO) и передайте подписанный URL в переменную workflow. Yandex скачает файл по этому URL.
Прямая загрузка файла из upstream-ноды (например, байты из function-ноды) пока не поддерживается -- только URL.
Для работы ноды необходим API-ключ Yandex Cloud с ролью ai.vision.user. Ключ настраивается в провайдере Yandex Vision OCR в настройках организации.
При Api-Key-аутентификации folderId не требуется, но сам ключ должен быть привязан к сервисному аккаунту с правами на Vision.
Если изображение содержит EXIF-метаданные с поворотом (Orientation), координаты блоков в выходе могут не совпадать с тем, что видит пользователь в просмотрщике. Yandex учитывает EXIF-поворот, а часть просмотрщиков -- нет.
Решение: либо настроить просмотрщик с учетом EXIF, либо удалить атрибут Orientation из секции EXIF перед загрузкой.
Yandex Vision OCR оплачивается по тарифам Yandex Cloud отдельно от платформы. Для шаблонных документов (passport, driver-license, vehicle-registration, license-plates) тариф выше, чем для общего распознавания.