从零开始玩人工智能-人脸 API-03

前文我们尝试写了一个完整的人脸验证过程,从创建一个组,一个人,到为人提供照片,并训练AI,直至最后提供一张照片让 AI 利用 Face API 判断是不是这个特定的人。

另一个经常会用到的人脸识别,是在一张照片中查找认识的人。Facebook什么的挺早就能够识别照片中的人并可以让你给他们打上标签。其实,利用Face API做类似的事情也一点不复杂。不信我们用代码来看看。

为了说明在一张合影中 AI 能够找到并识别特定人,我用了去年峰会中国MVP及MVP Lead梁迪和微软CEO萨蒂亚·纳德拉(Satya Nadella)、微软全球资深副总裁沈向洋、微软全球资深副总裁潘正磊的合影来做代码范例,也算是扯虎皮做大旗吧哈哈哈。

首先,使用前文示例代码中用到的Detect方法来识别照片中的人脸。

说实话,我有点担心。这张照片里的人好多啊,AI 能够都识别出来么?

呼啦啦返回了46个faceId,我趴在照片上一顿数,还真的是一个不落都识别出来了,厉害厉害!

在这里我遇到了一个问题。如前文介绍的,Detect方法识别出来的人脸会以JSON形式返回,而两层及两层以上的数据结构在转成Python的数据时,不再是dict,而是list。多层的数据意味着多层的list对象。上一次因为数据简单,直接使用了List的下标来定位数据。这一次就要老老实实遍历进行处理了。因此,for语句和list.append()就学会使用了。

由这个问题引发的另外一个问题是,生成的List需要提供给下一步Face的Identify方法作为输入。按照API文档的说明,输入应该形如:

在“faceIds”这里,应该输入所有经由Detect识别出的人脸的ID。所以我把上一步获得的List转换成了JSON格式然后拼装这个请求的body。结果……报错了……冷静地print出来list和body,跟文档进行比较,原来多了对’’’号……

原来拼装这个JSON的时候,使用List对象facesId就可以了。使用json的dumps()把List转成json,我多此一举了。那为什么又报Error:0呢?仔细看文档,用于Identify方法的人脸数量,应该1到10之间。我们输入给AI的Face ID大大超过了这个数量,所以……报错了……那该怎么办呢?我可以分批处理,也可以裁剪照片。因为后续还要试试找不到人怎么办,所以我对照片进行了不同的裁剪。

返回的json格式形如:

如果没有对应到人,faceId对应的“condidates”就会显示为[],即空。而对应到人的faceId对应会有识别出的人的personId和相识度评分confidence。看来要把这个结果滤出来做点操作还是有点小复杂啊,一样,使用for语句逐个下标处理List。

使用两层List的下标读取,就能够成功拆分从Face API返回的json数据了。我记得人脸识别的Verify方法里,判断是否本人的参考值为0.5,因此在这里如果系统返回相识度评分大于0.5,我就继续从Face ID再去识别具体的人是谁。

果然,Face API从合影照片中认出了我~那么如果我不在照片里呢?

Face API确实没有发现通过training认识的人~

细心的你发现了吧,两次照片检测的Face ID怎么全部不一样?还记得前文我们说过的吗?Detect生成的Face ID是临时的,会在24小时之后清除,所以每次获得的ID都不同,即使是同一张脸。而关联到人的脸,其Face ID就是持久的,可以在需要的时候使用。

这么牛的合影,难道只识别我自己吗?当然不,我们要试试 AI 能不能识别多个人~

立刻上网为这三位大神各自找了三张照片。找的过程中发现,潘女士原来早在2010年就参加过MVP的Open Day,难怪上次MVP Round Table的时候觉得那么熟悉,看我这糟糕的记性…

赶紧在上次创建的person group里再创建了三个person,每人传输了上图的三张照片。

再次运行代码,这一次,AI 在合影中就识别出了四个人了,厉害厉害~

利用Azure Cognitive Services中的Face API,哪怕没有任何深入的 AI 知识,哪怕没有熟练的编程技巧,只需要简单的几十行代码,就能够实现有趣的人脸识别。

原文地址:http://blog.51cto.com/haohu/2073059

时间: 2024-11-08 05:04:14

从零开始玩人工智能-人脸 API-03的相关文章

从零开始玩人工智能—机器视觉API—02

本期有福利哦!不要错过啦! 前文简单实现了认知服务对图片的检测识别.检测识别是其他机器视觉实现的基础,除了我们示例代码涉及的初步"看懂"图片,认知服务其实可以按照要求返回不同的信息,例如: Categories – categorizes image content according to a taxonomy defined in documentation. Tags – tags the image with a detailed list of words related t

