62 Cada gesto entrenado es almacenado en el repositorio de gestos y configuración para que DronGR lo pueda consultar durante la fase de reconocimiento. Cuando el desarrollador completa la estructura mostrada en la Figura 3-15 para el caso de ejemplo del giro a derecha, la misma es guardada bajo el nombre giroADerecha. Este nombre lo usará DronGR para ir a buscar al repositorio de gestos y configuración esa misma estructura y así acceder a la información que necesita para llevar a cabo el reconocimiento de gestos. En la siguiente sección se podrá ver de qué manera se utiliza cada parte del gesto entrenado para configurar y realizar el reconocimiento del giro a derecha.
3.2. Fase de reconocimiento
Una vez terminada la fase de entrenamiento, la fase de reconocimiento comienza cuando la aplicación de usuario construida sobre DronGR activa el reconocimiento de gestos. La activación es realizada de manera explícita por la aplicación en el instante en que necesite el soporte de DronGR para reaccionar ante gestos del usuario. Dicha activación incluye una lista con los nombres de los gestos que la aplicación necesita que sean reconocidos. Luego DronGR obtiene de la base de gestos y configuración los gestos entrenados para los nombres que la aplicación solicitó. A continuación con esa información se dan de alta las técnicas de reconocimiento y se las inicializa con los valores de referencia que correspondan. De esta manera las técnicas quedan en condiciones para dar soporte al reconocimiento de los gestos solicitados. Finalmente DronGR da inicio a la captura de movimientos para que se comiencen a reconocer los gestos.
3.2.1. Captura de movimientos y normalización
Para la captura de movimientos, primera etapa de la fase de reconocimiento, se empleó un enfoque inteligente que permite inducir la presencia de movimiento. Este enfoque consiste en realizar una evaluación de los últimos frames, para determinar si en un instante determinado se está realizando un movimiento por una parte del cuerpo o sensor en particular. Para esto se mantiene un buffer de n frames y cuando arriba el frame n + 1 se elimina el más antiguo. Cada vez que esto sucede, se extrae de la secuencia de frames la nube de puntos para la parte del cuerpo o sensor. Luego, se calcula el desvío de esos puntos como se muestra a continuación en las fórmulas.
63 Finalmente, cuando la magnitud del desvío está por encima de un umbral establecido se infiere que hay movimiento y en el caso contrario se infiere que no hay movimiento.
𝑚𝑜𝑑𝑢𝑙𝑜𝑝= √𝑥𝑝2+ 𝑦𝑝2+ 𝑧𝑝2 (𝑚𝑜𝑑𝑢𝑙𝑜 𝑑𝑒 𝑢𝑛 𝑝𝑢𝑛𝑡𝑜 𝑝) 𝑚𝑚𝑝 =∑ 𝑚𝑜𝑑𝑢𝑙𝑜𝑝 𝑛 𝑝=1 𝑛 (𝑚𝑒𝑑𝑖𝑎 𝑑𝑒𝑙 𝑚𝑜𝑑𝑢𝑙𝑜 𝑑𝑒 𝑙𝑜𝑠 𝑝𝑢𝑛𝑡𝑜𝑠) 𝑑𝑒𝑠𝑣í𝑜 = √∑ (𝑚𝑜𝑑𝑢𝑙𝑜𝑝− 𝑚𝑚𝑝) 2 𝑛 𝑝=1 𝑛
La detección de movimiento posibilita que la captura funcione como una máquina de estados cuya salida son instancias de movimiento. La máquina de estados se compone de dos estados, dos transiciones y acciones asociadas a cada transición. El primero de los estados, esperando movimiento, representa los instantes de tiempo en los que no hay movimiento y se analizan los frames que van ingresando al buffer. Cuando el desvío que se calcula entre los frames del buffer resulta estar por encima del umbral, se produce la transición al segundo estado, y se ejecuta una acción para permitir que el buffer sea ilimitado. El siguiente estado, capturando movimiento, representa los instantes de tiempo durante el que se realiza un movimiento. En este periodo se siguen analizando los últimos n frames del buffer. Cuando el desvío calculado entre esos frames vuelve a estar por debajo del umbral, se produce la transición al estado
esperando movimiento. Junto a esa transición, se ejecuta una acción que limita el buffer
a n frames y con todos los frames capturados se conforma una instancia de movimiento. Una vez obtenida una instancia de movimiento, se la normaliza análogamente a la fase de entrenamiento y se obtiene una instancia normalizada. La instancia de movimiento obtenida en esta fase está afectada por los mismos factores que se mencionaron durante la fase de entrenamiento. Por lo tanto, es conveniente realizar la normalización luego de obtener la instancia de movimiento para intentar reducir el ruido que posea. Contando con una instancia normalizada, luego de haber aplicado alguna de las transformaciones, puede procederse con el reconocimiento de la misma.
64
3.2.2. Reconocimiento de gestos
El reconocimiento de gestos es el proceso central de DronGR y tiene la responsabilidad de predecir a cuál de los gestos entrenados es semejante una instancia normalizada para actuar en consecuencia. Para decidir a cuál gesto entrenado es semejante una instancia normalizada, el proceso utiliza un indicador denominado nivel de similitud. Este nivel de similitud es un valor numérico que sirve para medir qué tan parecida es una instancia de movimiento a un gesto entrenado. Para obtener este indicador el proceso se apoya en las técnicas de reconocimiento asociadas al gesto entrenado. Finalmente, cuando el proceso decide que la instancia es semejante a un gesto en particular, notifica a la aplicación de usuario de dicho suceso. La notificación consiste en el nombre del gesto que se encontró semejante a la instancia normalizada para que la aplicación pueda ejecutar algún comportamiento personalizado al recibir la notificación. El Algoritmo 3-6 muestra formalmente los pasos para realizar el reconocimiento de una instancia normalizada entre un conjunto de gestos entrenados, dicho proceso se describe en detalle a continuación.
Cuando una instancia normalizada llega al reconocimiento de gestos, se calcula el nivel de similitud que tiene la instancia normalizada con respecto a cada gesto entrenado. Para esto el proceso recorre la lista de gestos entrenados y compara la instancia que se recibió contra cada gesto. La comparación entre un gesto entrenado y la instancia normalizada, devuelve el nivel de similitud que tiene la instancia con respecto al gesto entrenado y un valor que indica si ese nivel de similitud se encuentra dentro de los valores esperados para considerar a la instancia como un ejemplar correcto. El nivel de similitud es un valor real positivo que al acercarse a cero indica un mayor parecido entre la instancia y el gesto entrenado. El segundo de los valores entregados es un booleano que toma el valor verdadero cuando el nivel de similitud de la instancia está dentro de los valores esperados para un ejemplar correcto del gesto.
Para obtener el nivel de similitud entre una instancia normalizada y un gesto entrenado, la instancia normalizada es descompuesta en nubes de puntos que se evalúan con las técnicas asociadas al gesto entrenado. Un gesto entrenado posee asociada una lista de técnicas para cada parte del cuerpo o sensor relevante en el reconocimiento de ese gesto, que fue inicializada al comenzar la fase de reconocimiento. La comparación comienza recorriendo esa lista de técnicas. Para cada técnica extrae de la instancia normalizada la nube de puntos que corresponde a la parte del cuerpo o sensor para la que fue entrenada la técnica. A continuación, la técnica evalúa la nube de puntos e informa si se asemeja a su entrenamiento o no. Además, provee un nivel de similitud
65 para esa parte del cuerpo o sensor en particular. El valor se acumula a medida que el proceso se repite para todas las técnicas. Finalmente, el nivel de similitud entre el gesto y la instancia normalizada es el promedio de esos valores acumulados. La instancia normalizada se determina como reconocida si todas las técnicas la encontraron semejante a sus entrenamientos.