Распознавание символов (алгоритм распознавания)
Я работаю над проектом, в котором я должен разработать Алгоритм OCR (мне нужно прочитать текст из изображения, а затем преобразовать его на другой язык). Моя первая задача - получить текст из изображения.
Шаги для выполнения первой задачи.
- Загрузка любого формата изображения (bmp, jpg, png) из заданного источника. Затем преобразуйте изображение в оттенки серого и добавьте его в бинарную форму с использованием порогового значения (алгоритм Otsu).//завершено (как удалить шум из выходного изображения???)
Результаты
![Input Image]()
![Output Image]()
-
Обнаружение функций изображения, таких как разрешение и инверсия. Чтобы мы могли, наконец, преобразовать его в выпрямленное изображение для дальнейшей обработки. (завершил код поворота изображения, но не смог обнаружить угол изображения, вокруг которого мы должны вращать изображение, поэтому все еще работаем над частью обнаружения угла)
-
Обнаружение и удаление линий. Этот шаг необходим для улучшения анализа макета страницы, для достижения лучшего качества распознавания для подчеркнутого текста, для обнаружения таблиц и т.д. (Решено завершить эту часть в конце)
-
Анализ макета страницы. На этом этапе я пытаюсь определить текстовые зоны, присутствующие на изображении. Так что только эта часть используется для распознавания и остальной части региона, не учитывается.
-
Обнаружение текстовых строк и слов. Здесь нам также нужно позаботиться о разных размерах шрифта и небольших пробелах между словами.
-
Распознавание символов. Это основной алгоритм OCR; образ каждого символа должен быть преобразован в соответствующий код символа. Иногда этот алгоритм создает несколько кодов символов для неопределенных изображений. Например, распознавание изображения персонажа "I" может производить "I", "|" Коды "1", "l" и окончательный код символа будут выбраны позже.
-
Сохранение результатов в выбранный формат вывода, например, PDF с возможностью поиска, DOC, RTF, TXT. Важно сохранить исходный макет страницы: столбцы, шрифты, цвета, рисунки, фон и т.д.
Так что мне нужна помощь в part6.I завершили часть обнаружения линии (получите n изображений из абзаца, содержащего n строк), но застряли в следующей части, получая слова и распознавание символов. Если вы знаете хорошие ссылки, связанные с OCR и частью распознавания символов то пожалуйста, напишите здесь.
Для распознавания символов я собираюсь использовать asprise (библиотека Java) http://asprise.com/product/ocr/index.php?lang=java
Ответы
Ответ 1
Чтобы определить угол поворота, используйте Преобразование Hough.
При уменьшении шума замените любой пиксель, у которого нет соседнего (север, восток, юг или запад) с тем же цветом (аналогичный цвет с использованием порога допуска), с среднее число соседей.
Найдите вертикальные белые зазоры для определения размещения. Нарежьте вдоль вертикального зазора. Для каждого фрагмента теперь выполняем поиск горизонтальных зазоров и среза. Если срезы имеют одинаковую (аналогичную) высоту, вы находитесь на линейном уровне. В противном случае повторите вертикальную/горизонтальную нарезку, пока у вас не останется только строк. Последний шаг - это снова вертикальная нарезка, дающая вам одиночные символы (или лигатуры в некоторых случаях). Длинные и узкие или короткие и широкие срезы - это линии.
Сравните фрагменты символов с библиотекой символов. Если производительность не является основной проблемой, попробуйте найти символы в разных библиотеках шрифтов, пока не сможете определить используемый шрифт. Затем придерживайтесь этого шрифта для распознавания символов.
В исходном изображении замените каждый символ цветом фона, который определяется интерполяционными пикселями, которые не являются частью символа для каждого пикселя символа. Это дает вам фоновое изображение, если оно есть.
Ответ 2
Вы должны использовать Adaptive treshold вместо метода Otsu. Я думаю, что будет полезно http://www.csse.uwa.edu.au/~shafait/papers/Shafait-efficient-binarization-SPIE08.pdf
Этот метод автоматически удалит шум.
Ответ 3
Вы можете посмотреть Tesseract для части распознавания символов.
Ответ 4
Вы можете использовать potrace для уменьшения шума
Он векторизовывает данное изображение (bmp) и преобразует его в svg, pdf и некоторые другие форматы.
http://potrace.sourceforge.net/potrace.html