Распознавание цифр с байесовскими уроками - PullRequest
5 голосов
/ 18 ноября 2011

Мне нужно написать программу OCR только для цифр.Я буду использовать наборы данных MNIST.Проблема в том, что я не знаю с чего начать.Есть много работ, которые не объясняют алгоритм.У меня нет особых знаний о распознавании образов.Итак, у меня есть несколько вопросов.

Q1: Где я могу найти алгоритм (или учебное пособие) Q2: Как классифицировать цифры?Мне не нужны очень продвинутые вещи.Первое, что приходит мне в голову - это найти соотношение верхней половины / нижней половины и левой стороны / правой стороны.Есть ли более полезные и простые методы классификации.Q3: Что такое обратное распространение и слои, которые показаны в большинстве работ.Нужны ли они мне для моего простого OCR.

Примечание: я знаю, что моя программа OCR не будет точной.Пока это не очень важно.

1 Ответ

8 голосов
/ 20 декабря 2011

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

Системы распознавания символов от Cheriet, Kharma, Liu и Suen

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

Убедитесь, что у вас есть доступ к хорошему вводному учебнику по обработке изображений. Книга Гонсалеса и Вудса является стандартом во многих университетах:

Цифровая обработка изображений Гонсалес и Вудс

Даже «простое» распознавание текста становится хитрым очень быстро. Это может быть ошеломляющим, если вы начнете изучать нейронные сети, теорему Байеса и т. Д., Прежде чем вы начнете понимать основы обработки изображений.

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

Q1: Где я могу найти алгоритм (или учебник)

Существует множество алгоритмов распознавания. Книга Cheriet даст вам хорошее начало.

Q2: Как классифицировать цифры? Мне не нужны очень продвинутые вещи. Первое, что приходит мне в голову - это найти соотношение верхней половины / нижней половины и левой стороны / правой стороны. Есть ли более полезные и простые методы классификации.

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

Вы также можете подразделить символ на сетку 2 x 2 или 3 x 3 и проверить относительную плотность пикселей. В отличие от печатных машин, рукописные символы не будут хорошо выстраиваться в прямолинейных сетках.

Сопоставление шаблонов с использованием нормализованной корреляции является простым и может работать достаточно хорошо для машинно-печатных символов для одного известного шрифта. Это относительно просто реализовать и стоит изучить: http://en.wikipedia.org/wiki/Cross-correlation#Normalized_cross-correlation

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

К общим алгоритмам прореживания относятся Стентифорд и Чжан-Суен. Есть бесплатная версия WinTopo, которая демонстрирует оба этих алгоритма: http://wintopo.com/

Вы можете посмотреть научные статьи о «извлечении инсульта», но эти методы, как правило, труднее реализовать.

Q3: Что такое обратное распространение и слои, которые показаны в большинстве работ. Нужны ли они для моего простого OCR.

Эти термины относятся к искусственным нейронным сетям. Для простого алгоритма OCR вы жестко закодируете логику распознавания ИЛИ будете использовать простые методы обучения. Искусственные нейронные сети могут быть обучены распознавать символы, которые не прописаны в вашем программном обеспечении. http://en.wikipedia.org/wiki/Neural_network

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

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

...