发新帖

锤子科技--利用TensorflowLite分辨用户手握手机的姿势

[复制链接]
146 2

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
各位好,今天给大家分享一下锤子科技如何利用TensorflowLite帮助区分用户手握手机的姿势问题。
问题背景介绍:
大家都知道,锤子科技在几个月前发布了坚果3手机,由于摄像头是在手机屏幕的下边,因此有一个“倒置拍摄”功能。这个功能初始的目的是:当用户站立,手持手机正对自己,此时,将手机旋转180度,就可以激活拍摄了。
通过一段时间的用户反馈,我们发现这个功能的误判率非常高,最终导致无法正常使用,并产生了一些不好的影响。看到这些反馈后我们决定优化一下这个功能。

在手机上想判断一个姿势,首先我们想到的就是利用手机上的传感器,利用重力和加速度传感器,我们可以很方便的判断出手机当前的姿势。通过两种传感器我们可以得到3种数值。第一种是方位:即,东南西北。第二种是仰角(pitch):即,手机平放时候“抬头”或者“翘尾”的角度,第三种是翻滚角(roll):即,手机平放时候左右翻滚手机的角度。

接下来我们做一个实验看看我们能否能通过传感器的这些值区分出不同的动作。首先说一下实验的一些初始条件:以用户正握手机且摄像头对准面部作为动作起点,接下来一定时间(比如1秒)后作为终点。我们会记录这段时间内传感器的值。如果标准开启动作和其他动作中,传感器的值是有明显区别的,我们就可以把这个问题看做一个简单的分类问题。分类的数据就是1秒内各个传感器的值。通过实验,我们发现当用户做一个标准的倒置动作时,pitch会有较大变化(180度左右),roll的变化并不大。当我们做一些其他动作时比如从起始位置到双手自然下垂,此时roll的变化非常大。

有了以上实验结果,我们就可以进行数据的收集了,收集的过程相对简单。我们写了一个简单的数据录制程序,由于即使做同一个动作,不同人的使用习惯也会有一些微小的差别,因此我们请了很多不同的测试人员,按照他们自己的习惯做相机倒置动作,和其他动作。我们大体上收集了1000条数据,400条标准动作,600条其他动作。通过一定的数据标准化,我们就可以利用TensorflowLite进行模型训练了。

TensorflowLite小巧精悍,还支持NNAPI和NEON,对于我们这个case,TFLite提供的所有算子功能完全满足。大概的网络结果是这样的:输入层是120维数据,就是简单的pitch和roll的组合,用一个简单的2个隐含层的网络,即可。这样训练结束后我们就可以把模型放到手机上,和相关功能进行整合。整合后的体验比之前要好很多,减少了很多误判情形。

总结:通过分析之前体验不好的代码发现,之前的判断条件非常简单,只使用了一个转屏回调,没有考虑多种情况,因此造成了很多误判。大家今后如果遇到感觉有明显边界,但是又找不到如何表示具体边界的场景,可以尝试利用机器学习的方式解决。

精彩评论2

舟3332  TF芽芽  发表于 2018-6-14 09:35:33 | 显示全部楼层
太赞了~ 用的什么模型呀?
congguohua  TF荚荚  发表于 7 天前 | 显示全部楼层
舟3332 发表于 2018-6-14 09:35
太赞了~ 用的什么模型呀?

对不起,时间匆忙没有写的很详细,模型就是用的简单的全连接,稍后会补全一些细节。
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表