参考自: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

58.基于容器的Azure人脸服务(复刻版)_第1张图片

等待安装完成

58.基于容器的Azure人脸服务(复刻版)_第2张图片

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

58.基于容器的Azure人脸服务(复刻版)_第3张图片

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

58.基于容器的Azure人脸服务(复刻版)_第4张图片

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

58.基于容器的Azure人脸服务(复刻版)_第5张图片

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

58.基于容器的Azure人脸服务(复刻版)_第6张图片

创建人脸服务

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

58.基于容器的Azure人脸服务(复刻版)_第7张图片

58.基于容器的Azure人脸服务(复刻版)_第8张图片

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

58.基于容器的Azure人脸服务(复刻版)_第9张图片

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

58.基于容器的Azure人脸服务(复刻版)_第10张图片

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

58.基于容器的Azure人脸服务(复刻版)_第11张图片

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

58.基于容器的Azure人脸服务(复刻版)_第12张图片

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

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

58.基于容器的Azure人脸服务(复刻版)_第13张图片

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

58.基于容器的Azure人脸服务(复刻版)_第14张图片

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

启动人脸容器

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

命令示例:

docker login containerpreview.azurecr.io -u -p

58.基于容器的Azure人脸服务(复刻版)_第15张图片

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

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

58.基于容器的Azure人脸服务(复刻版)_第16张图片

完成

58.基于容器的Azure人脸服务(复刻版)_第17张图片

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

命令示例:

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

执行:

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

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

58.基于容器的Azure人脸服务(复刻版)_第18张图片

测试人脸功能

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

58.基于容器的Azure人脸服务(复刻版)_第19张图片

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

58.基于容器的Azure人脸服务(复刻版)_第20张图片

安装完成并启动它

58.基于容器的Azure人脸服务(复刻版)_第21张图片

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

复制红色框柱部分去执行

58.基于容器的Azure人脸服务(复刻版)_第22张图片

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

58.基于容器的Azure人脸服务(复刻版)_第23张图片

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

58.基于容器的Azure人脸服务(复刻版)_第24张图片

选择获取图片的方式

58.基于容器的Azure人脸服务(复刻版)_第25张图片

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

58.基于容器的Azure人脸服务(复刻版)_第26张图片

人脸信息持久化

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

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

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

58.基于容器的Azure人脸服务(复刻版)_第27张图片

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

58.基于容器的Azure人脸服务(复刻版)_第28张图片

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

58.基于容器的Azure人脸服务(复刻版)_第29张图片

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

58.基于容器的Azure人脸服务(复刻版)_第30张图片

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

58.基于容器的Azure人脸服务(复刻版)_第31张图片

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

58.基于容器的Azure人脸服务(复刻版)_第32张图片

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

命令示例:

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

执行:

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"

58.基于容器的Azure人脸服务(复刻版)_第33张图片

在setting里生成一个workspace Name

58.基于容器的Azure人脸服务(复刻版)_第34张图片

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

58.基于容器的Azure人脸服务(复刻版)_第35张图片

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

58.基于容器的Azure人脸服务(复刻版)_第36张图片

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

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

58.基于容器的Azure人脸服务(复刻版)_第37张图片

总结

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

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

58.基于容器的Azure人脸服务(复刻版)_第38张图片

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

58.基于容器的Azure人脸服务(复刻版)_第39张图片

实时面部效果:

58.基于容器的Azure人脸服务(复刻版)_第40张图片

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

58.基于容器的Azure人脸服务(复刻版)_第41张图片

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

58.基于容器的Azure人脸服务(复刻版)_第42张图片

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

58.基于容器的Azure人脸服务(复刻版)_第43张图片

情感识别:

58.基于容器的Azure人脸服务(复刻版)_第44张图片

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

58.基于容器的Azure人脸服务(复刻版)_第45张图片

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

58.基于容器的Azure人脸服务(复刻版)_第46张图片

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