为了向开发者展示如何利用微软Azure云服务轻松快速地开发智能应用,我们在Azure上用新发布的人脸识别APIs为2015年微软BUILD开发者大会 第二天的主题演讲搭建了 http://how-old.net 网站。本网站让用户上传照片,然后通过API预测照片中所有人物的性别和年龄。目前,这些API的人脸定位功能及性别识别功能大致准确,然而年龄预测结果并不是非常准确,但常常能博得用户一笑,平添不少欢乐。 网站建成后,我们给数百名微软员工发了邮件,邀请他们体验这个网站并给出反馈。当时乐观地想要是有几十个人来这个网站、为测试提供有用的数据就算不错了。但三个小时后,我们的后台分析图表呈现出下图态势: 几个小时里,How-old.net收到了全球3万5千用户(其中大约2万9千人来自土耳其,下图显示,推特上有大量来自土耳其的用户提到了这个网页)上传的21万多张照片。 这个网页展示了用户使用的实时信息。比如,我们曾预测用户会用已经存在于网络的照片,或是使用页面上的必应图片搜索栏;然而网站分析的照片中,超过一半的是用户上传的自己的照片。这些信息帮助我们改善用户体验,还有助于我们额外测试手机上传照片。 那么这些是怎么实现的呢? 也许说起来难以置信,但两位工程师只花了几个小时便把整套解决方案(从网页到机器学习API到实时数据流分析再到实时BI)整合在一起。这很好地展示了Azure开发者的敏捷和创造力。这款应用的关键功能在于以下三点: - 识别图片中人物性别及年龄
- 获取上述抽取的数据的实时信息
- 生成实时分析图表来显示上述结果
识别性别及年龄 除了年龄和性别,我们还用上了其他标准浏览器提供的信息,比如伴随着每个标准HTTP调用而来的用户代理字符串,以及照片上传地点的经纬度。这些信息可用来计算很多网站使用的数据统计,比如通过iPhone、Windows或安卓登录的数量,或者how-old.net最受欢迎的地区。这点体现在下列JSON文件中: [mw_shl_code=applescript,true][ { "event_datetime": "2015-04-27T01:48:41.5852923Z",
"user_id": "91539922310b4f468c3f76de08b15416", "session_id": "fbb8b522-6a2b-457b-bc86-62e286045452",
"submission_method": "Search",
"face": { "age": 23.0, "gender": "Female" },
"location_city": { "latitude": 47.6, "longitude": -122.3 },
"is_mobile_device": true, "browser_type": "Safari", "platform": "iOS", "mobile_device_model": "IPhone"
} ][/mw_shl_code] 实时见解 为了理解从本网站得到的实时数据的模式,我们使用了一套新的微软Azure数据流服务。 我们用 Azure Event Hub导入数据,这些Azure Event Hub是具有高伸缩性的发布-订阅吸收器,它可以摄入每秒几百万次事件。用户上传照片时,Event Hub API会从网页生成ASON文件。注意,在此过程中,我们不会保留照片及任何指向用户的信息(用户无需电邮,不用登录,也没有用户名)。只有JSON文件流向Azure Event Hub。 然后,我们需要数据流服务来实时整合处理用户们上传的上万张照片。这里我们用到了高吞吐低延迟的全托管解决方案 Azure流分析(ASA)。ASA让用户能用类似于SQL的语言,轻松处理数据流。 比如,只用输入下列命令,你就能从一个十秒窗口得出“性别”的计数,而且结果每秒都会更新。 [mw_shl_code=applescript,true]SELECT
System.Timestamp AS OutTime,
Face.gender AS Gender,
Count(*) AS Count
FROM
StreamInput
GROUP BY HoppingWindow(second,10,1),
Face.gender[/mw_shl_code] 在上图的查询中,我们选取了显示结果的时间,性别和性别的计数。StreamInput指流动记录数据流向的Event Hub。这个过程仅仅在一秒一跳的十秒窗口中完成。这个查询提供了上传照片中男性和女性的总数。这些信息能被展示在一个分析图表里。你可对来自同一Event Hub的数据进行多种查询。 实时分析图表
上图的两项数据流分析查询,一个是整合照片中提取的年龄再以PowerBI中其他标准(比如区域)进行分类,另一个是上面提到的查询。PowerBI能制作各种图表,你甚至可以直接用自然语言发布命令(比如“各性别各年龄IOS用户的总数是多少?”)。结果也会显示在实时分析图表上。
|