По этой ссылке у вас есть примеры с C ++ и Python. Я использовал этот код для определения количества шин (после обнаружения, что данный объект является шиной).

рабатываю приложение для чтения букв и цифр из изображения с помощью opencv в C ++. Сначала я изменил данное цветное изображение и цветовой шаблон на двоичное изображение, затем вызвал метод cvMatchTemplate (). Этот метод просто выделил области, где шаблон соответствует .. Но не ясно .. Я просто не хочу видеть область .. Мне нужно проанализировать символы (буквы и цифры) из изображения. Я новичок в openCV. Кто-нибудь знает любой другой метод, чтобы получить результат?

Изображение взято с камеры. Образец изображения показан выше. Мне нужно получить все тексты со светодиодного дисплея (130 и Delft Tanthaf).

Друзья я пробовал с примером приложения распознавания лиц, он распознает лица. файл HaarCascade предоставляется вместе с openCV. Я только что загрузил этот файл и вызвал метод cvHaarDetectObjects (); Для обнаружения букв я создал xml-файл с помощью приложения letter_recog.cpp, предоставленного openCV. Но когда я загружаю этот файл, он показывает некоторую ошибку (ошибка OpenCV: неизвестная ошибка> в неизвестной функции, файл ........ \ ocv \ opencv \ src \ cxcore \ cxpersistence.cpp, строка 4720). Я искал в сети эту ошибку и получил информацию об используемых файлах lib. Я так и сделал, но ошибка все еще остается. Это ошибка с моим XML-файлом или вызов метода для загрузки этого XML-файла ((CvHaarClassifierCascade *) cvLoad («имя встроенного XML-файла», 0,0,0);) ?? пожалуйста помоги...

заранее спасибо

Ответы на вопрос(5)

подойдет шаблонное соответствие.

Однако, если вы хотите, чтобы система была более гибкой, я бы подумал, что вам потребуется некоторая форма анализа контуров / форм для каждой отдельной буквы.

вы можете использовать встроенный модуль обнаружения объекта «текст сцены» ~

Ссылка:http://docs.opencv.org/3.0-beta/modules/text/doc/erfilter.html

Пример:https://github.com/Itseez/opencv_contrib/blob/master/modules/text/samples/textdetection.cpp

Обнаружение текста построено на этих двух документах:

[Neumann12] Neumann L., Matas J .: Локализация и распознавание текста сцены в реальном времени, CVPR 2012. Документ доступен на сайте:http://cmp.felk.cvut.cz/~neumalu1/neumann-cvpr2012.pdf

[Gomez13] Гомес Л. и Каратзас Д .: Извлечение текста из естественных сцен из нескольких сценариев, ICDAR 2013. Документ доступен на сайте:http://refbase.cvc.uab.es/files/GoK2013.pdf

Как только вы нашли, где находится текст в сцене, вы можете запустить любой тип стандартного распознавания текста для этих фрагментов (обычно используется распознавание текста в Tesseract). И теперь в opencv есть сквозной пример, использующий новый интерфейс OpenCV к Tesseract:

https://github.com/Itseez/opencv_contrib/blob/master/modules/text/samples/end_to_end_recognition.cpp
 Dmitry Zaytsev10 апр. 2015 г., 12:34
Ни ссылка, ни пример не доступны
 Kaolin Fire11 апр. 2015 г., 19:43
Хм. Странно, что они все это перенесли. Обновление, что я могу.

как правило, не является надежным для такого рода приложений из-за несоответствий освещения, изменений ориентации, изменения масштаба и т. Д. Типичным способом решения этой проблемы является внедрение машинного обучения. То, что вы пытаетесь сделать, обучая свой собственный повышающий классификатор, является одним из возможных подходов. Тем не менее, я не думаю, что вы делаете обучение правильно. Вы упомянули, что дали 1 логотип в качестве положительного тренировочного изображения и 5 других изображений, не содержащих логотип в качестве отрицательных примеров? Как правило, вам нужны обучающие образцы порядка сотен или тысяч и более. Вы не можете тренироваться с 6 тренировочными образцами и ожидать, что это сработает.

