训练Android应用使用机器学习识别传感器模式

我希望我的应用程序能够检测携带手机的用户何时下落,只使用加速计数据(因为它是所有智能手机上唯一可用的传感器)。

我首先试图实现一种算法来检测自由落体(加速度计的总加速度接近于零,接着是由于地面打击引起的高加速度,以及当用户刚刚在楼下快速走动时短暂静止以消除误报),但是有一个很多方法下降,而且对于我的算法实现,我总是可以找到一个情况下,没有检测到跌倒,或者在哪里跌倒被错误地检测到。

我认为机器学习可以帮助我解决这个问题,通过学习来自不同设备的很多传感器值,不同的采样率,什么是跌倒,什么不是。

Tensorflow似乎是我所需要的,因为它似乎可以在Android上运行,但是虽然我可以找到教程来使用它进行离线图像分类( 在这里例如 ),但我没有找到任何帮助,使模型学习模式来自运动传感器的值。

我试着学习如何使用入门页面使用Tensorflow,但未能,可能是因为我不太流利的Python,并没有机器学习的背景。 (我在Java和Kotlin上流利,并习惯于Android API)。

我正在从社区寻求帮助,帮助我使用Tensorflow(或机器学习中的其他东西)来训练我的应用程序,以识别跌倒和其他运动传感器模式。

提醒一下,Android会以随机速率报告运动传感器值,但会为每个传感器事件提供纳秒级时间戳,可用于推断自上次传感器事件以来流逝的时间,并将传感器读数作为浮点数提供对于每个轴(x,y,z)都是32位)。

如果您的数据组织得很好,那么您可以使用基于Java的Weka机器学习环境: http : //www.cs.waikato.ac.nz/ml/weka/

您可以使用Weka来处理数据上的所有不同算法。 Weka使用ARFF文件作为数据。 如果您使用JSON或CSV格式的数据,创建这个数据非常容易。 一旦你找到一个算法/模型的工作,你可以很容易地把它放到你的Android应用程序: http : //weka.wikispaces.com/Use+Weka+in+your+Java+code

你真的不需要Tensorflow,如果你不需要深入的学习算法,我不认为你需要。 如果你确实需要深入的学习算法,那么DeepLearning4J是一个基于java的Android开源解决方案: https ://deearningarning4j.org/android

步骤1)

创建一个培训数据库。 您需要一些加速度计数据标记为“下降”和“不下降”的样本。 所以你会基本记录不同情况下的加速度并标注它们。 即给出数据量的数量级,从0.5到5秒的1000到100,000个周期。

第2步)

使用SK学习与Python。 尝试使用不同的模型来分类数据。 X是包含3个加速轴样本的向量。 Y是你的目标。 (下降/不下降)您将创建一个可以将X分类为Y的分类器。

步骤3)

让您的分类器与Android兼容。 Sklearn-porter将使用您喜欢的编码语言来移植您的代码。 https://github.com/nok/sklearn-porter

步骤4)

在你的应用中实现这个移植的分类器。 用数据提供它。