2015-03-19 2 views
0

Моя цель - обнаружить текст в изображении и распознать его. Я достиг определения символов с использованием преобразования ширины штриха. Что делать, чтобы распознать их? Насколько мне известно, я думал о тренировке svm с помощью набора данных из разных шрифтов [изображений], обнаруживая особенность и извлекая векторы признаков из каждого изображения. [Я использовал вектор функции SIFT, построил словарь, используя kmean clusetering и все].Как тренировать svm для классификации изображений английского алфавита?

Я обнаружил символ раньше, я извлечу вектор объекта просеивания для этого символа. и я подумал о том, чтобы подавать это в функцию прогнозирования svm.

Я не знаю, как распознать использование svm. Я запутался! Помогите мне и исправьте меня, где бы я не ошибся с концепцией.

Я следовал за этим туритарием для распознавания части. Может ли этот turotial быть применимым для распознавания символов. http://www.codeproject.com/Articles/619039/Bag-of-Features-Descriptor-on-SIFT-Features-with-O

ответ

2

SVM - контролируемый классификатор. Чтобы использовать его, вам понадобятся данные обучения, относящиеся к типу объектов, которые вы пытаетесь распознать.

Шаг 1 - Подготовка данных учебных

Данные обучения состоит из пары векторов признаков и их соответствующих меток класса. В вашем случае, похоже, вы извлекли вектор функции «Сумка слова» (BOW) на основе SIFT для обнаруженных вами символов. Итак, для ваших данных обучения вам нужно будет найти много примеров разных символов, извлечь этот вектор признаков для каждого из них и связать их с меткой (иногда называемой меткой класса и обычно целым числом), которое вы будет возможно сопоставить текстовое описание (например, в силу число 0 может отображаться символ «а», и так далее.)

Шаг 2 - Подготовка классификатор

SVM классификатор принимает в качестве входных данных массив/матрица векторов признаков (по одному на строку) и связанные с ними метки. Настройте параметры SVM (т. Е. Параметр регуляризации C и, если применимо, любые другие параметры для ядер) на отдельном наборе проверки.

Шаг 3 - Прогнозировать для невидимых данных

На время тестирования, учитывая образец, который был не видно по SVM во время тренировки, Вы можете вычислить вектор признаков (ваш SIFT основе ЛУК вектор) для образца , Передайте этот вектор функции в функцию предсказания SVM, и он вернет вам целое число. Помните, что раньше, когда вы готовили свои учебные данные, вы связывали целое число с каждой меткой? Это метка, предсказываемая SVM для этого образца. Затем вы можете сопоставить этот ярлык с символом. Например, если вы связали 0 с 'a', 1 с 'b' и т. Д., Вы можете использовать вектор/hashmap для сопоставления целого с его текстовым эквивалентом.

Дополнительные примечания

Вы можете проверить OpenCV в SVM учебник here для деталей.

ПРИМЕЧАНИЕ: Часто для новичков самая сложная часть (после получения данных) настраивает классификатор. Мой совет сначала попробует простой классификатор (например, linear SVM), который имеет мало параметров для настройки.Достойным будет линейный SVM, который требует только одного параметра C. Как только вам удастся получить несколько приличных результатов (что дает некоторую уверенность в том, что остальная часть вашего кода работает), вы можете перейти к более «сложным» классификаторам.

И, наконец, важные данные о тренировках и объектах, которые вы извлекаете, очень важны. Данные обучения должны быть «похожими» на тестовые данные, которые вы пытаетесь предсказать. Например, если вы предсказываете символы, обнаруженные в дорожных знаках, которые имеют разные шрифты, условия освещения и различия в позе, то с использованием данных обучения, состоящих из символов, взятых из, например, газетного/книжного архива , возможно, не дает вам хороших результатов. Это вопрос об адаптации домена в машинное обучение.

+0

в шаге 1. На самом деле у меня есть набор данных всех букв и их разных шрифтов в соответствующих папках. Например, различные типы символов «A» в папке. Что я должен сделать, так это извлечь вектор-объект всех изображений в этой конкретной папке и присвоить ему метку 0..и т.д. .. на следующем этапе мне нужно обучить svm с полученными векторами ... т.е. [123,43253,5645,7567] - lable [0] – Tharun26

+0

@ Tharun26 Да. Поскольку все образцы одного и того же символа (например, класс) находятся в папке, вы просто извлекаете вектор объектов для каждого изображения (используя текущий метод на основе SIFT) в папке и назначаете им одну и ту же метку. Таким образом, «A» может быть связано с числом «0» и т. Д. – lightalchemist

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