从零开始玩人工智能—推荐服务

有一个非常经典的段子,就是"啤酒和尿布".故事是说,沃尔玛的一位门店经理发现,周末啤酒和尿布的销量会"落霞与孤鹜齐飞,秋水共长天一色",一起上涨.经过分析,是因为奶爸们周末看球喝啤酒的同时要给娃带上尿布,然后就把这两样商品摆在一起促进销售云云.甚至专门用这个案例作为一本书的标题:    先且不论这个故事的真实性(知乎:数据挖掘中最经典的案例之一-啤酒与尿布是真实的案例吗?),可见人们对于数据挖掘分析并用以提升业务是很痴迷的.以前可能要雇一群人分析大量的数据给出可能的

从零开始玩人工智能-机器人服务-04

前文书说到目前微软的Bot机器人分为五类,也从以前的Bot Framework迁往Azure的Bot Service.利用QnA Maker,我们已经快速的做了一个对话机器人.那么,怎么让这个对话机器人面向大众提供服务呢?目前的架构而言,自己开发代码连到QnA Maker机器人是一种做法,而使用Azure的Bot Service让机器人更加容易部署,更加聪明也是一种做法.接下来就会看看怎么在Azure里部署一个机器人.   在Azure的订阅里,从"AI+Cognitive Services&q

【高德地图API】从零开始学高德JS API(六)——坐标转换

原文:[高德地图API]从零开始学高德JS API(六)--坐标转换 摘要:如何从GPS转到谷歌?如何从百度转到高德?这些都是小case.我们还提供,如何将基站cell_id转换为GPS坐标? ----------------------------------------------------------------------------------------- 第一部分 各种坐标系详解 1.大地坐标系统 WGS-84 用来表述地球上点的位置的一种地区坐标系统.它采用一个十分近似于地球自

【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点.定位数据库可以不断完善不断补充,所以,越定位越准确.本文详细描述了,如果使用高德JS API来实现位置定位.城市定位的方法,包含了IP定位,浏览器定位,检索定位等多种网络定位方法.当然,如果您的手机有GPS功能,那么使用浏览器定位的时候,会自动获取GPS信息,使

【高德地图API】从零开始学高德JS API(四)搜索服务

摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公交导航,驾车导航,步行导航,道路查询(交叉口),行政区划等等.如果说覆盖物Marker是地图的骨骼,那么服务,就是地图的气血.有个各种各样的地图服务,我们的地图应用才能变得有血有肉,活灵活现.第四篇拆成了几个要点,本篇主要讲搜索服务.包括周边搜索,关键词搜索,范围搜索,搜索提示(自动完成,输入提示),行政区域,交叉路口,检索自有数据(云图). demo:http://zhaoziang.com/amap/zero_4_1.html

【高德地图API】从零开始学高德JS API(二)地图控件与插件——测距、圆形编辑器、鼠标工具、地图类型切换、鹰眼鱼骨

摘要:无论是控件还是插件,都是在一级API接口的基础上,进行二次开发,封装的一系列更加便于开发者使用,减少开发者工作量的二级API接口.除了官方通用的鱼骨.鹰眼控件,还有大量官方开发的地图插件,类似谷歌的lib.当然本文还会介绍自定义插件的使用. ------------------------------------------------------------------------------------------------- 第一部分 控件 目前官方支持的控件包含:缩放控制条-地图

【高德地图API】从零开始学高德JS API(五)路线规划——驾车|公交|步行

先来看两个问题:路线规划与导航有什么区别?步行导航与驾车导航有什么区别? 回答: 1.路线规划,指的是为用户提供3条路线推荐.[高德]在提供路线规划的时候,会提供用户自定义路线规划功能,这是别家没有做到的.导航,指的是为驾车用户提示路口信息,向左向右,进入匝道等信息. 2.我们这里说的步行导航和驾车导航,严格的说,应该是路线规划.从A地到B地,如果是驾车,路线规划会将公路路网做为搜索数据:如果是步行,过街天桥.地下通道.人行道做为搜索数据. ---------------------------

【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索

摘要: 地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公交导航,驾车导航,步行导航,道路查询(交叉口),行政区划等等.如果说覆盖物Marker是地图的骨骼,那么服务,就是地图的气血.有个各种各样的地图服务,我们的地图应用才能变得有血有肉,活灵活现. 第四篇拆成了几个要点,本篇主要讲搜索服务.包括周边搜索,关键词搜索,范围搜索,搜索提示(自动完成,输入提示),行政区域,交叉路口,检索自有数据(云图). demo:http://zhaoziang.com/amap/zero_4_1.ht