基于智能手机内置传感器的用户行为实时识别该怎样实现

我应该有资格回答这个问题,这算是我专业。安卓上实现行为识别,主要就是在线和离线两类。离线的比较好实现,意思就是模型构建不在手机上,在随便一个服务器上,用任何语言都可以实现。最后只要与安卓手机进行通信就好了。在识别行为时,手机端采集信号,滑动窗口提取特征,然后通过接口送入服务器处理,然后将结果返回。离线的好处是节省计算资源,比较快,缺点是模型是静态的,而实际情况往往是动态的。而且客户端与服务器的通信也是需要消耗资源的。不过,作为研究人员,我们基本上是在电脑上处理的,因为比较偏重算法研究。在线的行为识别就是指在手机上完成数据收集,预处理,特征提取,以及模型构建等一系列过程。安卓实现时可以调用很多第三方的库,比如著名的weka就有针对java的sdk。其他有一些机器学习工具包也有java版本,例如deep learning4j。这样的好处是过程统一,模型可更新。但缺点也是很明显的。手机的计算资源有限,可能会影响应用速度和流畅度。而且如果你程序写的不好没有用多线程,很可能会卡住导致后面的数据收集等操作都没有作用。而且,现在最流行的机器学习库基本都是python的,用java毕竟还是有点力不从心。不过,对于非研究目的的工程人员,入似乎也只能这样。当然你可以考虑用java来调用matlab等第三方语言,这都是可以实现的。这部分需要的是程序设计技巧,与研究关系不大。认清自己方向,然后再去做。
■网友
提供一个简单的思路,以android系统为例。主要分为在线和离线两个部分:1.离线部分:(1)离线采集带标签的数据集,提取特征、归一化等预处理,训练数据集和测试数据集分别保存至文件中(matlab实现);(2)通过交叉验证等方法,确定最优的模型参数和特征值,将训练数据和测试数据的特征值保存至文件中(matlab实现);(3)因为android主要使用java进行开发,所以这里使用java语言开发一个训练程序。使用这个训练程序,读取(2)中得到的训练数据集和测试数据集,使用第三方的库进行训练(or自己编写的库),参数设置为与(2)相同,训练得到模型后,使用测试集核对一遍,以免发生错误。最后将该模型序列化保存至文件中。模型序列化操作实质为java对象的序列化。2.在线部分:(1)将离线阶段得到的序列化后的模型进行反序列化,得到模型的java对象;(2)监听传感器的变化,使用和离线处理部分相同的特征提取方法,当然这个地方需要使用java编写。(3)当得到特征后,使用模型进行识别,即可得到用户的运动状态。补充,若使用第三方的库,离线的java程序和在线的android程序均需要导入第三方的库。此外,android支持NDK开发,理论上来说通过JNI调用C++来实现上述过程,应该可以得到更高效的识别算法,不过性能有待验证。


    推荐阅读