2014-12-21 3 views
8

Я пытаюсь извлечь буквенно-цифровые символы (a-z0-9), которые не образуют смысловые слова из изображения, которое берется с потребительской камерой (включая мобильные телефоны). Символы имеют одинаковый размер и тип шрифта и не формируются. Фактическая обработка выполняется под Windows.Улучшение качества обнаружения Tesseract

На следующем рисунке показан необработанный ввод: Original image

После обработки перспективного я применять следующие с OpenCV:

  • Преобразование из RGB в серый
  • Применить cv::medianBlur для удаления шума
  • Преобразование изображения в двоичное с использованием адаптивного порогового значения cv::adaptiveThreshold
  • Я знаю количество строк и столбцов сетки. Таким образом, я просто извлекаю каждую ячейку сетки, используя эту информацию.

После всех этих шагов, я получаю изображения, которые выглядят похоже на них:

enter image description here

enter image description here

enter image description here

Тогда я бегу Tesseract (последняя версия SVN с последними данными обучения) по каждому выделенному изображению ячейки индивидуально (я пробовал разные -psm и -l значения):

tesseract.exe -l eng -psm 11 sample.png outtext 

Результаты, полученные тессеракта не очень хорошо:

  • Большинство символов не распознаются.
  • Линии сетки иногда интерпретируются как символы «l» или «i».

я уже экспериментировал с морфологическими операциями (открыть, закрыть, подрывать, расширяются) и заменить адаптивную пороговую с Оцу пороговым (THRESH_OTSU), но результаты еще хуже.

Что еще я мог бы улучшить качество распознавания? Или существует даже лучший способ извлечения символов, кроме использования tesseract (например, сопоставление шаблонов?)?

Edit (21-12-2014): Я тестировал простое согласование шаблона (с использованием нормированной взаимной корреляции и LMS, но с еще худшими результатами). Но я сделал огромный шаг вперед, извлекая каждый символ, используя findCountours, а затем запустил tesseract только с одним символом и опцией -psm 10, которая интерпретирует каждое входное изображение как один символ. Additonaly Я удаляю не буквенно-цифровые символы на этапе последующей обработки. Первые результаты обнадеживают с показателями обнаружения на 90% и выше. Основная проблема - неправильные обозначения символов «9» и «g» и «q».

С уважением,

ответ

1

Как я говорю here, вы можете сказать, тессеракт обратить внимание на «почти одинаковых» символов. Кроме того, есть некоторая опция в tesseract, которая не поможет вам в вашем примере. Например, «Pocahonta5S» станет, в большинстве случаев, «PocahontaSS», потому что это число в буквенном слове. Вы можете так видеть.

Что касается предварительной обработки, вам лучше использовать фильтр заточки. Не забывайте, что tesseract всегда будет применять фильтр Otsu перед чтением чего-либо. Если вы хотите получить хороший результат, то резкость + Adaptive Threshold с некоторыми другими фильтрами - хорошие идеи.

1

Я рекомендую использовать OpenCV в сочетании с tesseract.

Проблема в ваших входных изображениях для tesseract - это несимвольные области на вашем изображении.

подходного себя

Чтобы избавиться от них, я хотел бы использовать функцию OpenCV findContour получить все контуры в вашем бинарном изображении. Затем определите некоторые критерии, чтобы лимитировать несимвольные регионы. Например, возьмите только те области, которые находятся внутри изображения и не касаются границы, или только для областей с определенной областью области или с определенным отношением высоты к ширине. Найдите какие-то функции, которые позволят вам различать характер несимметричных контуров. После этого удалите эти несимвольные области и обработайте изображения вперед до tesseract.

Подобно тому, как идея для общего тестирования этого подход:

Исключите регионы несимвольных вручную (Gimp или краски, ...) и дают изображение в тессеракт. Если результат соответствует вашим экспатриантам, вы можете попытаться устранить несимвольные регионы с предложенным выше методом.

Смежные вопросы