检测Android设备上的运动模式

时间:2015-03-03 09:51:23

标签: android mobile android-sensors motion

我想在Android手机上检测特定的动作模式,例如:如果我做五个坐姿。

[注意:我目前正在检测运动,但所有方向的运动都是相同的。]

我需要的是:

  1. 我需要向下,向上,向前和向后区分动作。
  2. 我需要从地面找到手机的高度(以及持有手机的人的身高)。
  3. 是否有任何样本项目已实施模式运动检测?

4 个答案:

答案 0 :(得分:6)

这并非不可能,但考虑到手机中加速度计和陀螺仪的准确性有了很大提高,它可能并不是非常准确。

您的应用将执行的操作是获取传感器数据,并执行regression analysis.

1)您需要构建一个数据模型,您将其分类为五个坐着和站立。这可以通过要求用户做五个坐着或站立,或者通过从您之前收集的数据加载具有更精细调整的模型的应用程序来完成。你可以做一些技巧,例如加载几个不同高度的模型,并要求用户在应用程序中提交自己的高度,以使用最佳模型。

2)运行时,您的应用会尝试使data from the sensors(Android有great libraries for this)适合您制作的模型。希望当用户执行五个坐立时,他将生成一组类似于您定义的五个坐位的运动数据,您的算法会接受它。

这里的许多工作是组装和分类您的模型,并使用它直到您获得可接受的准确性。专注于使其他上下运动独立的立场 - 例如,可能有一个迹象表明在数据中延伸腿部,然后是完全矫直的不同形状。或者,如果您希望手机放在口袋中,您可能没有很多旋转运动,因此您可以拒绝从陀螺仪中记录下大量变化的测试装置。

答案 1 :(得分:2)

这是不可能的。您可以识别向下和向上比较加速度与主重力的比较,但是当您上升时,或者当您打招呼时,您如何知道您的手机是否在后袋中?如果5个站起来或5个hellos? 前进和后退更加难以预测。颠倒的手机有什么前瞻性的?如果从电话的角度来看,该怎么办呢? 地面以及高度完全没有测量。对于矮人或巨人来说,手机会以精确的方式移动并产生加速度 - 这更多地取决于人的行为或者在高度上一动不动。

答案 2 :(得分:1)

我不一定同意亚历克斯的回应。这是可能的(虽然可能没有你想要的那么准确)使用加速度计,设备旋转和ALOT试验/错误和数据挖掘。

我认为这可行的方式是定义用户持有设备的特定方式(或设备被锁定并定位在用户身上)。当他们经历运动时,方向与加速度和时间相结合将决定正在执行什么样的运动。您将需要使用类对象,如OrientationEventListener,SensorEventListener,SensorManager,Sensor和各种计时器,例如Runnables或TimerTasks。

从那里,你需要收集大量数据。观察,记录和研究用于执行特定操作的数字,然后提出一系列定义每个移动和子移动的值。我的意思是子运动,也许是仰卧起坐有五个部分:

1)在时间x

时手机方向为x值的休息位置

2)Situp开始,手机方向是时间y(大于x)的y值范围

3)Situp处于最终位置,其中手机方向是时间z(大于y)的z值范围

4)Situp正在反弹(用户正在倒退到地板上),其中电话方向是时间v(大于z)的y值范围

5)Situp回到休息位置,电话方向是时间n(最长和最后一次)的x值

也为此添加加速度,因为在某些情况下可以假设加速度。例如,我的假设是人们以比他们倒退时更快的加速度执行实际的仰卧起坐(上面的故障中的步骤1-3)。一般来说,大多数人都会慢下来,因为他们看不到他们背后的东西。这也可以用作确定用户方向的附加条件。但是,对于所有情况,这可能并非如此,这就是您需要进行数据挖掘的原因。因为我还可以假设,如果有人做了很多仰卧起坐,那么最后的仰卧起坐非常缓慢,然后由于精疲力竭就会崩溃回到休息位置。在这种情况下,加速度将与我最初的假设相反。

最后,请查看动作传感器:http://developer.android.com/guide/topics/sensors/sensors_motion.html

总而言之,这真的是一个数字游戏,结合你自己的猜测"。但你可能会对它的运作情况感到惊讶。也许(希望)足以满足您的目的。

祝你好运!

答案 3 :(得分:1)

这是一个研究主题,我可能在这里发布它为时已晚,但我还是在觅食文学,那么呢?

所有类型的机器学习方法都是针对这个问题设定的,我在路上会提到一些。 Andy Ng的MOOC on machine learning为你提供了进入该领域的入口点,以及你可以立即投入实践的Matlab / Octave,它也揭开了怪物的神秘面纱("支持向量机" .. .wtf?)。

我想检测一下是否有人因手机加速和角度而喝醉,因此我会调查神经网络问题(他们基本上对every issue有好处,如果你能负担得起硬件),因为我不想假设要预先定义的模式。

您的任务可以基于模式进行处理,应用于分类golf play motionsdancing,行为every day walking patterns和两次drunk driving detection one的方法}解决了寻找实际上是纵向运动而不是其他每个方向的基线的问题,这可能有助于找到你需要的基线,比如地面水平。

这是一个方面和方法的密集灌木,低于其他一些。欢迎来到Orwellian overkill,好朋友。

Lim e.a. 2009年:Real-time End Point Detection Specialized for Acceleration Signal

他&尹2009:Activity Recognition from acceleration data Based on Discrete Consine Transform and SVM

最奇怪的标题,非常技术性和瑞士风格: Dhoble e.a. 2012年:Online Spatio-Temporal Pattern Recognition with Evolving Spiking Neural Networks utilising Address Event Representation, Rank Order, and Temporal Spike Learning

一种希腊语,享乐主义,艺术性和有趣的,如果它可以被看作是一种舞蹈,可能会给醉酒检测提供一个很好的方法:

Panagiotakis e.a。:Temporal segmentation and seamless stitching of motion patterns for synthesizing novel animations of periodic dances

这个使用可视化数据,但引导您完成神经元网络分类器的matlab实现:

Symeonidis 2000:Hand Gesture Recognition Using Neural Networks