Quantcast
Channel: 英特尔开发人员专区文章
Viewing all articles
Browse latest Browse all 583

使用手势识别作为 Android* 上的差异化特征

$
0
0

下载文档

概述

移动设备中的传感器通常包括加速计、陀螺仪、磁力仪、压力传感器和环境光传感器。 当用户移动、摇晃或倾斜设备时,会生成动作事件。 我们可以使用传感器的原始数据实现动作识别。 例如,显示来电的时候,您可以通过滑动将手机设为静音,或者您还可以通过举起设备启动摄像头应用。 使用传感器创建这些便利的特性,有利于提升用户体验。

面向 Android* v1.6.7 的英特尔® 环境感知 SDK 已发布了几种新的环境类型,比如设备位置、耳朵触摸、滑动手势和符号手势。 我们将在本文介绍如何获取传感器数据的有用信息,然后使用英特尔环境感知 SDK 示例验证滑动检测、摇晃检测和符号检测。

简介

常见问题是如何将传感器连接至硬件层的应用处理器 (AP)。 图 1 所示为三种将传感器连接至 AP 的方法:直连、独立传感器中枢和 ISH(集成传感器中枢)。


图 1.对比不同传感器解决方案

传感器连接 AP,属于直连。 不过直连所面临的问题是,直连需要消耗 AP 的能源来检测数据变化。 下一代连接方式是独立传感器中枢。 它克服了能耗问题,而且传感器能够以始终在线的方式运行。 即使 AP 进入 S3[1]状态,传感器中枢也可使用中断信号来唤醒 AP。 再次经过演进,出现了集成传感器。 AP 包含一个传感器中枢,降低了整台设备 BOM 的成本。

传感器中枢是一个 MCU(多点控制单元)。您可以使用提供的语言(C/C++ 语言)编译算法,然后将二进制代码下载至 MCU。 2015 年,英特尔将发布面向平板电脑的 CherryTrail-T 平台、面向 2 合 1 设备的 SkyLake 平台,这两款平台均采用传感器中枢。 请参阅 [2],了解更多关于使用集成传感器中枢的信息。

图 2 所示为传感器坐标系统,其中加速计测量的是沿着 x、y 和 z 轴的速度,而陀螺仪测量的是沿着 x、y 和 z 轴的旋转。


图 2.加速计和陀螺仪传感器坐标系统


图 3.各轴在不同位置的加速值[3]

表 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每次检测到倾斜事件后均生成事件。

这些手势在源代码目录 /hardware/libhardware/include/hardware/sensor.h中进行定义。

手势识别流程

手势识别流程包括预处理、特征提取和模板匹配三个阶段。 流程图请见图 4。


图 4. 手势识别流程

我们将通过以下内容分析该流程。

预处理

获取原始数据后,开始进行数据预处理。 图 5 所示为向右滑动设备一次后陀螺仪的数据图表。 图 6 所示为向右滑动设备一次后加速计的数据图表。


图 5.
陀螺仪传感器数据变化表(向右滑动一次)


图 6. 加速计传感器数据变化表(向右滑动一次)

我们可以编写程序,以便使用 Android 设备通过网络接口发送传感器数据,然后编写可在电脑上运行的 Python* 脚本。 这样,我们就可以动态获取设备的传感器数据图表。

这一步骤涉及以下内容:

  • 运行 Python 脚本以接收传感器数据的电脑。
  • 收集传感器数据然后将其发送至网络的 DUT-run 应用。
  • 配置数据收发端口的 Android adb 命令 (adb forward tcp: port tcp: port)。


图 7.
如何动态显示传感器数据图表

在这一阶段,我们要删除奇异点,并与往常一样使用过滤器消除噪声。 图 8 中的图表显示,设备旋转了 90,然后回转到原点。


图 8.删除偏差和噪声奇异点[4]

特征提取

传感器可能包含会影响识别结果的信号噪声。 例如,FAR(错误接受率)和FRR(错误拒绝率)表示识别拒绝的比率。 通过使用不同传感器数据融合,我们能够得出更准确的识别结果。 传感器融合[5]已应用到许多移动设备之中。 图 9 举例说明了如何使用加速计、磁力仪和陀螺仪传感器了解设备的方向。 一般来说,特征提取采用 FFT 和零交叉方法获取特征值。 加速计和磁力仪非常容易受到 EMI 的干扰。 因此我们通常需要校准这些传感器。


图 9.使用传感器融合 [4]了解设备的方向

特征包含最大/最小值、峰值和谷值,我们可提取这些数据,然后进入下一步。

模板匹配

通过简单分析加速计传感器的图表,我们发现:

  • 常见的向左滑动手势包含两个谷值和一个峰值
  • 常见的向左滑动两次手势包含三个谷值和两个峰值

这表示我们能够设计基于状态机的简单滑动手势识别。 相比于基于 HMM[6]模型的手势识别,这种识别方式功能更加强大,算法准确度也更高。


图 10.向左滑动一次/两次时加速计和陀螺仪的图表

案例研究: 英特尔® 环境感知 SDK

英特尔环境感知 SDK[7]将传感器数据用作数据来源,以向环境感知服务传输传感器数据。 图 11 所示为详细的架构信息。


图 11. 英特尔® 环境感知 SDK 和传统 Android* 架构

目前,SDK 支持符号、滑动和耳朵触摸手势识别。 您可以参阅最新版本说明[8],了解更多信息。 请参阅文档,了解如何开发应用。 以下是运行 ContextSensingApiFlowSample 示例应用的设备。


图 12.英特尔® 环境感知 SDK 支持滑动手势 [7]

英特尔® 环境感知 SDK 支持的滑动方向包括加速计传感器的 x 轴和 z 轴方向,而不支持 z 轴滑动。


图 13.英特尔® 环境感知 SDK 支持耳朵触摸手势 [7]


图 14.英特尔® 环境感知 SDK 支持符号手势 [7]


图 15.英特尔® 环境感知 SDK 示例应用 (ContextSensingApiFlowSample)

总结

传感器广泛应用于移动设备中具备动作识别功能的现代计算设备,这项与众不同的特性可用来吸引更多用户。 传感器使用是帮助移动设备提升用户体验的重要特性。 目前发布的英特尔环境感知 SDK v1.6.7 有助于促进传感器的简单用法,这也是所有用户一直追寻的。

关于作者

Li Liang 拥有长春科技大学信号与信息处理专业硕士学位。 他于 2013 年加入英特尔,在客户端计算支持团队担任一名应用工程师。 专注于研究对 Android 平台的差异化支持,如多窗口功能 (Multi-Window) 等。

参考

[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] http://www.codeproject.com/Articles/729759/Android-Sensor-Fusion-Tutorial

[5] http://en.wikipedia.org/wiki/Sensor_fusion

[6] http://en.wikipedia.org/wiki/Hidden_Markov_model

[7] https://software.intel.com/sites/default/files/managed/01/37/Context-Sensing-SDK_ReleaseNotes_v1.6.7.pdf

[8] https://software.intel.com/zh-cn/context-sensing-sdk

实用链接

https://source.android.com/devices/sensors/sensor-stack.html

https://graphics.ethz.ch/teaching/former/scivis_07/Notes/Slides/07-featureExtraction.pdf

 


Viewing all articles
Browse latest Browse all 583

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>