Технологии

Что такое OCR

Распознавание текста с изображения. Разбираем, что определяет качество на русском, и главную практическую беду — латинские буквы, подмешанные в кириллические слова.

OCR (optical character recognition) — превращение изображения текста в строку символов. На выходе, помимо самих символов, обычно есть координаты каждого слова и оценка уверенности. Именно на этом строится поиск по скриншотам: искать по картинке нельзя, по распознанному тексту — можно.

#Что определяет качество

Порядок важности примерно такой:

  1. Разрешение исходника. Для сканов ориентир — около 300 dpi. Для скриншотов правило другое: снимайте в исходном масштабе и не уменьшайте. Уменьшенный вдвое скриншот теряет мелкий интерфейсный текст безвозвратно.
  2. Кегль в пикселях. Ниже примерно 10–12 пикселей высоты строчной буквы точность начинает заметно падать — на любом движке.
  3. Языковой пакет. Русский текст без загруженной русской модели распознаётся как набор латинских символов. Для смешанного текста нужны оба языка сразу — в Tesseract это -l rus+eng.
  4. Контраст и тема. Светлый текст на тёмном фоне часть движков обрабатывает хуже; помогает инверсия перед распознаванием.
  5. Разметка страницы. Колонки, таблицы и текст поверх изображений сбивают порядок строк — не сами символы, а их последовательность.

#Главная беда на русском: смешение алфавитов

Кириллица и латиница содержат неразличимые на глаз пары: с/c, о/o, е/e, а/a, р/p, х/x, у/y, к/k, В/B, Н/H, М/M, Т/T. Движок регулярно выбирает не ту букву — особенно в коротких словах и в верхнем регистре.

Последствие не косметическое. Слово «сервер», в котором «с» оказалась латинской, выглядит правильно, но не находится по запросу «сервер» — ни точным совпадением, ни полнотекстовым индексом, потому что это другая строка байтов. Архив на десятки тысяч скриншотов может содержать тысячи таких молчаливо непоисковых слов.

Что с этим делать: нормализовать текст после распознавания — заменять одиночные латинские буквы внутри кириллических слов — и падать в поиск по подстроке, если точное совпадение ничего не дало. Практика — в разборе особенностей поиска по OCR-тексту.

Типовая ошибка Как выглядит Чем лечится
Смешение алфавитов «сервер» с латинской «c» нормализация после распознавания
Ошибки цифр 0 вместо O, 1 вместо l контекстные правила, словарь
Слипание строк две строки в одну коррекция разметки страницы
Мусор из иконок случайные символы порог уверенности, фильтр коротких фрагментов

#Где путают

Заблуждение первое: OCR понимает текст. Не понимает. На выходе символы и координаты, без смысла и без структуры. Смысл добавляет уже языковая модель, которой скормили распознанное.

Заблуждение второе: современная модель зрения заменила OCR. Для смысла — часто да, для точного текста — нет. На нечитаемом фрагменте распознавание выдаст видимый мусор, а модель зрения — правдоподобно выдуманную строку. Для архива, по которому потом ищут, второе хуже; сравнение подходов — в справке про мультимодальность.

Заблуждение третье: распознавание всего экрана безопасно, раз это мой экран. На экране регулярно оказывается чужое: переписка, документы коллег, персональные данные. Что из этого попадает в архив и как это ограничивать — в разборе записи экрана как памяти ИИ и в правилах редактирования и исключений при распознавании.

#Частые вопросы

#Почему распознанный текст ищется хуже, чем набранный руками?

Из-за смешения алфавитов, ошибок в отдельных символах и слипшихся строк. Поиск по точному совпадению на таком тексте работает плохо; нужен либо поиск по подстроке, либо нормализация при индексации.

#Насколько OCR нагружает компьютер?

Классические движки заметно легче языковых моделей и работают на процессоре. Нагрузка возникает не от одного распознавания, а от их количества: непрерывный захват экрана — это десятки тысяч распознаваний в день.

#Можно ли распознавать текст только в нужной области экрана?

Можно, и это стоит делать: быстрее и меньше лишнего в архиве. Ограничение области — простейший способ снизить объём случайно захваченного.

#Что делать с рукописным текстом?

Классические движки распознают его плохо. Здесь как раз уместнее модель зрения — что доступно локально, разобрано в обзоре vision-моделей локально. Оговорка та же: проверяйте результат, потому что такая модель додумывает неразборчивое, а не помечает его как нечитаемое.

Остальные термины — в глоссарии терминов ИИ.

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт