Actualmente estoy trabajando en un sistema de reconocimiento de gestos (para una aplicación de Android). Creo que he completado la etapa de procesamiento de imágenes, donde puedo extraer el contorno de la mano (por ahora, estoy usando un guante para evitar la sustracción del fondo).
También obtengo la elipse / rectángulo delimitador, el centroide como características de forma 'importantes' de la mano.
Mi problema es que no hay mucha literatura que indique cuál es la siguiente etapa antes de la clasificación de la imagen a través del modelo oculto de Markov. Esta etapa de 'Extracción de características' me parece muy ambigua.
Actualmente estoy obteniendo una lista de ángulos del contorno (que se aproxima para obtener un número limitado de ángulos)
El problema es que no tengo ni idea de qué hacer a continuación. Cuando busco literatura como 'Clasificación de formas usando HMM', todavía me resulta difícil hacer lo siguiente.
Como herramienta para HMM planeo usar JaHMM. ¡Pero no sé cómo experimentar con la herramienta en esta etapa ya que no sé cuál será la entrada a esta etapa de clasificación!
He encontrado una lista de funciones que encontré en la literatura, como Descriptores rápidos de Fourier, Descriptores de curvatura, B Spline; Sin embargo, no tengo ni idea de cómo aplicar estas funciones a mis datos actuales (es decir, lista de ángulos, por ejemplo: -63, 154, 3, 23, 54, ...)
ACTUALIZACIÓN 1:
Gracias por su información. @Peter K.
Con respecto a las poses: iba a buscar un conjunto de palabras en lenguaje de señas americano que están escritas con los dedos, por ejemplo, 'perro' -> 'd' 'o' 'g' (3 estados); pero en el momento no he decidido a qué ir.
Actualmente estoy leyendo algunos documentos más para ver qué tipo de información debo extraer, como:
- centroide de la mano
- ángulo de movimiento
- distancia desde un punto particular a diferentes puntos del contorno de la mano (etc.)
Ahora que he encontrado un artículo que parece mostrar lo que quiero hacer, no estoy seguro:
http://espace.library.uq.edu.au/eserv.php?pid=UQ:10700&dsID=n0273.pdf
Actualmente estoy leyendo la sección 5: Cuantización vectorial (he oído hablar de este término antes, pero no sé realmente qué implica, y en la figura 5 parece haber un algoritmo complejo que, si entendí correctamente, convierte el conjunto de valores que logro de la mano (que acabo de mencionar) en 1 dígito que puedo usar como secuencia de observación para entrenar un HMM para 1 signo en particular. ¿Crees que me estoy moviendo en el camino correcto? (Estoy trabajando en Android, (NDK) Encontré JaHMM como una herramienta HMM y utilicé OpenCV para el procesamiento de imágenes.
@ Peter K. Gracias por su respuesta. Con respecto a la generación de datos, estaba planeando seguir los pasos de este documento, después de producir mi conjunto de datos personales: (secciones 4 y 5) http://www.i.ci.ritsumei.ac.jp/~shimada/papers/vi02 -tanibata.pdf
ACTUALIZACIÓN 2: teniendo en cuenta que un gesto está formado por {postura a, postura b, postura c}
Ahora estoy pensando que debo utilizar algún tipo de algoritmo de clasificación. Es decir, actualmente tengo un conjunto de vectores de características:
Postura A: [ángulo de elipse que lo rodea, relación altura: ancho]
- 0.802985 33.909615
- 0.722824 31.209663
- 0.734535 30.206722
- 0.68397 31.838253
- 0.713706 34.29641
- 0.688798 30.603661
- 0.721395 34.880161
Postura B: [estructurada igual que la postura A]
- 0.474164 16.077467
- 0.483104 14.526289
- 0.478904 14.800572
- 0.483134 14.523611
- 0.480608 14.41159
- 0.481552 15.563665
- 0.497951 15.563585
etc.
y me gustaría que cuando alimente un vector de características obtengo un símbolo simple, por ejemplo, 'A', 'B', etc.
es posible? También migré la pregunta aquí: /programming/15602963/vector-quantization-algorithms-used-to-provide-observation-sequences-for-hidden
fuente
Respuestas:
He usado HMM para el reconocimiento de gestos (no para el reconocimiento de pose). Lo que hice fue: seguir la mano y reconocer el gesto que dibujaba la mano en el aire, puedes imaginarlo como un rastro.
Puede usar HMM como reconocedor de secuencia, por lo que antes que nada necesita transformar su imagen en una secuencia de números discretos.
Para cada gesto que desee reconocer, debe entrenar a un HMM para eso.
Entonces tienes un diccionario con alguna palabra conocida. Cada uno es un HMM entrenado. Si tiene una nueva palabra (observación desconocida), puede calcular la probabilidad de que cada palabra del diccionario sea la desconocida.
Algunos pseudocódigo:
¡Ahora, vea cuál es el valor máximo en probabilidades y obtendrá la palabra más probable del diccionario!
Mira aquí:
http://www.ece.ucsb.edu/Faculty/Rabiner/ece259/Reprints/tutorial%20on%20hmm%20and%20applications.pdf
http://www.codeproject.com/Articles/69647/Hidden-Markov-Models-in-C
http://www.creativedistraction.com/demos/gesture-recognition-kinect-with-hidden-markov-models-hmms/
fuente
Comencemos con el reconocimiento de pose. Este documento traza el límite de la mano y cuenta el número de detecciones de la punta del dedo desde ese límite. Una cosa a tener en cuenta en ese documento es que no se requiere información de "estado". Para la estimación de pose / posición, los HMM probablemente no encajan bien.
La información del gesto se adapta mejor a la gama HMM para la resolución de problemas. Sin embargo, necesitaría ver un poco más del tipo de datos que usará para los gestos. ¿Puedes explicar un poco más sobre el algoritmo que genera los datos que tienes?
El problema es que seleccionar la estructura correcta del modelo oculto de Markov tiene una gran influencia en la precisión alcanzable ... Advertencia: ¡Enlace PDF!
fuente