Блог

Почему OCR возвращает неверное слово, а не ошибку

Автор InSnap · Опубликовано · ocr, text recognition, accuracy, screenshot

Почему OCR возвращает неверное слово, а не ошибку

Распознавание текста почти никогда не говорит, что не справилось: оно выдаёт целое предложение с одним неверным символом — тем самым. Где это происходит и как это поймать.

Копировать текст со скриншота обычно получается, и в этом-то и проблема. Когда это не выходит, провал почти никогда не бывает громким. Нет красного подчёркивания, нет «не удалось распознать текст», нет пустого поля. Есть предложение, которое читается совершенно нормально — кроме одного символа, и этот символ меняет смысл.

Поэтому люди вставляют номер заказа, отличающийся на одну цифру, ключ конфигурации с неверной буквой или фразу в документе с символом, которого там никогда не было. Распознавание не падало. Оно уверенно угадало.

Распознавание — это классификатор, а не синтаксический анализатор

Полезно знать, что движок на самом деле делает. Распознавание текста разбивает изображение на строки, затем на области, похожие на символы, затем прогоняет каждую область через классификатор, который возвращает наиболее вероятный символ. Этот классификатор никогда не говорит «не знаю». Он всегда возвращает ближайшее совпадение, которое смог найти.

При хорошем качестве входа это ближайшее совпадение верно почти везде. При плохом качестве ближайшее совпадение — другой символ, который случайно выглядит похоже: a, которая могла бы быть o, 1, которая могла бы быть l, или один CJK-иероглиф, который легко спутать с соседним на общий компонент. Движок не имеет понятия, что ошибся.

ЗАПУСК РАСПОЗНАВАНИЯ ТЕКСТА НА СКРИНШОТЕ

Что делает вход «плохим»

Значение имеют четыре вещи, примерно в таком порядке:

  1. Высота текста в пикселях. У мелкого текста меньше пикселей для классификации. Это главное.
  2. Набор символов. Китайские, японские и корейские иероглифы плотные; несколько потерянных пикселей меняют и форму, и сам символ. Латинские буквы проще и выдерживают дольше.
  3. Сглаживание и масштабирование. Любое изменение размера размывает края каждого штриха. Одного хватает; три, наложенных друг на друга, теряют форму.
  4. Контраст и фон. Серое на белом и светлое на тёмном одинаково ослабляют края. Градиенты и фотографии под текстом тоже.

Большинство жалоб на сбои происходит из-за первого пункта, и исправление обычно в том, чтобы снять больше пикселей, а не стараться сильнее.

В InSnap нет отдельной настройки точности. Он работает по выбранным пикселям: у скриншота плотного интерфейса в 1x каждая строка уже имеет высоту, с которой её нарисовал экран, а снимок Retina в 2x — вдвое больше. Разница между ними для абзаца текста часто и есть разница между правильным и правдоподобным, но неверным.

Рассматривание детали с лупой

Где проходит практическая граница

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

Китайскую строку и английскую строку отрисовали в пяти высотах и каждый раз распознавали заново. Красным помечены символы, отличающиеся от оригинала.

Одна и та же строка в пяти высотах текста, распознанная заново в каждой

Из этого следуют две вещи. Во-первых, строка верна, пока вдруг не перестаёт: плавной деградации нет, есть размер, ниже которого появляется неверный символ. Во-вторых, две письменности ломаются в разных точках. Здесь латинский текст сорвался раньше, а китайский держался дольше — обратное тому, что большинство людей предполагает из «китайский — сложнее».

Когда то же предложение распознают в ещё меньших размерах, вывод ломается по-другому. Не пусто, не абракадабра, а настоящее предложение с настоящими, но неверными иероглифами:

Сбои при 5–7 px — это настоящие слова, просто не те

Полезнее вторая картинка. Она показывает, как на самом деле выглядит неверный результат: недостаточно очевидный, чтобы заметить, и недостаточно тонкий, чтобы быть ничем.

Как поймать это до того, как оно попадёт в документ

