Python 还能承担下一个时代的发展重任吗?Mojo 语言的横空出世对 AI 研发生态有什么影响? 了解详情
写点什么

Google I/O:针对情景设计 App 的经验建议

  • 2015-05-29
  • 本文字数:2448 字

    阅读完需:约 8 分钟

本报道对 Google I/O 2015 上“ Making apps context aware ”议程的内容进行概述。在本次议程中,来自 Android 地理位置和情景团队的工程师 Waleed Kadous 与 Marc Stogaitis 介绍了现在的 Google 应用(如 Google Now)中是如何收集情景数据、识别用户情景并以此提供对用户有用的服务,并列出了一些面向其他开发者的建议。

围绕情景进行设计,从底到上分别涉及传感器(硬件)、算法、以及用户交互这三个层面。传感器是情景发现的起点,算法将传感器收集的数据进行分析和理解(如用户在什么位置?用户是在走路吗?用户是在开车吗?),而交互则是最终将“抽象的”情景转化为功能的所在。

下面以几个已经实现的案例介绍基于场景的设计当前的进展情况。这些案例目前已经可以通过情景 API(context APIs)来直接使用,包括 activity recognition(动作识别) places(地点) geofencing(位置范围) fused location provider 等。

动作识别

用户是在走路还是在跑步,在坐着还是在躺着,是上楼还是下楼,是骑车还是坐车,手机是在用户的屁股口袋里还是在车里座位上还是在家里的桌面上?要实现这样的动作识别有三个步骤:

  1. 从已知动作中收集数据,将数据标记为该动作。比如让志愿者带着手机手表走路,记录期间的加速度传感器、气压传感器数据,将该原始数据标记为“走路”。
  2. 拿大量的原始数据交给机器学习集群做训练,直到它们能够相对准确的从一套原始数据中判断它很可能是“走路”的数据。
  3. 将这套判断加入 API 当中,给应用开发者用起来。

目前可以识别的动作可以在 DetectedActivity 中看到,包括:

复制代码
int IN_VEHICLE
int ON_BICYCLE
int ON_FOOT
int RUNNING
int STILL
int TILTING
int UNKNOWN
int WALKING

相当直观的返回参数,无需多说。事实上除了这些动作之外,现场还演示了另外两种已经可以被识别的动作,分别是深蹲起和仰卧起坐。这个动作识别库肯定还会继续增加壮大。

接下来,识别了动作之后,有什么应用呢?本讲座提供了一个示范:贴身携带免解锁。假设一个场景,用户用完手机后一直把手机揣口袋里走来走去,走了几分钟又拿出手机来,这两次使用手机之间是手机不离身的,因此理论上无需要求用户再次输入解锁密码。有了动作识别,就可以实现这个功能啦。当然,健身数据记录、运动相关的游戏,有了这种动作识别的能力也很有用。

动作识别 + 地理位置识别

动作识别配合地理位置识别,还可以实现更多其他的效果。Google Now 上展示的“我的车停在哪儿了”的功能,就是由“动作识别”和“fused location provider”这两个 API 的组合实现的。Fused Location 也就是地理位置识别,只不过是综合使用了手机的 GPS、WiFi、加速度传感器、陀螺仪、以及磁力感应器的数据来判断地理位置,从而实现了降低能耗又尽可能提升位置识别准确度的效果。

“车停在哪儿了”的功能大致通过三个步骤完成:

  1. 通过动作识别,判断用户在车里。
  2. 根据倾斜传感器的数据,判断用户从“坐着”转变到“站立”状态的时间点,即用户“下车”的时间点。
  3. 自动记录下这个时间点的 Fused Location 数据。

据说现在 Fused Location 数据已经可以精确到 2-3 米,这样的精确度下找到一辆车是基本没问题的。

以上就是针对情景设计 App 的一些经验分享。两位分享者也提供了其他的一些思路作为参考,比如在用户驾车的时候自动将短信内容用语音阅读出来,或者是基于地理位置的挖宝游戏设计等。这个就要靠大家发挥自己的想象力了。

前方危险警告

接下来,两位分享者提出了三条建议——可以算是针对情景设计的一些“敏感地带”:

  1. 用户信任的问题。Google 方面的建议是只收集你真正需要的数据,并且对用户解释清楚这样对用户有何好处,以此赢得用户的信任。
  2. 算法不靠谱的替代方案。比如用户这一天开车开了好几十里地,算法却说他只开了几里地,你有没有设计让用户能够手动更改数据的入口?比如用户一直把手机放在口袋里,算法却认为手机曾经离身,又让用户输入解锁密码,又应当如何修正?
  3. 电量消耗问题。正常应用不会长期开启,在短期开启的期间主要耗电来自屏幕。而这种情景收集类应用则是长期开启,会长时间让设备处于耗电状态。

