Ух ты, это звучит как сложная задача.Одна возможность, которая приходит мне в голову, - это использовать машину опорных векторов.
1.) Создайте изображение чертежа и «векторизируйте» его, прикрепив векторы к пути, который нарисовал пользователь.
2.) Для сравнения вам понадобятся вспомогательные векторы.То, что я хотел бы сделать, это реализовать «учебное приложение».Пусть некоторые дети рисуют (например, 10 раз A, 10 раз B, aso ...), помещают векторы в базу данных и используют их в качестве вспомогательных векторов.
3.) Вам нужен алгоритм оценки, который оценивает пользовательский рисунок, сравнивая его с векторами поддержки (это может быть самой интересной частью).Я мог бы подумать об измерении расстояний между начальными и конечными точками опорных векторов до нарисованных векторов.SVM с наименьшим расстоянием - это буква, которую вы берете.Затем вы можете ввести расстояние, которое является «границей», и считать все пользовательские рисунки выше этой границы нераспознанными.
Второй подход может заключаться в создании изображений с буквами (например, белый фон и черная буква).(без псевдонимов)).Вы снова генерируете изображение пользовательского чертежа и изменяете его размер к изображению для сравнения, пытаясь точно «перекрыть» его.Затем вы подсчитываете черные пиксели, которые совпадают на двух изображениях, и берете букву с наибольшим количеством совпадений.
Но, поскольку я реализовал нечто подобное, я могу сказать, что подход SVM более удовлетворителен, так как вы можете добавить поддержкувекторы, если результат не достаточно хорош.Квинтэссенция, безусловно, ваш алгоритм рейтинга.
В любом случае звучит как пара недель работы.
РЕДАКТИРОВАТЬ: Поскольку это интересная область, я провел некоторые исследования и нашел тезис о распознавании рукописного ввода.Взгляните на это: http://risujin.org/cellwriter/. Он в основном описывает упомянутый мною подход svm и дает некоторые алгоритмы, которые могут вам помочь.