Я разрабатываю приложение для чтения букв и цифр из изображения с помощью opencv в С++. Сначала я изменил данное цветное изображение и цветной шаблон на двоичное изображение, а затем вызвал метод cvMatchTemplate(). Этот метод просто выделил области, где шаблон соответствует.. Но не понятно.. Я просто не хочу видеть область. Мне нужно разобрать символы (буквы и цифры) из изображения. Я новичок в openCV. Кто-нибудь знает какой-либо другой метод для получения результата?
Изображение снимается с камеры. образ образца показан выше. Мне нужно получить все тексты со светодиодного дисплея (130 и Delft Tanthaf).
Друзья, которых я попробовал с образцом приложения обнаружения лица, он обнаруживает лица. файл HaarCascade снабжен openCV. Я просто загрузил этот файл и вызвал метод cvHaarDetectObjects(); Чтобы обнаружить буквы, я создал файл xml, используя приложение letter_recog.cpp, предоставленное openCV. Но когда я загружаю этот файл, он показывает некоторую ошибку (ошибка OpenCV: UnSpecified error > в неизвестной функции, файл........ \ocv\opencv\src\cxcore\cxpersistence.cpp, строка 4720). Я искал в Интернете эту ошибку и получил информацию о используемых файлах lib. Я сделал это, но ошибка все еще остается. Является ли ошибка с моим файлом xml или вызовом метода для загрузки этого xml файла ((CvHaarClassifierCascade *) cvLoad ( "построенное имя файла xml", 0,0,0);)? пожалуйста, ПОМОГИТЕ...
Ответ 2
Сравнение шаблонов, как правило, не является надежным для такого рода приложений из-за несоответствий освещения, изменений ориентации, изменений масштаба и т.д. Типичным способом решения этой проблемы является внедрение машинного обучения. То, что вы пытаетесь сделать, обучая свой собственный повышающий классификатор, - это один из возможных подходов. Однако я не думаю, что вы правильно тренируетесь. Вы упомянули, что вы дали ему 1 логотип в качестве позитивного образа обучения и 5 других изображений, не содержащих логотип, как негативные примеры? Как правило, вам нужны образцы обучения в количестве сотен или тысяч или более. Вы не можете тренироваться с 6 образцами обучения и ожидать, что он будет работать.
Если вы не знакомы с машинным обучением, вот что вам нужно сделать:
1) Вам нужно собрать много положительных образцов обучения (начиная со ста и далее, но тем более веселее) объекта, который вы пытаетесь обнаружить. Если вы пытаетесь обнаружить отдельные символы на изображении, то получите обрезанные изображения отдельных символов. Для этого вы можете начать с базы данных MNIST. Еще лучше, чтобы подготовить классификатор к вашей конкретной проблеме, получить много обрезанных изображений персонажей на автобусе с фотографий. Если вы пытаетесь обнаружить всю прямоугольную панель панели светодиодов, тогда используйте их изображения в качестве ваших положительных образцов для обучения.
2) Вам нужно будет собрать много отрицательных образцов обучения. Их число должно быть в том же порядке, что и количество положительных образцов обучения. Это могут быть изображения других объектов, которые появляются на изображениях, на которых будет работать ваш детектор. Например, вы можете обрезать изображения передней части автобуса, дорожных покрытий, деревьев вдоль дороги и т.д. И использовать их в качестве негативных примеров. Это поможет классификатору исключить эти объекты в изображении, на котором вы запускаете свой детектор. Следовательно, отрицательные примеры - это не только изображение, содержащее объекты, которые вы не хотите определять. Они должны быть объектами, которые могут быть ошибочно приняты за объект, который вы пытаетесь обнаружить в изображениях, на которых вы запускаете ваш детектор (по крайней мере, для вашего случая).
См. следующую ссылку о том, как обучить каскад классификатора и создать файл модели XML: http://note.sonots.com/SciSoftware/haartraining.html
Несмотря на то, что вы упомянули, что хотите только идентифицировать отдельные символы вместо всей панели светодиодов на шине, я бы рекомендовал сначала обнаружить панель светодиодов, чтобы локализовать область, содержащую интересующие символы. После этого либо выполнить сопоставление шаблонов в этой меньшей области, либо запустить классификатор, обученный распознавать отдельные символы на участках пикселей в этом регионе, полученных с использованием подхода с использованием скользящего окна и, возможно, в нескольких масштабах. (Примечание. Усовершенствованный классификатор haarcascade, который вы упомянули выше, будет обнаруживать символы, но он не скажет вам, какой характер он обнаружил, если только вы не обучите его обнаружению этого конкретного персонажа...) Обнаружение символов в этой области в скользящем окне будет давать вы должны указать символы, чтобы вы могли вставлять их в слова и т.д.
Надеюсь, что это поможет.
EDIT:
Я случайно попал на этот старый пост после раздельного открытия текстового модуля сцены в OpenCV 3, упомянутого @KaolinFire.
Для тех, кому интересно, это результат запуска этого детектора на образце образца, заданного OP. Обратите внимание, что детектор способен локализовать область текста, даже если он возвращает более одного ограничивающего прямоугольника.
![Результат текстового детектора OpenCV 3]()
Обратите внимание, что этот метод не является надежным (по крайней мере эта реализация в OpenCV с параметрами по умолчанию). Он имеет тенденцию генерировать ложные срабатывания, особенно когда входное изображение содержит много "дистракторов".
Ниже приведены примеры, полученные с использованием этого текстового детектора OpenCV 3 в наборе данных Google Street View:
![Отрицательный результат 4]()
Обратите внимание, что он имеет тенденцию находить "текст" между параллельными линиями (например, окнами, стенами и т.д.). Поскольку входное изображение OP, вероятно, будет содержать сцены на открытом воздухе, это будет проблемой, особенно если он/она не ограничит область интереса к меньшей области вокруг светодиодных знаков.
Кажется, что если вы можете локализовать "грубую" область, содержащую только текст (например, только знак светодиода в образце выборки OP), тогда выполнение этого алгоритма может помочь вам получить более жесткую ограничительную рамку. Но вам придется иметь дело с ложными срабатываниями (возможно, отбрасывая небольшие регионы или выбирая среди перекрывающихся ограничивающих прямоугольников, используя эвристику, основанную на знании о том, как буквы появляются на светодиодных знаках).
Здесь больше ресурсов (обсуждение + код + наборы данных) при обнаружении текста.
код
Datasets
Здесь вы найдете наборы данных goview streetview и MSRA. Хотя изображения в этих наборах данных не совсем совпадают с изображениями на светодиодных индикаторах на шинах, они могут быть полезны либо для выбора "лучшего" алгоритма выполнения из нескольких конкурирующих алгоритмов, либо для обучения алгоритму машинного обучения с нуля.
http://www.iapr-tc11.org/mediawiki/index.php/Datasets_List