Подтвердить что ты не робот

Улучшение алгоритма OCR

Я создаю 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 для каждого класса).

  1. Для классификации я использовал следующие два подхода:

    а. ANN с 1 скрытым слоем (из 120 узлов). Входной уровень имеет 152 узла, а выход - 62. Скрытый и выходной уровни имеют функцию активации сигмоида, и сеть обучается с использованием Пространственного обратного распространения.

    В. kNN для всех 152 размеров.

Где я стою:

k-Ближайший поиск соседей оказывается лучшим классификатором, чем нейронная сеть (до сих пор). Однако даже с kNN мне сложно классифицировать такие письма, как: 6 ИЛИ m.

Кроме того, он классифицирует 2 как Z..., чтобы назвать несколько аномалий.

Что я ищу:

Я хочу узнать следующее:

  • Почему работает ANN? Какую конфигурацию сети следует использовать для повышения производительности? Можем ли мы точно настроить ANN для выполнения лучше, чем поиск kNN?

  • Какие еще векторы функций я могу использовать, чтобы сделать OCR более надежным?

Любые другие предложения по оптимизации производительности приветствуются.

4b9b3361

Ответ 1

Алгоритм

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

Из Википедии:

CNN состоит из одного или нескольких сверточных слоев с полностью (совпадающие с типичными искусственными нейронными сети) сверху. Он также использует привязанные веса и объединительные слои. Эта архитектура позволяет CNN использовать двумерную структуру входные данные. По сравнению с другими глубокими архитектурами, сверточными нейронные сети начинают демонстрировать превосходные результаты в обоих изображениях и речи. Их также можно обучить стандартным обратное распространение. CNN легче тренировать, чем другие регулярные, глубокие, нейронных сетей с обратной связью и имеют гораздо меньше параметров для что делает их привлекательной архитектурой для использования.

Говоря о вашем MLP, существует множество алгоритмов для поиска лучших параметров, например, для поиска сетки или оптимизации роя. Мне нравится использовать генетический алгоритм для настройки параметров NN, он довольно прост и обеспечивает хорошую производительность.

Я рекомендую вам JGap, хорошую генетическую структуру алгоритма в java, которая может быть использована из коробки:)

Вот презентация генетического алгоритма JGAP, которая была бы лучше, чем любая из моих презентаций:

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

В общем, генетические алгоритмы имеют тенденцию работать лучше, чем традиционные алгоритмы оптимизации, поскольку они с меньшей вероятностью будут сбиты с пути локальными оптимумами. Это связано с тем, что они не используют одноточечный правила перехода для перехода от одного экземпляра в решении пространство другому. Вместо этого GA использует весь набор решения, распределенные по всему пространству решений, все из которых экспериментируя с многими потенциальными оптимумами.

Однако, чтобы генетические алгоритмы работали эффективно, несколько критерии должны быть выполнены:

Должно быть относительно легко оценить, как "хорошее" потенциальное решение относится к другим потенциальным решениям.

Должно быть возможно разбить потенциальное решение на отдельные части которые могут варьироваться независимо. Эти части становятся "генами" в генетический алгоритм.

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

Ответ 2

Для объектов-векторов: нормализовались ли вы интенсивности? Возможно, используйте выравнивание гистограммы.

Для классификации: посмотрите t-SNE. Это стохастический метод уменьшения высокоразмерных функций в более удобную двумерную плоскость.