使用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订阅密钥。
- 转到认知服务注册页面。
- 为Face服务选择“获取API密钥”。
- 注册一个“免费Azure帐户”(而不是“来宾”,因为该帐户的限制很低)。 完全免费,您将获得200美元的信用额(很多)。
- 请按照所有步骤创建一个新帐户(或使用您现有的Microsoft帐户登录)。
- 转到Azure门户。
- 在顶部的搜索栏中搜索“认知服务”。
- 选择“创建认知服务”。
- 在显示的过滤栏中搜索“面部”。
- 选择“面部”并点击“创建”。
- 设置名称,位置,定价层,然后选择“创建新”资源组。
11.转到所有资源> FaceService>密钥,然后复制并保存“ KEY 1”(我们将在以后使用)。
12.转到所有资源> FaceService>定价层,并确保已选择“标准”层。
您可以从此处下载入门项目。
运行之后,您应该会看到包含两个部分的集合视图,分别是化身和照片。
如您所见,选择头像目前不起作用。
为了解决这个问题,让我们从导入API消耗类开始。 (请务必仔细阅读代码和注释,以更好地了解Face API的工作原理)
这些警告是因为未使用avatarData
和photoData
,让我们来照顾它。
我们将使用这些数据值来请求人脸ID,然后将其分别存储在person
和photo
对象中。
将这些行替换为:
再次运行该应用程序。
如果加载需要一段时间(约10秒),请不要惊慌,这是因为我们正在为每个图像进行Face-Detect API调用。 在生产应用程序上,您应该只执行一次,并将结果存储在本地或基于云的服务上,最重要的是,永远不要阻塞UI。 另外,请记住,我们正在使用的Face-Detect端点仅存储24小时的面部ID。 如果您需要更永久的解决方案,请参见FaceList。
在处理实际的头像选择逻辑之前,我们将需要ContentManager
类的更多帮助。
首先,我们需要一个解决方案来从“照片”部分获取所有面部ID,以便我们可以将它们与所选头像的面部ID进行比较。
最后,在面部识别服务返回所有面部ID匹配之后,我们需要ContentManager
类为我们提供这些面部ID的照片。
太讨厌复制和粘贴代码了? 好消息……只剩下一小段代码了。 化身选择逻辑,将利用我们添加的所有内容。
转到您的ViewController
类,并使用此新实现替换当前的collectionView(_:didSelectItemAt:)
函数。
最后 ,我们拥有根据选定的人搜索/过滤照片的全部条件。
上一次运行该应用程序,然后继续选择您喜欢的Avenger,收藏视图将重新加载其内容并仅显示该人的照片。
奏效了吗? 太棒了!
现在,您可以在下一个面部识别应用程序😉中使用这项出色的服务。
完整项目可在GitHub上获得。