Если в ближайшей к вам технической библиотеке есть раздел, посвященный обработке изображений, компьютерному зрению или машинному зрению, то, если повезет, в библиотеке будет копия книги, которую я рекомендую для распознавания текста:
Системы распознавания символов от 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% с помощью простой техники, то считайте, что это успех.