Использование VLM и OCR для распознавания текста
Привет, vc.ru! Наконец-то я с вами. Одним из моих направлений работ является создание базы знаний по обучающим курсам, которые включают текст и видеоматериалы. И некоторое время назад передо мной возник вопрос: какое решение будет оптимальным для распознавание текста на кадрах. В частности, что лучше мне подойдет - VLM или связка OCR + LLM, облачное решение или локальная установка.
Более того, я углубился в тематику OCR, проведя ряд экспериментов со следующими решениями
- OCR сервис на Yandex Cloud
- локальная установка OCR от Provision
- VLM от cloud.ru
- локальная установка Ollama с VLM моделью qwen3-vl:8b
Я проводил эксперименты с обработкой скана паспорта, скана договора и отчета с таблицами. Давайте кратко напишу про особенности этих решений.
OCR сервис на Yandex Cloud
В моем видео демонстрируется создание сервисного аккаунта для использования LLM. Это видео можно использовать и для случая OCR. Только при создании сервисного аккаунта нужно указать роль в каталоге ai.vision.user вместо ai.langugeModels.user, а при создании ключа для этого сервисного аккаунта нужно указать его область действия yc.ai.vision.execute (вместо yc.ai.languageModels.execute).
Я сделал простой пример и выложил его на GitHub. Пример отправляет POST-запрос и получает JSON с довольно сложной структурой, которая включает распознанный текст (fullText), блоки текста с их координатами и многое другое. Все эти дополнительные данные могут пригодится для пост-обработки.
OCR от Provision
Для ознакомления или личного использования достаточно просто скачать установщик для Windows или docker-образ. Никакой регистрации на сайте перед скачиванием или при первом запуске сервиса не требуется. У trial версии есть ограничение — 50 обращений к сервису до перезапуска.
На сайте Provision есть инструкция для установки. Также на сайте Provision есть примеры для запуска и ссылка на аккаунт GitHub. Там есть примеры веб-сервисов на Java и Python. Я, кстати, сделал видео про установку и видео про запуск примеров.
Также я сделал свой пример с использованием координат — сканирование слайда и получение его заголовка (пригодится для создания эмбеддинга для базы знаний). Пример использует шаблон общего вида и получает данные аналогичные Yandex Cloud. В отличие от Yandex Cloud мне вернулась вероятностью. И это очень важно для оцифровки, например, документов бухгалтерии. Отметка «плохой скан» лучше ведь недостоверных данных?
VLM на Cloud.ru
На Cloud.ru я попробовал запустить DeepSeek-OCR-2 на задаче с заголовком слайда. Для этого я сделал пример. Порядок действий в Cloud.ru аналогичен порядку на Yandex Cloud: нужно создать сервисный аккаунт, а затем создать и сохранить API-ключ. При генерации API-ключа для сервисного аккаунта нужно указать область действия Foundation Models.
Я добился стабильного ответа только для промпта «Please recognize text in the picture» при нулевой температуре. Получить только заголовок слайда у меня стабильно не получилось. Даже при нулевой температуре заголовок слайда и подзаголовок слиты. Я оставил в примере промпт в закомментированном виде.
Запуск VLM на Ollama
Когда использовать OCR
Основываясь на результатах, я сделал следующее заключение. Связку OCR + LLM можно использовать для того, чтобы:
- получить более дешевое решение для простых задач (OCR модель можно запускать даже на CPU)
- получить более детальную информацию по распознаванию
- OCR + пост-обработку легче настроить для какого-то нестандартного случая, чем дообучать VLM
- получить вероятности вместо галлюцинаций
Мои планы
Я планирую выпустить развернутую статью на Хабр по этой тематике. Если у Вас есть какие-то другие задачи по OCR тематике или Вам хотелось бы узнать про какие-то альтернативные решения, пишите в комментариях.