Очистка изображения перед приложением OCR

Я экспериментировал с PyTesser последние пару часов, и это действительно хороший инструмент. Пара вещей, которые я заметил о точности PyTesser:

  • Файл с иконками, изображениями и текстом - точность 5-10%
  • Файл только с текстом (изображения и значки стираются) - точность 50-60%
  • Файл с растяжкой (и это лучшая часть) - файл растяжения в 2) выше по оси x или y, увеличила точность на 10-20%

Таким образом, очевидно, что Pytesser не заботится о размерности шрифта или растяжении изображения. Хотя есть много теорий для чтения об обработке изображений и OCR, существуют ли какие-либо стандартные процедуры очистки изображений (кроме стирания значков и изображений), которые необходимо выполнить перед применением PyTesser или других библиотек независимо от языка?

...........

Ничего себе, этот пост уже довольно старый. Я снова начал свое исследование в OCR за последние пару дней. На этот раз я бросил PyTesser и вместо этого использовал Tesseract Engine с ImageMagik. Придя прямо к делу, вот что я нашел:

1) You can increase the resolution with ImageMagic(There are a bunch of simple shell commands you can use)
2) After increasing the resolution, the accuracy went up by 80-90%.

Таким образом, Tesseract Engine, без сомнения, лучший механизм OCR с открытым исходным кодом на рынке. Здесь не требуется чистка изображений. Суть в том, что он не работает с файлами с большим количеством встроенных изображений, и я не могу найти способ обучить Тессеракт игнорировать их. Также макет текста и форматирование в изображении имеют большое значение. Он отлично работает с изображениями только с текстом. Надеюсь, это помогло.

Ответ 1

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

http://www.fmwconcepts.com/imagemagick/textcleaner/index.php

ОРИГИНАЛ ORIGINAL

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

After Pre-Processing with given arguments.

Ответ 2

Как оказалось, в tesseract вики есть статья, которая наилучшим образом отвечает на этот вопрос:


(первоначальный ответ, только для записи)

Я не использовал PyTesser, но я провел несколько экспериментов с tesseract (версия: 3.02.02).

Если вы вызываете тессеракт на цветном изображении, то сначала он применяет глобальный метод Оцу для его преобразования в двоичную форму, а затем фактическое распознавание символов запускается на двоичном (черно-белом) изображении.

Изображение из: http://scikit-image.org/docs/dev/auto_examples/plot_local_otsu.html

Otsu's threshold illustration

Как видно, "глобальное Оцу" не всегда может дать желаемый результат.

Чтобы лучше понять, что "видит" tesseract, нужно применить метод Otsu к вашему изображению, а затем посмотреть на полученное изображение.

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

Кто-то любезно опубликовал api-документы для tesseract, поэтому можно проверить предыдущие утверждения о конвейере обработки: ProcessPageGetThresholdedImageThresholdToPixOtsuThresholdRectToPix

Ответ 3

Я знаю, что это не идеальный ответ. Но я хотел бы поделиться с вами видео, которое я видел в PyCon 2013, которое может быть применимо. Это немного лишено деталей реализации, но просто может быть вам какое-то руководство/вдохновение о том, как решить/улучшить вашу проблему.

Ссылка на видео

Ссылка на презентацию

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

На боковой ноте. Совершенно важная вещь с Tesseract. Вам нужно обучить его, иначе он не будет почти таким же хорошим/точным, каким он способен.