2010-07-28 10 views
5

Estoy tratando de desarrollar una aplicación de iPhone para niños que sea capaz de dibujar personajes en la pantalla con el tacto y quiero saber cómo hacer coincidir el personaje dibujado con buen carácter del alfabeto. ¿Cómo compararé las dos formas (dibujo y existente) ¿Alguna idea? algún código?dibujo en iphone

+0

¿Encontró solución? – PVCS

Respuesta

1

Guau, esto suena como una tarea difícil. Una posibilidad que me viene a la mente sería usar una máquina de vectores de soporte.

1.) Genere una imagen del dibujo y vectorícela adjuntando vectores a la ruta que el usuario ha trazado.

2.) Necesita vectores de soporte para comparar. Lo que haría es implementar una "aplicación de capacitación". Deje que algunos niños dibujen (por ejemplo, 10 veces una A, 10 veces una B, etc.), coloque los vectores en una base de datos y utilícelos como vectores de soporte.

3.) Necesita un algoritmo de calificación que clasifique el dibujo del usuario comparándolo con los vectores de soporte (esta podría ser la parte más interesante). Podría pensar en medir las distancias de los vectores de soporte de inicio y punto final a los vectores dibujados. El svm con la distancia más baja es la letra que tomas. Luego, puede introducir una distancia que sea el "borde" y tomar todos los dibujos del usuario por encima de este borde como no reconocidos.

Un segundo enfoque podría ser generar imágenes con las letras (por ejemplo, fondo blanco y letra negra (no alias anti)). Generas de nuevo una imagen del dibujo del usuario y la cambias de tamaño a la imagen para compararla, tratando de "superponerla" exactamente. Luego, cuenta los píxeles negros que coinciden en las dos imágenes y toma la que tenga más coincidencias.

Pero, como he implementado algo similar, puedo decir que el enfoque de svm es más satisfactorio ya que puede agregar vectores de soporte si el resultado no es lo suficientemente bueno. La quintaesencia es seguro su algoritmo de calificación.

De todos modos suena como un par de semanas de trabajo.

EDIT: Dado que este es un campo interesante investigué un poco y encontré una tesis sobre el reconocimiento de escritura a mano. Echa un vistazo a esto: http://risujin.org/cellwriter/. Básicamente describe el enfoque de svm que mencioné y proporciona algunos algoritmos que pueden ayudarte.

+0

+1: enfoque genial ... semanas de * tiempo completo * trabajo :) – iwasrobbed

0

Siempre puede usar Gesture Recognition ... pero eso es bastante difícil en un escenario personalizado como este.

De lo contrario, puede encontrar algo en Quartz que hará al menos parte de esto por usted. Estoy interesado en ver cómo lo resuelves ... parece ser un camino bastante difícil/interesante.

3

Using GLGestureRecognizer puede crear un catálogo y calculará una métrica entre una matriz de punto de entrada contra un "alfabeto" que usted predefina.

GLGestureRecognizer es un objetivo-C implementación de $ 1 Unistroke aprendidos, un simple algoritmo de reconocimiento de gestos (ver Créditos abajo). Está disponible aquí en como un proyecto de aplicación de iPhone . Se implementó durante el curso de un par de tardes en el último de abril de 2009 por Adam Preble.

Un proyecto de demostración de iPhone (Gestures.xcodeproj) se proporciona; a La subclase UIView recibe los eventos táctiles y los envía a la clase GLGestureRecognizer, mientras que dibuja la ruta tocada en blanco. Una vez se haya completado el gesto, el gesto resampled se muestra en verde, su centro en el punto rojo, junto con el nombre del mejor partido, la puntuación (menos es mejor), y el gesto orientación. En el ejemplo, se utiliza un tamaño de muestra de 16 puntos, que parece ser adecuado para formas muy básicas .

+0

¡Cosas increíbles! – thatsdisgusting

+0

muy guay, recrea tus gestos bastante bien. podría ser utilizado fácilmente para un alfabeto – iwasrobbed