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

时间:2017-03-20 10:31:40

标签: android machine-learning tensorflow accelerometer android-sensors

我希望我的应用能够检测当携带手机的用户跌倒时,只使用加速度计数据(因为它是&#39)只有所有智能手机都有传感器。)

我首先尝试实施一种算法来检测自由落体(加速度计总加速度接近于零,然后是由于地面撞击导致的高加速度,以及当用户刚刚快速走下楼梯时短暂的静止以消除误报),但是有很多方法可以摔倒,而且对于我的算法实现,我总能找到一个未检测到跌倒的情况,或者错误地检测到跌落的情况。

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

Tensorflow似乎是我需要的,因为它似乎可以在Android上运行,但是虽然我可以找到教程将其用于离线图像分类(here for example),但我没有找到任何帮助制作从运动传感器值中学习模式的模型。

我尝试使用“入门”页面学习如何使用Tensorflow,但未能成功,可能是因为我不熟悉Python,并且没有机器学习背景。 (我精通Java和Kotlin,习惯使用Android API)。

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

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

2 个答案:

答案 0 :(得分:1)

如果您的数据组织良好,那么您可以使用基于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://deeplearning4j.org/android

答案 1 :(得分:0)

步骤1)

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

步骤2)

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

步骤3)

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

步骤4)

在您的应用中实施此移植分类器。用数据喂它。