OpenCV обнаруживает номера - PullRequest
20 голосов
/ 03 мая 2011

Я использую OpenCV на iPhone и мне нужно определить цифры на изображении.Я разделил изображение на более мелкие изображения, чтобы у каждого изображения был только один номер (1-9).Все числа напечатаны, а НЕ написаны от руки.

Как лучше всего выяснить числа с помощью OpenCV?

ОБНОВЛЕНИЕ:

У меня естьуспешно нашел номера и извлек их.Они выглядят так:

http://img198.imageshack.us/img198/5671/101ht.jpg
http://img824.imageshack.us/img824/539/606yu.jpg

Когда они извлечены, они имеют одинаковый размер и так далее.Я сохранил кучу изображений и поместил их в каталог OCR, где они распределяются по номерам.Как: ocr / 1 / 100.jpg 101.jpg .... и ocr / 2 / 200.jpg 201.jpg ....

Тогда я собирался использовать тот же подход, что и в BasicРуководство по распознаванию текста: http://blog.damiles.com/?p=93

Однако я программирую для iPhone и не могу использовать код C ++ (ошибка при компиляции и т. Д.), И у меня нет доступа к highgui.

Я пытался использовать cvMatchTemplate () и сопоставлять кучу изображений, но, похоже, это работает очень плохо ...

Есть еще идеи, которые я могу попробовать?

Ответы [ 10 ]

8 голосов
/ 24 мая 2012

Вы могли бы начать с чтения Основного компонента анализа (PCA), Линейного дискриминантного анализа Фишера (LDA) и Машин опорных векторов (SVM).Это методы классификации, которые чрезвычайно полезны для OCR, и есть библиотеки на любом языке, включая C ++, Python, C # и т. Д.

Оказывается, что OpenCV уже включает отличные реализации на PCA и SVMs .Я не видел примеров кода OpenCV для OCR, но вы можете использовать некоторую модифицированную версию классификации лиц для выполнения классификации символов.Отличным ресурсом для кода распознавания лиц для OpenCV является этот сайт .

4 голосов
/ 10 марта 2012

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

  • Извлечь число
  • Найдите ограничительную рамку
  • Уменьшите изображение до 10x8, попробуйте выбрать соотношение сторон
  • Сделайте это для небольшого тренировочного набора, возьмите «среднее» изображение для каждого числа

  • Для новых изображений выполните шаги, описанные выше, но последнее является просто абсолютной разностью изображений для каждого из числовых шаблонов. Затем возьмите сумму разностей (пикселей на разностном изображении). Минимум - ваш номер.

Все вышеперечисленное является основными операциями OpenCV.

2 голосов
/ 31 января 2012

Возможно, самый простой и удобный способ - использовать svm в качестве алгоритма ml http://opencv.willowgarage.com/documentation/cpp/support_vector_machines.html и серые изображения как векторы функций.

2 голосов
/ 10 января 2012

По сути, ваша проблема состоит в том, чтобы просто классифицировать вектор объектов, который представляет собой набор интенсивностей пикселей после некоторых этапов предварительной обработки. Вы можете использовать любой классификатор для этой задачи, например, например. нейронные сети, которые должны иметь реализацию C внутри OpenCV. Вы также можете попробовать библиотеку C libsvm для машин опорных векторов.

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

1 голос
/ 13 февраля 2013

Свернутые нейронные сети - безусловно, лучшие алгоритмы для рукописных цифр.Они реализованы в большинстве систем, таких как USPS и т. Д. Вот несколько статей, объясняющих алгоритмы.http://yann.lecun.com/exdb/lenet/

1 голос
/ 02 октября 2011

Цель C ++?Попробуйте переименовать ваши файлы .m в .mm, и вы сможете использовать c ++ в своем проекте iPhone.

0 голосов
/ 18 декабря 2012

HOG + SVM (Попробуйте поиграть с ядрами)

0 голосов
/ 02 августа 2012

Tesseract - также приятный бесплатный движок OCR, который легко доступен для iPhone и позволяет использовать ваши собственные наборы обучающих изображений: http://tinsuke.wordpress.com/2011/11/01/how-to-compile-and-use-tesseract-3-01-on-ios-sdk-5/

0 голосов
/ 27 июня 2012

OCR распознавания простых цифр в OpenCV-Python

Это может вам помочь.Преобразование кода из Python в C ++ не является сложной задачей, так как API OpenCV одинаковы для обоих.

0 голосов
/ 14 марта 2012

Это хороший открытый исходный код , это ORCDemo на iPhone. Надеюсь, он вам пригодится

...