опираясь на iphone - PullRequest
       5

опираясь на iphone

5 голосов
/ 28 июля 2010

Я пытаюсь разработать приложение для iPhone для детей, которое сможет рисовать символы на экране одним касанием, и я хочу знать, как сопоставить нарисованный персонаж с хорошим символом алфавита.Как я буду сравнивать две фигуры (рисунок и существующий) Любая идея?какой-нибудь код?

Ответы [ 3 ]

3 голосов
/ 28 июля 2010

Используя GLGestureRecognizer , вы можете создать каталог, и он будет вычислять метрику между массивом входных точек по «алфавиту», который вы предопределите.

GLGestureRecognizer является Objective-C реализация Unistroke за 1 доллар Распознаватель, простой жест алгоритм распознавания (см. Кредиты ниже). Это доступно здесь в форма приложения для iPhone проект. Это было реализовано над Конечно пару вечеров в конце Апрель 2009 Адам Пребл.

Демонстрационный проект iPhone (Gestures.xcodeproj) предоставляется; Подкласс UIView получает сенсорные события и отправляет их Класс GLGestureRecognizer пока рисование коснулся пути в белом. После того, как жест завершен, пересчитанный жест показан зеленым, его центр в красной точке, наряду с название лучшего матча, оценка (чем ниже, тем лучше) и жестом ориентации. Размер выборки 16 очки используются в примере, который кажется достаточным для самых основных формы.

1 голос
/ 28 июля 2010

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

1.) Создайте изображение чертежа и «векторизируйте» его, прикрепив векторы к пути, который нарисовал пользователь.

2.) Для сравнения вам понадобятся вспомогательные векторы.То, что я хотел бы сделать, это реализовать «учебное приложение».Пусть некоторые дети рисуют (например, 10 раз A, 10 раз B, aso ...), помещают векторы в базу данных и используют их в качестве вспомогательных векторов.

3.) Вам нужен алгоритм оценки, который оценивает пользовательский рисунок, сравнивая его с векторами поддержки (это может быть самой интересной частью).Я мог бы подумать об измерении расстояний между начальными и конечными точками опорных векторов до нарисованных векторов.SVM с наименьшим расстоянием - это буква, которую вы берете.Затем вы можете ввести расстояние, которое является «границей», и считать все пользовательские рисунки выше этой границы нераспознанными.

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

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

В любом случае звучит как пара недель работы.

РЕДАКТИРОВАТЬ: Поскольку это интересная область, я провел некоторые исследования и нашел тезис о распознавании рукописного ввода.Взгляните на это: http://risujin.org/cellwriter/. Он в основном описывает упомянутый мною подход svm и дает некоторые алгоритмы, которые могут вам помочь.

0 голосов
/ 28 июля 2010

Вы всегда можете использовать Распознавание жестов ... но это довольно сложно для такого сценария, как этот.

В противном случае вы можете найти что-то в Кварц , которое сделает для вас хотя бы часть этого.Мне интересно посмотреть, как вы решите это ... это звучит как довольно сложная / интересная дорога впереди.

...