使用Microsoft Azure Face API在iOS上进行面部识别

面部识别有无数的应用,并且每天都在越来越广泛的技术中得到应用,例如移动平台,安全系统和机器人技术等。

Google于2015年推出了“照片”应用,它是智能手机上最实用,实现最完善的应用之一,它可以按人脸搜索照片。 从现在起,您可以轻松找到家人和朋友的照片,并一直追溯到他们出生的那一刻,它的工作原理非常疯狂。

为什么要使用第三方解决方案?

Apple的Vision Framework开箱即用,具有面部检测功能,但没有面部识别功能。 在Core ML的帮助下,使用Vision框架绝对可以实现面部识别,尽管这需要将先前训练有素的模型集成到您的应用中。

有很多提供面部识别的服务而没有太多麻烦,包括Amazon Rekognition,OpenCV和Microsoft Azure。 到目前为止,我最喜欢的是Microsoft的替代产品,它非常易于集成和使用,非常灵活,并且具有出色的性能。 尽管本教程仅专注于REST API,但Microsoft Face API在Github上具有iOS SDK。

为了使用Microsoft Azure Face API,我们需要获取Face API订阅密钥。

  1. 转到认知服务注册页面。
  2. 为Face服务选择“获取API密钥”。
  3. 注册一个“免费Azure帐户”(而不是“来宾”,因为该帐户的限制很低)。 完全免费,您将获得200美元的信用额(很多)。
  4. 请按照所有步骤创建一个新帐户(或使用您现有的Microsoft帐户登录)。
  5. 转到Azure门户。
  6. 在顶部的搜索栏中搜索“认知服务”。
  7. 选择“创建认知服务”。
  8. 在显示的过滤栏中搜索“面部”。
  9. 选择“面部”并点击“创建”。
  10. 设置名称,位置,定价层,然后选择“创建新”资源组。

11.转到所有资源> FaceService>密钥,然后复制并保存“ KEY 1”(我们将在以后使用)。

12.转到所有资源> FaceService>定价层,并确保已选择“标准”层。

您可以从此处下载入门项目。

运行之后,您应该会看到包含两个部分的集合视图,分别是化身和照片。

如您所见,选择头像目前不起作用。

为了解决这个问题,让我们从导入API消耗类开始。 (请务必仔细阅读代码和注释,以更好地了解Face API的工作原理)

这些警告是因为未使用avatarDataphotoData ,让我们来照顾它。
我们将使用这些数据值来请求人脸ID,然后将其分别存储在personphoto对象中。

将这些行替换为:

再次运行该应用程序。

如果加载需要一段时间(约10秒),请不要惊慌,这是因为我们正在为每个图像进行Face-Detect API调用。 在生产应用程序上,您应该只执行一次,并将结果存储在本地或基于云的服务上,最重要的是,永远不要阻塞UI。 另外,请记住,我们正在使用的Face-Detect端点仅存储24小时的面部ID。 如果您需要更永久的解决方案,请参见FaceList。

在处理实际的头像选择逻辑之前,我们将需要ContentManager类的更多帮助。

首先,我们需要一个解决方案来从“照片”部分获取所有面部ID,以便我们可以将它们与所选头像的面部ID进行比较。

将此延迟变量添加到ContentManager类。

最后,在面部识别服务返回所有面部ID匹配之后,我们需要ContentManager类为我们提供这些面部ID的照片。

将此功能添加到ContentManager类。

太讨厌复制和粘贴代码了? 好消息……只剩下一小段代码了。 化身选择逻辑,将利用我们添加的所有内容。

转到您的ViewController类,并使用此新实现替换当前的collectionView(_:didSelectItemAt:)函数。

最后 ,我们拥有根据选定的人搜索/过滤照片的全部条件。

上一次运行该应用程序,然后继续选择您喜欢的Avenger,收藏视图将重新加载其内容并仅显示该人的照片。

奏效了吗? 太棒了!
现在,您可以在下一个面部识别应用程序😉中使用这项出色的服务。

完整项目可在GitHub上获得。