Что такое OCR простыми словами: как машина читает буквы на фотографии

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

Гайды по нейросетям
Что такое OCR простыми словами: как машина читает буквы на фотографии — иллюстрация к статье
10 мин чтения

13

Что такое OCR простыми словами

Кратко:

  • OCR (Optical Character Recognition, оптическое распознавание символов) превращает буквы, нарисованные пикселями на картинке, в текст, который можно выделить, скопировать и найти поиском.
  • Классический OCR-движок сравнивает форму каждого знака с эталоном и не понимает, что читает, — отсюда путаница нуля с буквой «О» и рассыпающийся курсив.
  • Мультимодальная нейросеть достраивает спорное место по смыслу фразы, поэтому вытягивает плохой снимок и почерк, но не собирает файл с сохранённой вёрсткой.
  • Блик, наклон камеры и тень поперёк строки портят результат сильнее, чем выбор инструмента.

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

Технология старше, чем кажется. Первую читающую машину запатентовал Густав Таушек ещё в 1929 году, задолго до компьютеров в нынешнем понимании (история вопроса — в обзоре Биорг). С тех пор менялся в основном способ, которым система решает, какая перед ней буква.

Как машина находит буквы на картинке

Системы устроены по-разному, но последовательность у большинства примерно одна.

  1. Обработка снимка. Изображение выравнивают, поднимают контраст, гасят шум, отделяют страницу от фона. Здесь же чинится перспектива, если кадр снят под углом.
  2. Разметка страницы. Система решает, где текст, где иллюстрация, где таблица и в каком порядке читать колонки. Именно на этом шаге газетная полоса чаще всего «съезжает»: порядок колонок восстанавливается неверно, и текст перемешивается.
  3. Распознавание знаков. Найденный фрагмент сопоставляется с тем, что система знает о буквах. Классический движок работает с формой отдельного символа, современный — со словом или строкой целиком.
  4. Сборка результата. Символы склеиваются в слова, слова — в строки и абзацы. Подключается словарь: если получилось «догвор», система понимает, что такого слова нет, и правит.

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

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

Почему почерк даётся машине тяжелее печати

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

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

Для рукописного ввода в отрасли даже завели отдельное имя — ICR, intelligent character recognition. Разница тут содержательная: обычный OCR ищет форму знака, а ICR вынужден восстанавливать слово по соседям, потому что по форме оно неопределимо.

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

Три способа распознать текст и зона силы каждого

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

Классические OCR-программы. Типичный представитель класса — ABBYY FineReader, но принцип общий для всех: программа обрабатывает многостраничные документы, восстанавливает вёрстку и отдаёт готовый файл. Это её зона силы и одновременно причина существования: если нужно превратить двести отсканированных страниц в редактируемый документ с сохранённым макетом, конвертер справится с этим быстрее любого диалога с моделью. Слабость там же, где у любого посимвольного разбора: кривой кадр, текст поверх фона, почерк.

Встроенные сканеры. Умная камера в приложении «Яндекс» распознаёт печатный текст со снимка, переводит надписи и умеет сохранять документ в PDF, TXT или картинку — что именно она делает, описано в справке Яндекса. На iPhone похожую роль играет «Живой текст»: он подсвечивает текст прямо в приложении «Фото», и слова можно выделить пальцем, как в обычном документе. Ничего устанавливать не нужно, работает мгновенно — это лучший способ выхватить строку с вывески, цену с ценника или адрес с экрана. Дальше начинаются границы: длинный документ, сложная вёрстка и любое неочевидное место такому сканеру не по зубам, а спросить его не о чем — он ничего не объясняет.

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

OCR-программаСканер в телефонеНейросеть
Сильна намногостраничном печатном документе, пакете файлов, сохранении вёрсткикоротком фрагменте здесь и сейчас: вывеска, ценник, строка с экранаплохом снимке, почерке, смешанном тексте, вопросах по содержимому
Спотыкается напочерке, кривом кадре, тексте поверх фонадлинном документе, сложной вёрстке, спорных местахпакетной обработке, точной вёрстке, выгрузке файла
Что на выходефайл с текстовым слоемтекст в буфере обменатекст в чате, с которым можно продолжить работу
Сколько стоит времениустановка и настройканисколько, уже в телефоненисколько, работает в браузере

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

Что в снимке ломает распознавание

