studio programacion móviles libros desarrollo desarrollar curso con aprende aplicaciones java embedded accelerometer gesture-recognition

java - móviles - manual de programacion android pdf



Cómo hacer un reconocimiento de gestos usando acelerómetros (4)

Mi objetivo es reconocer los gestos simples de acelerómetros montados en un punto de sol. Un gesto podría ser tan simple como girar el dispositivo o mover el dispositivo con diferentes movimientos. Actualmente, el dispositivo solo tiene acelerómetros, pero estamos considerando agregar giroscopios si lo hiciera más fácil / más preciso.

¿Alguien tiene recomendaciones sobre cómo hacer esto? ¿Alguna biblioteca disponible en Java? ¿Proyectos de ejemplo que recomiendas? Papeles que recomiendas

The sun spot es una plataforma Java para ayudarlo a crear prototipos rápidos de sistemas. Está programado usando Java y puede retransmitir comandos a una estación base conectada a una computadora. Si necesito explicar cómo funciona el hardware, déjeme un comentario.


Los acelerómetros registrarán una aceleración constante debido a la gravedad, más cualquier aceleración a la que el usuario se someta, más ruido.

Deberá filtrar a bajo nivel las muestras para eliminar todo el ruido irrelevante que pueda. Lo peor del ruido generalmente será una frecuencia más alta que cualquier aceleración inducida por el hombre.

Tenga en cuenta que cuando el usuario no está acelerando el dispositivo, la única fuerza se debe a la gravedad y, por lo tanto, puede deducir su actitud en el espacio. Además, cuando la aceleración total varía mucho de 1g, debe ser debido a que el usuario acelera el dispositivo; al restar la última estimación de gravedad conocida, puede estimar aproximadamente en qué dirección y cuánto está acelerando el usuario el dispositivo, y así obtener datos que puede comenzar a coincidir con una lista de gestos conocidos.

Con un solo acelerómetro de tres ejes puede detectar el cabeceo y el balanceo actuales, y también la aceleración del dispositivo en línea recta. La integración de la aceleración menos la gravedad te dará una estimación de la velocidad actual, pero la estimación se alejará rápidamente de la realidad debido al ruido; tendrá que hacer suposiciones sobre el comportamiento del usuario antes / durante / durante los gestos, y guiarlos a través de su UI, proporcionar puntos donde el dispositivo no se está acelerando y puede restablecer sus estimaciones y estimar de manera fiable la dirección de la gravedad. Es poco probable que la integración de nuevo para encontrar una posición proporcione resultados utilizables durante un período de tiempo útil.

Si tiene dos acelerómetros de tres ejes separados por distancia, o uno y algunos giroscopios, también puede detectar la rotación del dispositivo (al comparar los vectores de aceleración, o directamente desde los giroscopios); la integración del momento angular en un par de segundos le dará una estimación de la desviación actual con respecto a cuando comenzó a integrarse, pero una vez más esto se desviará de la realidad rápidamente.


Añadiendo al punto de sombra de luna acerca de tener que restablecer su línea de base para la gravedad y la rotación ...

A menos que se espere que el dispositivo tenga momentos de reposo estables (donde la única fuerza que actúa sobre él es la gravedad) para restablecer su línea de base de medición, su sistema eventualmente desarrollará un equivalente de vértigo.


Lo que no se ha mencionado aún es el reconocimiento de gestos real. Esta es la parte difícil. Después de haber limpiado sus datos (filtrado de paso bajo, normalizado, etc.) todavía tiene la mayor parte del trabajo por hacer.

Eche un vistazo a los modelos ocultos de Markov. Este parece ser el enfoque más popular, pero su uso no es trivial. Por lo general, hay un paso de preproceso. Primero, hacer STFT y agrupar el vector resultante en un diccionario, luego alimentarlo en un HMM. Eche un vistazo a jahmm en el código de google para una lib de java.


Dado que nadie parece haber mencionado las bibliotecas existentes, como lo solicita OP, aquí va:

http://www.wiigee.org/

Destinado a ser utilizado con el Wiimote, wiigee es una implementación basada en Java de código abierto para la coincidencia de patrones basada en las lecturas del acelerómetro. Lo logra usando Hidden Markov Models [1].

Al parecer, se utilizó con gran éxito por una empresa, Thorn Technologies, y han mencionado su experiencia aquí: http://www.thorntech.com/2013/07/mobile-device-3d-accelerometer-based-gesture-recognition /

Alternativamente, podría considerar FastDTW ( https://code.google.com/p/fastdtw/ ). Es menos preciso que el DTW normal [2], pero también es menos costoso desde el punto de vista informático, lo cual es un gran problema cuando se trata de sistemas integrados o dispositivos móviles.

[1] https://en.wikipedia.org/wiki/Hidden_Markov_model
[2] https://en.wikipedia.org/wiki/Dynamic_time_warping

EDITAR: OP ha mencionado en uno de los comentarios que completó su proyecto, con un 90% de precisión en el campo y un tiempo de cálculo inferior a milisegundos, utilizando una variante de Recognizer de $ 1 . También menciona que la rotación no era un criterio en su proyecto.