Очистка изображения перед приложением 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, поэтому можно проверить предыдущие утверждения о конвейере обработки: ProcessPage → GetThresholdedImage → ThresholdToPix → OtsuThresholdRectToPix
Ответ 3
Я знаю, что это не идеальный ответ. Но я хотел бы поделиться с вами видео, которое я видел в PyCon 2013, которое может быть применимо. Это немного лишено деталей реализации, но просто может быть вам какое-то руководство/вдохновение о том, как решить/улучшить вашу проблему.
Ссылка на видео
Ссылка на презентацию
И если вы решите использовать ImageMagick, чтобы немного обработать исходные изображения. Здесь возникает вопрос, который указывает на хорошие привязки python для него.
На боковой ноте. Совершенно важная вещь с Tesseract. Вам нужно обучить его, иначе он не будет почти таким же хорошим/точным, каким он способен.