Распознавание не может сказать, что сомневается, поэтому проверять нужно там, где неверный символ дорого стоит.

  • Проверяйте всё с цифрами и идентификаторами. Номера заказов, лицензионные ключи, строки версий, суммы в счетах. Одна неверная цифра невидима в контексте и фатальна дальше по цепочке.
  • Проверяйте длину. Идентификатор из двух символов, вернувшийся трёхсимвольным, или наоборот — надёжный сигнал, что что-то пошло не так.
  • Проверяйте необычные символы. Вертикальные черты, пробелы, неразрывные пробелы, путаница кириллицы с латиницей. Если текст — код, вставка в моноширинное поле делает это очевидным.
  • Проверяйте края. Символы в начале или в конце строки первыми обрезаются при обнаружении. Если строка обрывается резко, посмотрите на последний или два последних символа.
  • Переснимите в большем размере, а не увеличивайте. Увеличение размытой строки не создаёт деталей и редко исправляет неверный символ. Пересъёмка той же области в 2x или увеличение источника перед снимком — исправляет.

Практическое следствие: скриншот, снятый с широким выделением при хорошем разрешении, распознаётся легче, чем крошечный, обрезанный впритык. Обрезка уменьшает шум, но уменьшение уменьшает информацию, а информацией питается классификатор.

На что можно полагаться

Честное резюме:

СитуацияОбычно в порядкеОбычно нет
Английский и текст латиницей обычного размера интерфейсаДа—
Китайский обычного размера интерфейсаДа—
Текст ниже примерно 10 px по высоте—Нет
Японская кана, корейский, русский—Нет
Текст поверх фото или градиентаИногдаИногда
Скриншоты, сильно изменённые в размере—Нет

Локальное распознавание InSnap хорошо справляется с китайским, английским и языками на латинице, включая буквы с диакритикой. Оно ненадёжно для японской каны, корейского и русского. Это свойство встроенной модели, а не настройка, поэтому честный ход для этих письменностей — проверять всё, что вы копируете.

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

Говорит ли распознаватель текста, когда сомневается?

Нет. Классификатор символов всегда возвращает лучшую догадку, а в интерфейсе нет отдельного индикатора уверенности при копировании. Безопасно считать, что любой возвращённый символ — наиболее вероятный, а не гарантированный.

Можно ли исправить неверный символ, запустив распознавание ещё раз?

Обычно нет: вход не изменился, а модель детерминирована на одних и тех же пикселях. Исправление в том, чтобы изменить вход: переснять ту же область в большем размере или увеличить источник перед снимком, а затем распознать заново.

Почему работает на одном скриншоте и не работает на другом с той же страницы?

Чаще всего дело в размере текста в пикселях, а он зависит от масштаба дисплея и от того, снят ли экран в 1x или 2x. Та же страница при другом зуме или на другом дисплее может пересечь границу размера.

Читает ли он текст внутри изображений и фотографий?

Только если текст крупный, чёткий и на однотонном фоне. Текст поверх фотографии, градиента или сложной иллюстрации — место, где неверные символы появляются чаще всего.

Нужно ли подключение к интернету, чтобы это работало?

Нет. Распознавание выполняется локально, включая шаг копирования. Ничего не загружается, и точность офлайн та же.

Как улучшить распознавание текста на скриншоте

Качество распознавания зависит от пикселей, которые вы даёте. Обрезайте плотно, сохраняйте разрешение, избегайте наклона и пёстрого фона и помните об ограничениях по языкам.

Как скопировать текст со скриншота или изображения на Mac и Windows

Как превратить слова со скриншота в текст: встроенные средства Mac и Windows, быстрое распознавание на устройстве в InSnap и его языковые ограничения.

Как скопировать текст из видео или с паузы

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

Как обновляется InSnap и как проверить обновления вручную

Автоматические проверки, пункт меню и разница между установленной и портативной версиями для Windows. Что сохраняется при обновлении и что делать, если оно не удалось.

Следующий скриншот — в одном сочетании клавиш.

macOS 14.4+ (Apple Silicon и Intel) · Windows 10+ (64-разрядная)