En esta publicación hablare sobre la solución que se utilizó
en el proyecto de piano con la Kinect que estoy realizando, solución sobre el
problema de sensibilidad de la Kinect que he comentado en una publicación
anterior.
Para explicar la solución a este problema explicare en que
consiste una tecla del piano con la Kinect:
Una tecla es un espacio en el suelo que tiene las medidas de
un cerámico normal de 30 x 30 cm. Que está ubicado aproximadamente a 2,25 mts. de la Kinect con la Kinect a una altura de
1,30 mts. Aproximadamente.
Por lo cual al poner el pie sobre una orilla de la tecla de
este piano el sonido se detenía y reproducía a una velocidad de 30 veces por
segundo, lo cual distorsiona el sonido y da una experiencia muy mala sobre el
piano, para solucionarlo se tomaron varias posibles soluciones, las cuales
todas consistían en fórmulas matemáticas básicas y lineales, las cuales dan el
mismo problema ya que seleccionan un espacio dependiendo del dato numérico de
entrada, el cual se toma 30 veces en un segundo. Al analizar de mejor forma el
problema después de fallar tantas veces (unas 5 soluciones se probaron fallando
todas) se llegó a la solución de aplicar una herramienta de inteligencia
artificial, la cual es llamada Lógica difusa.
Una definición simple de internet:
La lógica difusa (también
llamada lógica borrosa o lógica
heurística) se basa en lo relativo de lo observado como
posición diferencial. Este tipo de lógica toma dos valores aleatorios,
pero contextualizados y referidos entre sí. Así, por ejemplo, una persona que
mida 2 metros es claramente una persona alta, si previamente se ha tomado el
valor de persona baja y se ha establecido en 1 metro. Ambos valores están
contextualizados a personas y referidos a una medida métrica lineal.
La lógica difusa imita el pensamiento de decisión de un
humano por lo cual puedo hacer mención de que es parte de la inteligencia
artificial, aunque implementarla es muy matemático ya que se basa en funciones
de distintos planos que se cruzan para escoger la alternativa correcta o más
correcta dependiendo del punto de vista que se quiere imitar. Para utilizar de
buena forma la lógica difusa es necesario investigar y entender bien su forma teórica,
por lo cual invito a investigar sobre ella y así podrá darle un toque más de
realidad a su software, claro que todo depende del problema que se tenga.
Bueno ya llegado a la solución a implementar lo siguiente
fue diseñar la solución como sigue:
Nota: para no alargar la publicación se omite la explicación
de algunos conceptos relacionados a la lógica difusa y su implementación,
esperando que un buen lector pueda investigar sobre el tema.
Nociones a representar:
· Mientras más cercano esté el pie a la frontera de la tecla, menos grado de pertenencia tiene el pie de estar dentro de la tecla.
· Si el pie está más cercano al centro de la tecla, mayor grado de pertenencia tiene de estar dentro de la tecla.
Diseño a implementar:
o
Eje X.
o
Eje Z
· Para las variables lingüísticas X y Z se crearon 3 conjuntos difusos con sus respectivas funciones de pertenencia:
o
Fuera 1
o
Dentro
o
Fuera 2
o
IF (X IS Fuera1) AND (Z IS Fuera1) THEN Exito IS
NoToca
o
IF (X IS Fuera1) AND (Z IS Dentro) THEN Exito IS
NoToca
o
IF (X IS Fuera1) AND (Z IS Fuera2) THEN Exito IS
NoToca
o
IF (X IS Dentro) AND (Z IS Fuera1) THEN Exito IS
NoToca
o
IF (X IS Dentro) AND (Z IS Dentro) THEN Exito IS
Toca
o
IF (X IS Dentro) AND (Z IS Fuera2) THEN Exito IS
NoToca
o
IF (X IS Fuera2) AND (Z IS Fuera1) THEN Exito IS
NoToca
o
IF (X IS Fuera2) AND (Z IS Dentro) THEN Exito IS
NoToca
o
IF (X IS Fuera2) AND (Z IS Fuera2) THEN Exito IS
NoToca
- Gráficos de las funciones realizadas:
- Una vez inferida la conclusión utilizando la base de conocimientos, se debe determinar la salida del sistema difuso a través de la defuzificación.
- Se utilizará el método del centroide para defuzificar y determinar la salida del sistema.
- Si la salida es mayor a 72.14% entonces la tecla sonará (en caso de que en el frame anterior el pie estuviese fuera)
Bueno aunque lo anterior puede ser complicado es simple una vez investigado el tema, pero la idea principal es que haremos que el software tome la decisión de tocar o no la tecla dependiendo de que si cree que esta 100% adentro de la tecla, representado en el código como 72,14%, y así la variación que se tiene del error queda fuera ya que no estaría 100% dentro el pie de la tecla puesto si el valor es menor a 72,14% quiere decir que se esta dentro del rango de error que se tiene, esto se puede afinar para que se tenga un 90% o 80% de certeza o el que uno prefiera, obviamente llegar a 50% seria malo ya que seria como tirar una moneda al aire.
Para finalizar cabe mencionar que la solución funciona mucho mejor que las posibles soluciones de matemáticas lineal que habíamos tomado, obviamente nada es perfecto por lo cual todavía quedan detalles que afinar para que la experiencia en el proyecto del piano con kinect sea 100% agradable.
Como recomendación para cualquier lector:
dada mi experiencia en este proyecto y en proyectos anteriores, no se debe tener miedo a lo que se ve complicado en primera vista, puesto que implementar lo mas complicado se hace simple una vez se investiga y se entiende.