Инструмент влияет на результат меньше, чем качество кадра. Причём каждая типичная ошибка съёмки ломает распознавание по своей причине, и понимание этой причины экономит вторую попытку.

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

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

Тень от собственной руки или телефона создаёт границу яркости поперёк строки. Система принимает эту границу за элемент изображения и пытается что-то с ней сделать, обычно во вред.

Расфокус и низкое разрешение размывают границы между знаками. «Ш» и «Ill», «сл» и «м» отличаются несколькими пикселями, и когда этих пикселей нет, различить их нельзя ни по форме, ни по контексту.

Обрезанный край восстановлению не подлежит вообще. Чего нет на снимке, того не будет и в тексте, — при этом система обычно не сообщает о пропаже, а просто отдаёт то, что попало в кадр.

Проверка перед отправкой занимает секунду: увеличьте снимок и посмотрите на самое мелкое место. Если вы сами не разбираете там буквы, машина тоже не разберёт — вопрос только в том, честно ли она об этом скажет.

Что меняется, когда снимок читает нейросеть

Заметнее всего разница проявляется уже после распознавания. Конвертер отдаёт файл и на этом заканчивает работу: дальше вы открываете документ и разбираетесь сами. Модель возвращает текст в диалог, и распознавание становится первым шагом работы, а не её концом.

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

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

Четыре ситуации и подходящий инструмент

Архив сканов, который нужно оцифровать целиком. Двести страниц с сохранением макета — задача конвертера, а не диалога с моделью. Нейросеть здесь проиграет по скорости и не отдаст файл.

Строка с экрана или с вывески. Телефон в руке уже умеет это делать: Умная камера на Android, «Живой текст» на iOS. Открывать что-то ещё ради одной фразы смысла нет.

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

Снимок, с содержимым которого надо что-то сделать. Если на фото задача из учебника — нужен не текст, а решение, и это решение задачи по фото. Если на фото прайс или ведомость и результат нужен структурой — таблицы и Excel. Если текст на снимке иностранный, распознавание и перевод лучше разделить на два шага: сначала прочитать как есть, потом отправить результат в перевод с английского на русский. Так видно исходную фразу и заметно, если модель что-то додумала.

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

Чем OCR отличается от ICR? OCR работает с печатным текстом, ICR (intelligent character recognition) — с рукописным. Разница лежит в самой постановке задачи. У печатного шрифта конечный набор форм, и знак опознаётся по форме. У почерка эталона нет, поэтому слово приходится восстанавливать по соседям и по смыслу. Из-за этого система, отлично читающая книгу, может не справиться с тетрадью, и наоборот. В обиходе аббревиатурой OCR называют оба случая, хотя механики за ними стоят разные.

Почему распознавание путает ноль с буквой «О», а единицу с «l»? Потому что классический движок сравнивает форму знака с эталоном и не понимает смысла того, что читает. Формы у этих пар почти совпадают, а разница между ними лежит в контексте: в артикуле скорее ноль, в фамилии скорее «О». Системе, которая работает посимвольно, этот контекст недоступен. Модель, читающая фразу целиком, ошибается на таких парах реже — но и она беззащитна там, где контекста нет в принципе, то есть в тех же номерах и суммах.

Что такое текстовый слой в PDF и как понять, нужно ли распознавание? Текстовый слой — это символы, записанные в файл отдельно от изображения страницы. Если он есть, текст выделяется мышкой и находится поиском, а распознавание не нужно вовсе. Если PDF собран из фотографий или сканов, слоя нет: страница внутри — картинка. Проверить можно на глаз, попробуйте выделить строку. Не выделяется, значит перед вами скан, и текст оттуда достаётся только распознаванием.

Почему «Живой текст» на айфоне иногда не находит текст на фотографии? Чаще всего функция просто выключена: тумблер живёт в «Настройках» в разделе «Основные» → «Язык и регион». Если она включена, а текст всё равно не подсвечивается, дело обычно в самом снимке — мелкий шрифт, наклон, блик или язык, который система не поддерживает. Встроенные сканеры рассчитаны на короткий и чёткий фрагмент; когда снимок сложный, надёжнее отправить его туда, где распознавание опирается на смысл, а не только на форму букв.

Что такое OCR простыми словами: как машина читает буквы на фотографии — Veruna AI