Я создаю OCR на основе Java. Моя цель - извлечь текст из видеофайла (постобработка).
Это был трудный поиск, пытаясь найти бесплатное OCR с открытым исходным кодом, которое работает исключительно на Java. Я обнаружил, что Tess4J является единственным популярным вариантом, но, учитывая потребность в собственном интерфейсе, я как-то почувствовал склонность к разработке алгоритма с нуля.
Мне нужно создать надежное OCR, которое правильно идентифицирует английские алфавиты (только компьютерные шрифты, а не рукописный текст) с разумной точностью, учитывая, что область, в которой текст лежит в видеокадре, предварительно определен. Мы также можем предположить, что цвет текста указан.
Что я сделал до сих пор:
(Вся обработка изображений выполняется с использованием привязок Java для openCV)
-
Я извлек функции для обучения моего классификатора, используя:
а. Пиксельная интенсивность, после сэмплирования изображения символа до 12 X 12. (144 функциональных вектора)
В. Габор вейвлет-преобразование на 8 разных углов (0, 11,25, 22,5... и т.д.) И вычисленная энергия с использованием среднеквадратичного значения сигнала для всех этих углов. (8 векторов признаков)
A + B дает мне вектор-функцию изображений. (Всего 152 функциональных вектора)
У меня есть 62 класса для классификации, а именно: 0,1,2... 9 | a, b, c, d... y, z | А, В, С, D... Y, Z
Я тренирую классификатор, используя 20 x 62 выборок (20 для каждого класса).
-
Для классификации я использовал следующие два подхода:
а. ANN с 1 скрытым слоем (из 120 узлов). Входной уровень имеет 152 узла, а выход - 62. Скрытый и выходной уровни имеют функцию активации сигмоида, и сеть обучается с использованием Пространственного обратного распространения.
В. kNN для всех 152 размеров.
Где я стою:
k-Ближайший поиск соседей оказывается лучшим классификатором, чем нейронная сеть (до сих пор). Однако даже с kNN мне сложно классифицировать такие письма, как: ИЛИ .
Кроме того, он классифицирует как Z..., чтобы назвать несколько аномалий.
Что я ищу:
Я хочу узнать следующее:
-
Почему работает ANN? Какую конфигурацию сети следует использовать для повышения производительности? Можем ли мы точно настроить ANN для выполнения лучше, чем поиск kNN?
-
Какие еще векторы функций я могу использовать, чтобы сделать OCR более надежным?
Любые другие предложения по оптимизации производительности приветствуются.