Если вы не знакомы с машинным обучением, вотгрубо что ты должен делать:

1) нужно собратьмного положительные тренировочные образцы (от сотен и далее, но, как правило, тем лучше) объекта, который вы пытаетесь обнаружить. Если вы пытаетесь обнаружить отдельные символы на изображении, то получите обрезанные изображения отдельных символов. Вы можете начать с базы данных MNIST для этого. Еще лучше, чтобы подготовить классификатор к вашей конкретной проблеме, получить много обрезанных изображений персонажей в автобусе из фотографий. Если вы пытаетесь обнаружить всю прямоугольную светодиодную панель, то используйте их изображения в качестве положительных тренировочных образцов.

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

Смотрите следующую ссылку, как обучить каскад классификатора и создать файл модели XML:http://note.sonots.com/SciSoftware/haartraining.html

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

Надеюсь это поможет.

РЕДАКТИРОВАТЬ:

Я случайно наткнулся на этот старый пост после отдельного открытия текстового модуля сцены в OpenCV 3, упомянутого @KaolinFire.

Для тех, кому интересно, это результат запуска этого детектора на образце изображения, заданном ОП. Обратите внимание, что детектор может локализовать текстовую область, даже если он возвращает более одной ограничительной рамки.

Обратите внимание, что этот метод не является надежным (по крайней мере, эта реализация в OpenCV с параметрами по умолчанию). Это имеет тенденцию генерировать ложные срабатывания, особенно когда входное изображение содержит много «отвлекающих факторов». Вот еще примеры, полученные с использованием этого детектора текста OpenCV 3 в наборе данных Google Street View:

Обратите внимание, что он имеет тенденцию находить «текст» между параллельными линиями (например, окнами, стенами и т. Д.). Поскольку входное изображение OP, вероятно, будет содержать сцены вне помещения, это будет проблемой, особенно если он / она не ограничивает область интереса меньшей областью вокруг светодиодных знаков.

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

Вот больше ресурсов (обсуждение + код + наборы данных) по обнаружению текста.

Код

Извлечение текста OpenCV

http://libccv.org/doc/doc-swt/

Реализация преобразования ширины штриха (SWT) (Python)

https://github.com/subokita/Robust-Text-Detection

Datasets

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

http://www.iapr-tc11.org/mediawiki/index.php/Datasets_List

Как считать время с записанного видео с камеры наблюдения? Вы можете / должны использоватьcvMatchTemplate() сделать это.

 asifkt20 янв. 2011 г., 12:23
Я разработал приложение для распознавания лиц. На самом деле каскадный файл haarcascade_frontalface_alt.xml поставляется с opencv. Для распознавания букв мне нужно создать XML-файл. Поэтому я использовал файлы opencv_createsamples.exe, opencv_haartraining.exe для создания этого файла. Я дал логотип в качестве позитивного изображения, и еще 5 изображений, которые не содержат логотип в качестве негативного изображения. Я не получил никакого XML-файла, обучив его. Слышал, это займет как минимум 3 дня на тренировку хаара. Это правда?? Для получения промежуточного XML мне нужно использовать файл convert_cascade.exe. Если я воспользуюсь им, получу ли я лучший результат ???
 Adi Shavit17 янв. 2011 г., 14:05
@asifkt, тогда, пожалуйста, отредактируйте свой вопрос, чтобы дать более подробную информацию о вашем приложении. Что вы знаете о буквах (шрифты, размеры, перспектива) источника изображения (видео, сканер и т. Д.)? Это поможет сосредоточиться на возможных решениях.
 asifkt17 янв. 2011 г., 04:33
но положение цифр на изображении может варьироваться, поэтому нельзя сравнивать для конкретной позиции изображения. Сравниваемое изображение не ясно, тогда как я получу конкретную цифру из изображения ???

эффективный детектор текста сцены -https://www.learnopencv.com/deep-learning-based-text-detection-using-opencv-c-python/ По этой ссылке у вас есть примеры с C ++ и Python. Я использовал этот код для определения количества шин (после обнаружения, что данный объект является шиной).

Ваш ответ на вопрос