近日微软推出了一个神奇的页面——How-old.net,通过传照片猜年龄迅速刷爆朋友圈。上线几个小时,已经测试了超21万张图片,由于推测存在不小误差,不少名人都被“玩坏了”,微软认为同年的林志颖和郭德纲年龄差了一个吴奇隆。那么当科技大佬们遇到“How-old” 会如何呢?
参考 Fun with ML, Stream Analytics and PowerBI,内有详细说明。
这个 demo 是我们 IMML 部门(Information Management and Machine Learning)做的,主要组件是:
1. Azure Machine Learning 平台以及其 gallery 中的 face api。Microsoft Azure Machine Learning Gallery
2. 实时统计用的是 Azure Event Hub 和 Azure Stream Analytics,后者可以在前者的事件流上使用类 SQL 的语句来执行一个 Near Realtime 的统计,比如每 10 秒内的访问次数和结果分布。
其实本 demo 主要目的是展现 ASA 以及 PowerBI 的实时统计展现能力,其中 ASA 刚刚 GA(general availability),Machine Learning 和 face detection api 是之前就已经有的东西了,没想到大家都关注人脸识别去了。
程序员们,你们只需要 1 天时间就可以建立类似的网站。利用微软发布的 face detection api,只要几下 rest api 调用就可以得到结果了。这里有很详细的 how to 来教你如何调用这些 api:Microsoft Project Oxford How-to detect faces from an image。而且,识别年龄和性别只是一个小功能,这套 api 还包括识别两张照片是不是同一个人,以及识别出某个具体的人等高级功能。
Age estimation via face.
1. Face detect,检测图片中人脸的位置,cascade adaboost 是最常用的方法。
2. Face alignment,图像对准,确定一些关键的点的位置,比如眉毛,眼睛,鼻子,嘴角等,确定这些点之后可以确定人脸区域,倾斜的也可以。
3. Feature extract,有了 face region 之后,开始提取 feature,形状 shape,纹理 texture,几何 geometry 信息是最关键的 feature 了。
4. Train,有了大量 feature 数据以及对应的年龄数据,建立一个 model 开始训练。SVM, linear regression 等等。
5. Age estimation,新来一张图片,获取 feature,根据 4 获取的训练参数,估计年龄。
目前看到一些 paper 给出的 MAE(Mean absolute error)可以到 4-5 岁,但都是基于实验室数据,微软的也试了一下,variance 有点大。
微软本来是为了宣传云计算,估计年龄应该只是一个噱头。