Ответ 1
Классификация цифр
Вы уточнили в комментариях, что вы уже выделили номер части предварительного обнаружения изображения, поэтому я начну с этого предположения.
Возможно, вы можете аппроксимировать перспективные эффекты и "размытость" числа, рассматривая его как рукописный номер. В этом случае имеется знаменитый набор данных рукописных цифр для обучения классификации, называемый mnist.
Янн ЛеКун перечислил современное состояние в этом наборе данных mnist hand-written dataset.
В дальнем конце спектра сверточные нейронные сети дают возмутительно низкие коэффициенты ошибок (доля ошибок 1%). Для более простого решения k-ближайших соседей, использующих коррекцию, удаление шума, размытие и смещение в 2 пикселя, дало ошибку около 1% и значительно быстрее реализовано. Python opencv имеет реализацию. Нейронные сети и поддерживающие векторные машины со стандартом также имеют довольно впечатляющие показатели производительности.
Обратите внимание, что в сверточных сетях нет ваших собственных функций, поэтому важная информация о цветопередаче здесь может быть просто использована для сужения области интересов. Другие подходы, в которых вы определяете пространство вашей функции, могли бы более точно учитывать известную цветопередачу.
Python поддерживает множество методов машинного обучения в потрясающем пакете sklearn - вот примеры использования склеарна для mnist. Если вы ищете учебное объяснение машинного обучения в python, собственный учебник sklearn очень подробен
Это те предметы, которые вы пытаетесь классифицировать, если вы изучаете использование этого подхода. Чтобы подчеркнуть, насколько легко начать обучение некоторых из этих классификаторов, основанных на машинном обучении, вот сокращенный раздел из кода примера в связанном пакете sklearn:
digits = datasets.load_digits() # built-in to sklearn!
data = digits.images.reshape((len(digits.images), -1))
# Create a classifier: a support vector classifier
classifier = svm.SVC(gamma=0.001)
# We learn the digits on the first half of the digits
classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2])
Если вы привязаны к openCv (возможно, потому, что вы хотите в будущем подключиться к системе реального времени), opencv3/python имеет учебник по этой точной теме тоже! Их демо использует k-ближайший сосед (перечисленные на странице LeCun), но они также имеют svms и многие другие инструменты в sklearn, Их ocr-страница с использованием SVM использует функцию roundewing, которая может быть полезна с эффектом перспективы в вашей проблеме:
ОБНОВЛЕНИЕ:. Я использовал описанный выше подход к skimage на вашем изображении, сильно обрезанный, и правильно классифицировал его. A lot потребуется больше тестирования, чтобы убедиться, что это рибуст на практике
^^ Это крошечное изображение - это 8x8 урожая изображения, которое вы вложили в свой вопрос. mnist - 8x8 изображений. Вот почему он тренируется менее чем за секунду с аргументами по умолчанию в skimage.
Я преобразовал его в правильный формат, масштабируя его до диапазона mnist, используя
number = scipy.misc.imread("cropped_image.png")
datum = (number[:,:,0]*15).astype(int).reshape((64,))
classifier.predict(datum) # returns 8
Я ничего не изменил из примера; здесь я использую только первый канал для классификации и не вычисляю умных функций. 15 посмотрел прямо на меня; вам нужно настроить его, чтобы попасть в целевой диапазон или (в идеале) предоставить свой собственный набор для обучения и тестирования
Обнаружение объектов
Если вы не выделили номер на изображении, вам понадобится детектор объекта. Литературное пространство по этой проблеме является гигантским, и я не начну с того, что кроличья дыра (google Viola и Jones, может быть?) Этот блог охватывает основы детектора "скользящего окна" в питоне. Адриан Розброк выглядит так, как будто он даже является спонсором SO, и на этой странице есть несколько хороших примеров детекторов объектов на основе opencv и python, которые были довольно укомплектованы (вы действительно связаны с этим блогом в своем вопросе, я не понимал).
Короче говоря, классифицируйте окна по изображению и выбирайте окно с наибольшей уверенностью. Сужение пространства поиска с интересующей областью, конечно, даст огромные улучшения во всех областях производительности.