将手势识别用作 Android 上的差异化功能





0/5 (0投票)
在本文中,我们将介绍如何从传感器数据中获取有用信息,然后使用 Intel Context Sensing SDK 示例来演示轻扫检测、摇动检测、图形检测。
Intel® 开发者中心 为跨平台应用开发、平台和技术信息、代码示例以及同行专业知识提供工具和操作指南,帮助开发者创新并取得成功。加入我们的社区,获取 Android、物联网、Intel® RealSense™ 技术 和 Windows 的相关信息,下载工具,访问开发套件,与志同道合的开发者分享想法,并参与黑客马拉松、竞赛、路演和本地活动。
概述
移动设备中的传感器通常包括加速度计、陀螺仪、磁力计、压力传感器和环境光传感器。用户在移动、摇动或倾斜设备时会产生运动事件。我们可以使用传感器的原始数据来实现运动识别。例如,当来电时,您可以通过翻转手机来静音;当抬起设备时,您可以启动相机应用程序。使用传感器创建便捷的功能有助于提升用户体验。
Intel® Context Sensing SDK for Android* v1.6.7 发布了多个新的上下文类型,如设备位置、耳部触摸、轻扫手势和图形手势。在本文中,我们将介绍如何从传感器数据中获取有用信息,然后使用 Intel Context Sensing SDK 示例来演示轻扫检测、摇动检测、图形检测。
引言
一个常见的问题是如何从硬件层将传感器连接到应用处理器 (AP)。图 1 显示了传感器连接到 AP 的三种方式:直接连接、独立传感器中心和 ISH(集成传感器中心)。
当传感器连接到 AP 时,即为直接连接。但是,直接连接的问题在于,它会消耗 AP 的电量来检测数据变化。下一个演进是独立传感器中心。它可以解决功耗问题,并且传感器可以始终处于工作状态。即使 AP 进入 S3[1] 状态,传感器中心也可以使用中断信号唤醒 AP。下一个演进是集成传感器。在这里,AP 包含一个传感器中心,这可以降低整个设备的 BOM 成本。
传感器中心是 MCU(多点控制单元),您可以使用可用语言(C/C++ 语言)编译算法,然后将二进制文件下载到 MCU。2015 年,Intel 将发布用于平板电脑的 CherryTrail-T 平台,以及用于 2 合 1 设备的 SkyLake 平台,两者都将采用传感器中心。有关集成传感器中心使用方法的更多信息,请参阅 [2]。
图 2 显示了传感器坐标系,其中加速度计测量 x、y、z 轴上的速度,陀螺仪测量绕 x、y、z 轴的旋转。
表 1 显示了 Android Lollipop 版本中包含的新手势。
表 1:Android* Lollipop 的新手势
名称 | 描述 |
SENSOR_STRING_TYPE_PICK_UP_GESTURE | 在设备被拿起时触发,无论之前在何处(桌面、口袋、包里)。 |
SENSOR_STRING_TYPE_GLANCE_GESTURE | 通过特定的运动短暂开启屏幕,让用户能够查看屏幕上的内容。 |
SENSOR_STRING_TYPE_WAKE_GESTURE | 根据设备特有的运动来唤醒设备。 |
SENSOR_STRING_TYPE_TILT_DETECTOR | 每次检测到倾斜事件时生成一个事件。 |
这些手势定义在 Android Lollipop 的源代码目录 /hardware/libhardware/include/hardware/sensor.h 中。
手势识别过程
手势识别过程包括预处理、特征提取和模板匹配阶段。图 4 显示了这个过程。
在接下来的内容中,我们将分析这个过程。
预处理
获取原始数据后,将开始数据预处理。图 5 显示了设备向右轻扫一次时的陀螺仪数据图。图 6 显示了设备向右轻扫一次时的加速度计数据图。
我们可以编写一个程序,通过 Android 设备上的网络接口发送传感器数据,然后编写一个将在 PC 上运行的 Python* 脚本。这样我们就可以动态地从设备获取传感器图。
此步骤包含以下项目
- 一台运行 Python 脚本以接收传感器数据的 PC。
- 一台运行应用程序以收集传感器数据,然后将其发送到网络的 DUT。
- 一个 Android adb 命令,用于配置接收和发送端口 (adb forward tcp: port tcp: port)。
在此阶段,我们将去除奇异点,并像通常那样使用滤波器来消除噪声。图 8 中的图显示设备旋转了 90。,然后又回到了初始位置。
特征提取
传感器可能包含一些会影响识别结果的信号噪声。例如,FAR(错误接受率)和 FRR(错误拒绝率)显示了识别拒绝的速率。通过对不同传感器数据进行融合,我们可以获得更准确的识别结果。传感器融合[5] 已被应用于许多移动设备。图 9 显示了一个使用加速度计、磁力计和陀螺仪传感器获取设备方向的示例。通常,特征提取使用 FFT 和零交叉方法来获取特征值。加速度计和磁力计很容易受到 EMI 的干扰。我们通常需要校准这些传感器。
特征包括最大/最小值、峰值和谷值,我们可以提取这些数据进入下一步。
模板匹配
通过简单分析加速度计传感器的图,我们发现:
- 一次典型的向左轻扫手势包含两个谷和一个峰
- 一次典型的向左轻扫两次手势包含三个谷和两个峰
这表明我们可以设计非常简单的基于有限状态机的轻扫手势识别。与基于 HMM[6] 模型的手势识别相比,它更健壮,算法精度更高。
案例研究:Intel® Context Sensing SDK
Intel Context Sensing SDK[7] 使用传感器数据作为提供者,将传感器数据传输到上下文感知服务。图 11 显示了详细的架构信息。
目前该 SDK 支持图形、轻扫和耳部触摸手势识别。您可以从最新的发行说明[8] 中获取更多信息。请参阅文档了解如何开发应用程序。下面是运行 ContextSensingApiFlowSample 示例应用程序的设备。
Intel® Context Sensing SDK 支持轻扫方向为加速度计传感器 x 轴和 z 轴方向,不支持 z 轴轻扫。
摘要
传感器已广泛应用于现代计算设备,在移动设备中,运动识别是一项重要的差异化功能,可以吸引用户。传感器使用是提升移动设备用户体验的重要功能。当前发布的 Intel Context Sensing SDK v1.6.7 加速了用户普遍寻求的简单传感器使用。
关于作者
Li Liang 在长春工业大学获得信号与信息处理硕士学位。他于 2013 年加入英特尔,担任应用工程师,从事客户端计算赋能工作。他专注于 Android 平台上的差异化赋能,例如多窗口等。
参考
[1] http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface
[2] http://ishfdk.iil.intel.com/download
[3] http://cache.freescale.com/files/sensors/doc/app_note/AN4317.pdf
[4] https://codeproject.org.cn/Articles/729759/Android-Sensor-Fusion-Tutorial
[5] http://en.wikipedia.org/wiki/Sensor_fusion
[6] http://en.wikipedia.org/wiki/Hidden_Markov_model
[8] https://software.intel.com/en-us/context-sensing-sdk
有用链接
https://aosp.org.cn/devices/sensors/sensor-stack.html
https://graphics.ethz.ch/teaching/former/scivis_07/Notes/Slides/07-featureExtraction.pdf