作者:TalkingData俞多
目前很多设备都支持抬起唤醒。使用支持抬起唤醒功能的手机,在屏幕熄灭时,不用点击手机按钮,只需拿起手机就可以点亮屏幕,为很多人提供了方便,同时也延长了手机按键的寿命。
(资料图)
手机是如何知道你想点亮屏幕的呢,或者说,手机是如何知道你拿起了它呢?
当我们拿起手机时,手机的传感器数据会跟随拿起的动作产生变化。传感器数据是连续的信号数据,观察一段时间内的传感器变化会更有意义。
这里我做了一个简单的数据采样,可以看一下当设备静止时,加速度传感器和陀螺仪的数据表现:
加速度X,Y,Z轴数据:
陀螺仪X,Y,Z轴数据:
当拿起手机时,加速度传感器和陀螺仪的数据表现:
加速度X,Y,Z轴数据:
陀螺仪X,Y,Z轴数据:
对比两组数据可以看出,当拿起手机时传感器数据的变化非常明显。那我们就可以假设手机系统中有一个特殊的模块,可以根据传感器的数据变化,来识别用户拿起手机的动作。该模块中接收到的传感器数据的变化规律类似上图,那么就可以判断用户当前已经拿起了手机,进而把识别结果传递给显示模块,最终点亮屏幕。
这里的变化规律指的是连续数据的特征值, 如统计学中的均值、方差、最值等。
通过用户在操作手机时产生的传感器数据,我们提取出了每组数据的均值、方差。把每组数据的均值(x轴)、方差(y轴)以散点图的形式展现出来(如下图),可以观察到,抬起动作的特征数据(蓝色点)基本都在蓝色圈的范围之内,而其它动作产生的特征数据(除蓝色点外其它颜色的点)都分散在坐标系的各个位置。
有了这一规律,我们就可以基本确定抬起动作的特征数据范围,通过编写程序来判断本次操作是否为抬起动作。
综上所述,想要判断抬起动作,需要预先收集大量的(拿起手机行为的)传感器数据,把这些传感器的特征值提取并归纳,看这些值都在怎样的范围波动。
有了取值范围,就可以编写程序来判断新产生的数据的特征值是否在这个范围之内,综合多个特征的判断可以给出一个总体评分,来识别用户新产生的数据属于抬起动作的概率为多少。
最终的识别结果被传递给手机显示模块,如果被识别为抬起动作,则唤醒屏幕。如下图所示:
通过以上步骤,可以简单实现一个抬起唤醒的功能。但目前实际应用的抬起唤醒功能要比上述过程复杂的多,大多数都是通过机器学习来实现的,并且不仅要考虑到存储资源及电量的消耗、还要考虑行为识别的准确率。