参考自:https://docs.microsoft.com/en-us/azure/cognitive-services/Face/face-how-to-install-containers

https://github.com/Azure/OCPOpenHack/tree/master/Cognitive_Service_Face_on_Container

Azure人脸API 服务是一项认知服务,其提供的算法可用于检测、识别和分析图像中的人脸。处理人脸信息的功能在许多不同的软件方案中很重要,这些方案包括安全性、自然用户界面、图像内容分析和管理、移动应用和机器人。

目前Azure人脸API已经支持容器部署,意味着Azure人脸功能可以部署到用户自建机房或边缘设备中。本实验主要实践容器化Azure人脸的部署与使用。该实验将包括以下内容:

  • 准备Docker环境
  • 创建人脸服务
  • 启动人脸容器
  • 测试人脸功能
  • 人脸信息持久化

准备Docker环境

1 . 在https://docs.docker.com/docker-for-windows/install/ 安装Docker for Windows

clip_image001

等待安装完成

clip_image002

安装完成后会要求注销重新登录,登录会提示

clip_image003

等待一会后自动安装本机Hyper-V功能并重启2次完成Hyper-V安装,并且已经自动创建了一个虚拟交换机以及一台虚拟机运行

clip_image004

接着就可以打开桌面的Docker Desktop,在托盘处右键Docker Desktop图标在菜单里选择Settings 

clip_image005

2 . 确保本地磁盘可以被docker访问

clip_image006

创建人脸服务

1 . 登陆Azure Portal,找到人脸服务

clip_image007

clip_image008

2 . 填入名称,订阅等后,点击创建。

clip_image009

关于是选择S0还是F0区别如下:

clip_image010

目前国内版的认知服务已经有如下(截图于2019年5月23日):

image

针对于人脸识别的国内版收费如下:

image

其他的认知服务收费可以参见:https://www.azure.cn/zh-cn/pricing/details/cognitive-services/

3 . 在创建好的人脸服务Overview页面,找到API端点。

clip_image011

4 . 在创建好的人脸服务Keys页面,找到调用服务所需要的密钥。

image

API端点和密钥将在下一节被用到。

启动人脸容器

1 . 启动cmd命令行窗口,执行以下命令登陆到人脸容器的私有镜像仓库。其中用户名和密码可以从Cognitive Services Vision Containers Request form申请获得

命令示例:

docker login containerpreview.azurecr.io -u <useraccount> -p <key>

image

2 . 执行以下命令将最新的人脸容器镜像拉取到本地

docker pull openhackreg.azurecr.io/openhack/face:latest

clip_image015

完成

image

3 . 执行以下命令启动人脸容器

命令示例:

docker run --rm -it -p 5000:5000 --memory 6g --cpus 2 containerpreview.azurecr.io/microsoft/cognitive-services-face Eula=accept Billing=<API Endpoint> ApiKey=<API Key>

执行:

docker run --rm -it -p 5000:5000 --memory 6g --cpus 2 openhackreg.azurecr.io/openhack/face Eula=accept Billing=https://eastasia.api.cognitive.microsoft.com/face/v1.0 ApiKey=6************23de

执行后显示申请开始,意味着开始提供服务了

image

测试人脸功能

1 . 在浏览器访问http://localhost:5000/swagger/index.html ,如果人脸API的说明可以正常显示,说明人脸服务已经正常运行。 

clip_image018

2 . 访问https://www.microsoft.com/zh-cn/p/intelligent-kiosk/9nblggh5qd84#activetab=pivot:overviewtab 安装Windows Store 应用Intellight Kiosk

clip_image019

安装完成并启动它

clip_image020

3 . 点击左下角按钮,按照下图进行设置(注意点击Click here for extra setup ... 按照提示完成设置)

复制红色框柱部分去执行

clip_image021

以管理员身份新开一个cmd粘贴执行

clip_image022

4 . 在Intelligent Kiosk内找到Face API Explorer并进行测试。该测试支持从摄像头或本地文件获取照片,返回年龄,人脸特征等。

clip_image023

选择获取图片的方式

clip_image001[4]

利用自己笔记本电脑的摄像头拍摄一张自己的照片测算下自己年龄或测试一张图片

clip_image025

人脸信息持久化

