Без загрузки, 100% локально, без аккаунта

Статья

Улучшение точности OCR: подготовьте изображение перед распознаванием текста

Точность OCR определяется качеством исходного изображения. Кривой, низкоконтрастный, зашумлённый скан даст искажённый текст вне зависимости от того, насколько хорош движок. Ниже описано, что реально влияет на результат, в правильном порядке выполнения, полностью в браузере.

Почему OCR плохо справляется с реальными сканами

Движок OCR, например Tesseract, обучен на чистом, горизонтальном, высококонтрастном тексте. Он делит страницу на строки, строки на слова, слова на символы и сопоставляет каждый символ с обученной моделью. Реальные сканы нарушают эти предположения: страница наклонена на несколько градусов, освещение неравномерное, разрешение низкое, а край планшета сканера или соседняя страница добавляют тёмный шум. Каждая из этих проблем заставляет шаг сегментации строк и символов давать неверный результат, а ошибка сегментации тянет за собой ошибки в символах. Решение редко состоит в выборе другого движка: нужно подготовить изображение так, чтобы предположения движка выполнялись. На практике предобработка влияет на точность больше, чем выбор конкретного OCR-движка.

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

Начните с разрешения: цельтесь в 300 DPI

Tesseract лучше всего работает при разрешении около 300 DPI для обычного основного текста. Ниже примерно 200 DPI штрихи каждого символа размываются и сливаются с соседними, точность резко падает. Если вы управляете сканером, установите 300 DPI в первую очередь: это выбор с наибольшим влиянием на результат. Если в вашем распоряжении только низкоразрешённое изображение, увеличение масштаба не создаёт детали, которых никогда не было, но умеренное увеличение всё же может помочь движку разделить касающиеся символы, предоставив сегментации больше пикселей. Очень мелкий шрифт выигрывает от 400 до 600 DPI; выше этого значения объём файла растёт без прироста точности. Если источником служит PDF, сначала растеризуйте каждую страницу в изображение с нужным DPI, затем запускайте OCR на этом изображении.

Правильная ориентация страницы

Если страница повёрнута на 90, 180 или 270 градусов, движок читает текст боком или вверх ногами и выдаёт бессмысленный результат. У Tesseract есть проход определения ориентации и скрипта (OSD), который может угадать поворот, но он ненадёжен на разреженном тексте, формах или страницах, заполненных изображениями. Самостоятельный поворот страницы в вертикальное положение исключает неопределённость. Этот шаг не требует потерь качества и выполняется мгновенно: поворот на кратное 90 градусов лишь переназначает существующие пиксели на новые позиции без передискретизации. Выполняйте его до исправления перекоса, так как алгоритм исправления перекоса предполагает, что текст уже примерно горизонтален.

Исправление перекоса: выровняйте небольшой наклон

Даже наклон в 2-3 градуса, возникающий при подаче страницы в сканер с небольшим перекосом, снижает качество OCR: шаг поиска горизонтальных строк делит одну строку текста на две или объединяет две строки в одну. Исправление перекоса измеряет доминирующий угол текстовых строк (как правило, с помощью анализа профиля проекций или преобразования Hough) и поворачивает страницу в горизонтальное положение. В отличие от поворота на 90 градусов, исправление перекоса предполагает произвольный поворот на малый угол, поэтому выполняется передискретизация пикселей и добавляется небольшое размытие. Этот компромисс почти всегда оправдан, поскольку выровненные строки сегментируются чисто, а прирост точности значительно превышает лёгкое размытие. Исправляйте перекос после коррекции ориентации и до обрезки.

До и после исправления наклона: страница текста, наклонённая на несколько градусов слева, выровненная по горизонтали справа так, что строки расположены горизонтально.

Обрежьте до текста и уберите шум

Всё, что не является нужным текстом, это шум, который движок может неверно интерпретировать: тёмная рамка планшета сканера, часть соседней страницы, угол со скрепкой, палец или отверстие от дырокола. Обрезка до текстового блока убирает ложные цели, что одновременно повышает точность и ускоряет распознавание, так как движку приходится анализировать меньшую область. Для многоколоночного документа обрезка (или запуск OCR по одной колонке за раз) также предотвращает ситуацию, когда движок читает поперёк межколонного пробела и смешивает две колонки в одну искажённую строку. Выполняйте обрезку после исправления перекоса, чтобы содержимое располагалось ровно в кадре.

Контраст, оттенки серого и как работает бинаризация

OCR в конечном счёте работает с бинарным изображением: каждый пиксель определяется как чернила или бумага. Tesseract выполняет это внутренне методом Otsu, который выбирает единый глобальный порог из гистограммы изображения. Метод хорошо работает при равномерном освещении и хорошем контрасте, но даёт сбой, когда тень или цветной фон делают один угол темнее, чем ожидает порог. Надёжные способы улучшения: перевод в оттенки серого (чтобы цветовой оттенок не сбивал порог) и выравнивание освещения так, чтобы вся страница находилась по одну сторону от него. Умеренное повышение контраста помогает при бледном тексте. Обычно контрпродуктивна жёсткая ручная бинаризация: если применить пороговое преобразование с неверным значением, стираются слабые штрихи, которые собственный проход движка сохранил бы. Пусть движок выполняет бинаризацию сам, а ему предоставьте ровное изображение в оттенках серого. Sunasty предоставляет инструмент перевода PDF в оттенки серого; для тонкой настройки контраста настольный редактор по-прежнему лучше, однако равномерное освещение в момент сканирования важнее любого ползунка.

Выберите правильный язык и проверьте результат

Tesseract загружает отдельный файл обученных данных для каждого языка и скрипта. Запуск английской модели на французском или греческом тексте даёт устранимые ошибки, особенно на символах с диакритикой или нелатинских символах, поэтому выбирайте язык, соответствующий документу. Наконец, относитесь к результату OCR как к черновику, а не к окончательному ответу: движок не может знать, правильно ли написано имя или является ли 0 нулём, а не буквой O. Проверяйте числа, имена собственные и всё, что важно с юридической или финансовой точки зрения. Для таблиц и многоколоночных макетов ожидайте ручного исправления структуры, поскольку OCR возвращает поток распознанных символов, а не восстановленный макет.

Инструменты из этой статьи

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

Улучшает ли масштабирование размытого скана точность OCR?

Само по себе незначительно. Масштабирование не восстанавливает детали, которые скан никогда не захватывал, поэтому размытое изображение 100 DPI останется размытым. Умеренное увеличение может помочь движку разделить касающиеся символы, предоставив сегментации больше пикселей, но повторное сканирование при 300 DPI намного эффективнее любого масштабирования.

Стоит ли сначала перевести изображение в чисто чёрно-белое?

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

Мой текст расположен боком. OCR автоматически повернёт его?

Иногда. У Tesseract есть проход определения ориентации, но он ненадёжен на формах, разреженном тексте или страницах с большим количеством изображений. Самостоятельный поворот страницы на 90, 180 или 270 градусов не требует потерь качества и исключает неопределённость, поэтому является более надёжным вариантом.

При этом мой документ загружается на сервер?

Нет. Поворот, исправление перекоса, обрезка, перевод в оттенки серого и само OCR выполняются в вашем браузере. OCR использует сборку Tesseract на WebAssembly, а обученные языковые данные загружаются один раз и кешируются. Ваш файл никогда не покидает устройство.

Источники