ios objective-c math accelerometer core-motion

ios - ¿Cómo funciona knocktounlock?



objective-c math (5)

  1. Para resolver este problema necesitas seleccionar la frecuencia. Tap (knock) tiene una frecuencia muy alta, por lo que debe elegir que la frecuencia del acelerómetro no sea inferior a 50 Hz (quizás incluso 100 Hz) para la detección de tap de calidad en el caso de ruido de otros movimientos.
  2. El uso de clasificadores es necesario, pero para ahorrar el consumo de batería, no debe llamar a un clasificador muy a menudo. Debe escribir un algoritmo simple que encuentre solo toques y situaciones similares a los knoks e informe que su programa necesita llamar a un clasificador.
  3. Tenga en cuenta que la señal del giroscopio también responde a los golpes, además de que la señal del giroscopio no se debe separar del componente constante y la señal del giroscopio contiene menos ruido.
  4. Ese es un buen video sobre los aspectos básicos del trabajo con sensores de teléfonos inteligentes: http://talkminer.com/viewtalk.jsp?videoid=C7JQ7Rpwn2k#.UaTTYUC-2Sp .

Estoy tratando de descubrir cómo knocktounlock.com es capaz de detectar "golpes" en el iPhone. Estoy seguro de que usan el acelerómetro para lograr esto, sin embargo, todos mis intentos tienen falsas banderas (si el usuario se mueve, salta, etc. a veces se dispara)

Básicamente, quiero poder detectar cuándo un usuario toca / golpea / golpea su teléfono (y puede distinguirlo de cosas que también pueden dar un impulso al acelerómetro). Así que estoy buscando miradas agudas. El dispositivo estará en el bolsillo por lo que el movimiento del dispositivo no será mucho.

He intentado cosas como paso alto / bajo (no estoy seguro de si habría una mejor opción)

Este es un duplicado de esto: detecte golpes duros en cualquier lugar del iPhone a través del acelerómetro, pero no ha recibido ninguna respuesta.

Cualquier ayuda / sugerencia sería increíble! Gracias.

EDITAR: Buscando más pensamientos antes de aceptar la respuesta a continuación. Me enteré de Knocktounlock y usan la cuarta derivada (jounce) para obtener mejores valores para luego analizar. Lo que es interesante.


Considero que golpear el iPhone es exactamente lo mismo que golpear dos teléfonos entre sí. Echa un vistazo a este Github Repo,

https://github.com/joejcon1/iOS-Accelerometer-visualiser

Cree y ejecute la aplicación en el iPhone y eche un vistazo a los picos en la línea verde. Se puede ver claramente el valor de la espiga,

Golpeando el iPhone:

Como puede ver, la hora del pico real es muy corta cuando toca el teléfono. Sin embargo, los patrones de picos son poco diferentes en Hard Knock y Soft knock, pero pueden distinguirse programáticamente.

Ahora veamos el patrón del acelerómetro cuando el iPhone se mueve libremente en el espacio,

Como puede ver, las espigas tienen forma de campana, lo que significa que toma un poco de tiempo para que el valor de la espiga vuelva a 0.

Mediante estos patrones será más fácil determinar el patrón de detonación. Buena suerte.

Además, esto agotará su batería, ya que el sensor siempre estará en funcionamiento y el iPhone debe mantener la conexión con Mac a través de Bluetooth.

PS: También verifique esta respuesta, https://.com/a/7580185/753603


Creo que el camino a seguir aquí es usar el reconocimiento de patrones con datos del acelerómetro . Podría (escribir y) capacitar a un clasificador (por ejemplo, el vecino más cercano a K) con los datos que recopiló y que se ha clasificado a mano. Las redes neuronales también son una opción. Sin embargo, habrá muchas maneras diferentes de resolver ese problema. Pero probablemente no haya una manera directa de lograr esto.

Algunos artículos que muestran enfoques de reconocimiento de patrones para temas similares (actividad, movimiento), como http://www.math.unipd.it/~cpalazzi/papers/Palazzi-Accelerometer.pdf (algunos más, pero no tengo permiso para publicarlos) con mi cuenta de reputación. Puede buscar "datos de acelerómetro de reconocimiento de patrones")

También hay una tesis de maestría sobre reconocimiento de gestos en el iPhone: http://klingmann.ch/msc_thesis_marco_klingmann_iphone_gestures.pdf

En general no lograrás una clasificación 100% correcta. Dependiendo del tiempo / conocimiento que se tenga, el resultado variará entre una clasificación buena y otra que podríamos usar aleatoriamente.


Me sorprende que la 4ta derivada sea necesaria, intuitivamente me parece que la 3ª ("imbécil", la derivada de la aceleración) debería ser suficiente. Sin embargo, es un gran indicio de lo que hay que vigilar.

Me parece bastante simple: recopilar datos del acelerómetro a altas velocidades, trazar en el gráfico, observar. Calcula a partir de esa primera derivada, grafica y observa. Luego enjuague y repita, derivado del último. Sacar conclusiones. Dudo mucho que tenga que hacer un reconocimiento de patrones per se, clustering / classifiers / what-have-you - creo que verá un pico muy distinto en uno de sus gráficos, tal vez solo necesite ajustar la tasa de recopilación y el suavizado.

Es más interesante para mí, ¿por qué no tiene que estar ejecutando la aplicación KnockToUnlock para que esto funcione? Y si se estaba ejecutando en segundo plano, quienes lo dejaron correr allí por tiempo ilimitado. No creo que se acelere. Califica para una ejecución de fondo ilimitada. Y después de reflexionar un poco, supongo que la razón es que la aplicación utiliza Bluetooth para conectar Mac como accesorio, y como tal recibe un pase de iOS para ejecutarse en segundo plano (y chupar la batería, shhht)


Sin embargo, podría ser útil agregar a la mezcla la salida del micrófono para escuchar ruidos muy cortos y fuertes al mismo tiempo que se detectó un posible movimiento de "detonación".