关于这种持续收集数据的电量消耗,现在已经有了比较重大的技术突破,原理如下:

传感器本身的耗电很低,大约 0.3mW。App 进程的耗电量很高,大约 100mW。单纯是传感器收集数据,并不会耗很多电;但问题是每次传感器收集数据,都会把数据 update 给进程,于是进程只能一直醒着,造成电量消耗。那么,就不要如此频繁的吵醒进程就可以了!我们在传感器和进程之间加入一个低功耗的硬件——称之为 Hub。这个 Hub 以高频率从传感器收集数据,然后以低频率向 App 进程发送 batch update(这个跟桌面 / 服务器 OS 的节能原理是一样的)。

这样就有一个很 happy 的结果:80% 的能耗降低。

另一方面,能耗方面的控制也仍然需要开发者的人工介入,这主要与该应用所需的数据更新频率和准确度要求有关。这个应用是天气预报类,还是导航类,因此它对位置数据的更新频率与准确度有何要求?这只能由开发者来告知系统。

未来的可能性

最后,两位分享者对未来五年的情景设计进行了展望。持续的小改进仍然会源源不断,同时我们也有望看到一些飞越性的改良。这其中可能有三个关键因素:

  1. 2-3 米精确度的地理位置信息,包括在室内如果也能达到这个准确度的话,很多事情将有很大的不同。
  2. 多设备,物联网。这会带来怎样的变化,现在甚至还难以预知。
  3. 低功耗带来的 always-on app,又会带来更多的可能性。

回顾过去,会感到很多事情是如此的不可思议。10 年前的奔腾芯片,100MIPS 的能力,15W 的功耗,尺寸达到 60mm。而上文所提到的 Hub 硬件,使用的 STM32F411 芯片,该芯片的能力为 125MIPS,功耗最低在 0.005W,正常在 0.018W,按照目前的电池能力可以连续运转 3-10 周不等,而尺寸只有 3mm。在机器中加入这样一个 Hub,就好像人的大脑有了脑干一样,具备了自我维持生命的能力。

继续这样发展下去,会不会有一天,我们能够像幻想世界中的魔法师一样,手中凌空画几道符咒,就能释放了不起的“魔法”呢?还真是一切皆有可能啊。

2015-05-29 01:242126

评论

发布
暂无评论
发现更多内容

第八章作业—张红珊

zzz

位运算符在 JS 中的妙用

浩浩子

『BATcoder』都2021年了,是时候安装Ubuntu了!

刘望舒

android Android进阶

MySQL主从架构原理

无心

MySQL

在公司九年被裁是谁的问题?

石云升

离职 28天写作 职场经验 3月日更

深圳应用区块链提升政务服务效能调查

CECBC

电子发票

使用 Typescript 的一些注意事项

浩浩子

阿里二面,面试官居然把 TCP 三次握手问的这么细致

Java 编程 架构 面试 网络

是时候下载Android11系统源码和内核源码了~

刘望舒

android Android进阶

你真的知道基于区块链的「云计算」是什么吗?

CECBC

云计算

ARTS-week 4

steve_lee

区块链列入数字经济重点产业 机构预测其大规模应用将加速

CECBC

数字经济

刘华:看板那么好,为什么都成了摆设?

刘华Kenneth

架构 敏捷 精益 看板

MySQL 锁

无心

MySQL

加密解密之 crypto-js 知识

浩浩子

我对PageRank 算法的理解

跳蚤

如何学习数据结构与算法

C语言与CPP编程

数据结构 算法

shell学习

我是程序员小贱

3月日更

音视频开发经验之路【二】ijkplayer实际开发中遇到的问题总结

鱼哥

音视频

操作系统的内存管理(中)

Arvin

操作系统 内存管理

Java 并发基础(一):synchronized 锁同步

看山

Java Java并发 并发编程

一个视频带你编译自己的Android系统!

刘望舒

android Android进阶

框架是教科书,但是思考架构更有价值

DisonTangor

架构师 知识图谱

力扣(LeetCode)刷题,简单+中等题(第26期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

智能时代的TCL之舞

脑极体

Redis 作为缓存是如何工作的

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

推荐引擎概述

跳蚤

用栈、回溯算法设计迷宫程序

不脱发的程序猿

回溯算法 28天写作 3月日更 迷宫程序

音视频开发经验之路【三】吐血干货,直播首屏耗时400ms以下的优化实践

鱼哥

音视频

2021拼多多(Java岗)面经最新分享

比伯

Java 编程 架构 面试 计算机

金三试水Java社招,历经“阿里+字节+bigo”等5家面经

Java架构师迁哥

  • 扫码加入 InfoQ 开发者交流群
Google I/O:针对情景设计App的经验建议_Google_sai_InfoQ精选文章