自己建立一个组,在这个组里建立分类,比如张三建一类把张三的照片放一起,李四建一类把李四的照片放一起,这叫分类打标签,认知服务会根据我建立的分类来学习就叫机器学习,最后我再随意找一张张三和李四的合影让认知服务识别,就会自动判别张三李四的年龄以及合影照片里谁是张三,谁是李四,并标记出来。

使用人脸API进行人脸分组以及识别时,人脸容器需要对人脸索引信息进行持久化,该持久化能力需要借助到Azure的存储服务和Cosmos Db服务。

1 . 创建存储账号服务,确保账户类型选择的是general purpose v2

clip_image026

存储账户需要注意检查防火墙和虚拟网络是否设置所有网络访问,否则连接会失败

image

2 . 待存储账号创建好后,在Access keys页面获得连接字符串

image

3 . 创建Cosmos DB服务,确保API类型选择的是Azure Cosmos DB for MongoDB API

clip_image028

需要注意Cosmos DB的防火墙和虚拟网络要允许所有网络的访问,否则连接会失败

image

4 . 待Cosmos账号创建好后,在Connection String页面获得连接字符串

image

5 . 关掉正在运行的人脸容器服务,执行以下命令重新启动人脸容器

命令示例:

docker run --rm -it -p 5000:5000 --memory 6g --cpus 2 containerpreview.azurecr.io/microsoft/cognitive-services-face Eula=accept Billing=<API Endpoint> ApiKey=<API Key> CloudAI:Storage:StorageScenario=Azure CloudAI:Storage:ConnectionStringOfCosmosMongo="<CosmosConnectionString>" CloudAI:Storage:ConnectionStringOfAzureStorage="<StorageConnectionString>"

执行:

docker run --rm -it -p 5000:5000 --memory 6g --cpus 2 openhackreg.azurecr.io/openhack/face Eula=accept Billing=https://eastasia.api.cognitive.microsoft.com/face/v1.0 ApiKey=61*******************Scenario=Azure CloudAI:Storage:ConnectionStringOfCosmosMongo=“mo**************@facedemo.documents.azure.com:10255/?ssl=true&replicaSet=globaldb" CloudAI:Storage:ConnectionStringOfAzureStorage="DefaultEndpointsProtocol=https;AccountName=facedemostorages;AccountKey=********************;EndpointSuffix=core.windows.net"

image

在setting里生成一个workspace Name

clip_image031

6 . 在Intelligent Kiosk的Face Identification Setup页面创建人脸组,并上传分类,比如一个人一个类别上传他自己的照片成为特征标签

image

完成后切换回之前的脸部API资源管理器,会提示你是否进行模型训练,点击Yes

image

此时人脸组索引信息已被持久化,重启人脸容器和Intelligent Kiosk,人脸组仍然能被再次显示。

再次测试可以识别年龄和谁是谁了,百分比表示和我之前建立的人物库中的类别相似度

image

总结

容器化的人脸服务无需把人脸图片直接上传到Azure,可以大大提高人脸服务的部署灵活性和访问速度。

除此之外还有其他人脸识别的Demo:

clip_image001[1]

表情匹配(PS:我用自己笔记本的摄像头拍的,给大家看我还是模糊下自己丑陋的面孔吧)

1副本

实时面部效果:

clip_image003[1]

看起来更像那个名人?(PS:我用自己笔记本的摄像头拍的,给大家看我还是模糊下自己丑陋的面孔吧)

2副本

百万级人脸搜索:(PS:我用自己笔记本的摄像头拍的,给大家看我还是模糊下自己丑陋的面孔吧)

3副本

实时人群见解:(PS:我用自己笔记本的摄像头拍的,给大家看我还是模糊下自己丑陋的面孔吧)

4副本

情感识别:

clip_image007[1]

视频索引分析:分析视频中出现过多少张人脸,并且出现在视频的几分几秒,男女数量统计以及面部表情等信息

clip_image001

还比如这个可以实时动态监测到人的性别,评估年龄和识别表情,并统计当前镜头人数的实时人群见解,动态抓捕人脸所在位置,面孔数等信息

ren

人脸识别只是微软AI能力的其中之一,还有语音识别,文字转语音,语音转文字等,更多人脸识别,物体识别等好AI功能期待您来挖掘和分享。