说实话,边学AI边学Python挺酸爽的。可这阻止不了我尝试学习AI的热情,哈哈。并且,如果我能搞出来,看到文章的您肯定也不在话下。
人脸API是Azure上AI及认知服务的一项,应该是从计算机视觉分出来的吧,针对人脸的特点单独做了特定的人工智能机器学习及API封装。由于是基于Azure的云端服务,所以针对人脸的一些功能封装的很好,只需要使用HTTP的几类方法 (GET \ PUT\ POST\ PATCH\ DELETE) 提供数据然后调用即可。
首先,在Azure订阅中添加人脸API的服务。和其他的认知服务一样,也有免费的定价,也是通过Key来访问这个服务。所以,开始学习代码之前,先复制人脸API服务的Key。
应该说,Azure认知服务的页面给的链接还是不错的,后续大部分需要的内容,通过这些链接都能找到信息。最近的文档配图增加了,不过和其他产品的文档一样,感觉组织有点纷乱。这和云转型以及大量引入不同的开源、Linux、不同语言可能相关吧。
我们的目标是通过示例代码尽快的了解人脸API服务是如何工作的。所以文档和不多的示例代码非常有用。第一个快速了解Face API机制的示例代码可以在这里查看:https://docs.microsoft.com/en-us/azure/cognitive-services/face/quickstarts/python
代码其实不复杂。首先,按照API的要求,使用订阅的服务Key和数据类型作为header,按照要求和需要,提供特定的参数params和指定格式的内容body,构造特定的URL字串,然后用指定的方法通过HTTPS请求Azure上的人脸API服务。
看看Detect这个API。通过提交一张照片,就能够利用人工智能检测照片中的人脸,进行分析和提取特征。通过示例代码,我们可以学习到挺多东西的。
首先,如图中的body,实际上是提供一张照片给AI。除了这里的JSON模式的数据之外,也可以使用octet-stream模式的数据,比如从本地提供照片。
对于Detect的API来说,很重要的一点是params里面说明了人脸检测返回的三个重要的数据:FaceID,FaceLandmarks (面部特征) 和 FaceAttributes (面部属性)。FaceID后面再说,先看面部属性。面部属性会返回AI对人脸的判断,例如性别,年纪,戴没戴眼镜,什么眼镜,头发怎样,啥颜色,什么表情之类。需要返回哪些属性,可以在params里指定。原示例代码给的是一位美女的照片,我换成了伟大的爱因斯坦的照片~ 从返回的结果看,照片里的爱因斯坦有一点点 (0.003) 的不开心啊哈哈。七情六欲,表情属性正好七个。
这些属性可以做很多的事情,例如通过表情判断人的情绪,进而改进服务、应用或者AI的交互体验。想象一下,每天到办公室开机,Cortana会说,今天你不太开心啊,路上辛苦了,我给你讲个笑话吧。是不是比你女朋友 (if girlfriend.get(): ) 还体贴?
另一个很重要的返回,是面部特征。我们国家的人脸识别技术非常领先,Azure使用的技术很多应该也来自于我们的微软亚洲研究院。人脸API中,对人脸进行的抽象是27点面部取样。
按照这27点取样,计算各点对应关系,就能够让人工智能判断人脸特点,进行识别。在这里:https://docs.microsoft.com/en-us/azure/cognitive-services/face/face-api-how-to-topics/howtodetectfacesinimage 对这部分做了简要说明。
参考 API的说明:我猜由于目前还不是个Global的服务,所以构造认知服务调用的URL的时候,需要按照服务所在站点填写。而四类不同的API调用,每个API要求的URL也不尽相同。如前文所说,实际上API的实现,都是构造这些URL然后使用不同的HTTP方法完成。
API参考和其他认知服务一样,除了说明,还给出了不同常见语言的示例。通过示例代码能够很快了解如何使用这些服务。此外,对输入和输出的数据类型、格式以及限制也给出了详细的说明。我想说的是,即使没有编程基础,也真的不难。
对于已经熟悉API的用户,当然也可以直接使用封装好的SDK。可以在GitHub获得:https://github.com/Microsoft/Cognitive-Face-Python
而文档也给出了使用SDK的示例代码:https://docs.microsoft.com/en-us/azure/cognitive-services/face/tutorials/faceapiinpythontutorial