参考自: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
等待安装完成
安装完成后会要求注销重新登录,登录会提示
等待一会后自动安装本机Hyper-V功能并重启2次完成Hyper-V安装,并且已经自动创建了一个虚拟交换机以及一台虚拟机运行
接着就可以打开桌面的Docker Desktop,在托盘处右键Docker Desktop图标在菜单里选择Settings
2 . 确保本地磁盘可以被docker访问
创建人脸服务
1 . 登陆Azure Portal,找到人脸服务
2 . 填入名称,订阅等后,点击创建。
关于是选择S0还是F0区别如下:
目前国内版的认知服务已经有如下(截图于2019年5月23日):
针对于人脸识别的国内版收费如下:
其他的认知服务收费可以参见:https://www.azure.cn/zh-cn/pricing/details/cognitive-services/
3 . 在创建好的人脸服务Overview页面,找到API端点。
4 . 在创建好的人脸服务Keys页面,找到调用服务所需要的密钥。
API端点和密钥将在下一节被用到。
启动人脸容器
1 . 启动cmd命令行窗口,执行以下命令登陆到人脸容器的私有镜像仓库。其中用户名和密码可以从Cognitive Services Vision Containers Request form申请获得
命令示例:
docker login containerpreview.azurecr.io -u
2 . 执行以下命令将最新的人脸容器镜像拉取到本地
docker pull openhackreg.azurecr.io/openhack/face:latest
完成
3 . 执行以下命令启动人脸容器
命令示例:
docker run --rm -it -p 5000:5000 --memory 6g --cpus 2 containerpreview.azurecr.io/microsoft/cognitive-services-face Eula=accept Billing=
执行:
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
执行后显示申请开始,意味着开始提供服务了
测试人脸功能
1 . 在浏览器访问http://localhost:5000/swagger/index.html ,如果人脸API的说明可以正常显示,说明人脸服务已经正常运行。
2 . 访问https://www.microsoft.com/zh-cn/p/intelligent-kiosk/9nblggh5qd84#activetab=pivot:overviewtab 安装Windows Store 应用Intellight Kiosk
安装完成并启动它
3 . 点击左下角按钮,按照下图进行设置(注意点击Click here for extra setup ... 按照提示完成设置)
复制红色框柱部分去执行
以管理员身份新开一个cmd粘贴执行
4 . 在Intelligent Kiosk内找到Face API Explorer并进行测试。该测试支持从摄像头或本地文件获取照片,返回年龄,人脸特征等。
选择获取图片的方式
利用自己笔记本电脑的摄像头拍摄一张自己的照片测算下自己年龄或测试一张图片
人脸信息持久化
自己建立一个组,在这个组里建立分类,比如张三建一类把张三的照片放一起,李四建一类把李四的照片放一起,这叫分类打标签,认知服务会根据我建立的分类来学习就叫机器学习,最后我再随意找一张张三和李四的合影让认知服务识别,就会自动判别张三李四的年龄以及合影照片里谁是张三,谁是李四,并标记出来。
使用人脸API进行人脸分组以及识别时,人脸容器需要对人脸索引信息进行持久化,该持久化能力需要借助到Azure的存储服务和Cosmos Db服务。
1 . 创建存储账号服务,确保账户类型选择的是general purpose v2
存储账户需要注意检查防火墙和虚拟网络是否设置所有网络访问,否则连接会失败
2 . 待存储账号创建好后,在Access keys页面获得连接字符串
3 . 创建Cosmos DB服务,确保API类型选择的是Azure Cosmos DB for MongoDB API
需要注意Cosmos DB的防火墙和虚拟网络要允许所有网络的访问,否则连接会失败
4 . 待Cosmos账号创建好后,在Connection String页面获得连接字符串
5 . 关掉正在运行的人脸容器服务,执行以下命令重新启动人脸容器
命令示例:
docker run --rm -it -p 5000:5000 --memory 6g --cpus 2 containerpreview.azurecr.io/microsoft/cognitive-services-face Eula=accept Billing=
执行:
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"
在setting里生成一个workspace Name
6 . 在Intelligent Kiosk的Face Identification Setup页面创建人脸组,并上传分类,比如一个人一个类别上传他自己的照片成为特征标签
完成后切换回之前的脸部API资源管理器,会提示你是否进行模型训练,点击Yes
此时人脸组索引信息已被持久化,重启人脸容器和Intelligent Kiosk,人脸组仍然能被再次显示。
再次测试可以识别年龄和谁是谁了,百分比表示和我之前建立的人物库中的类别相似度
总结
容器化的人脸服务无需把人脸图片直接上传到Azure,可以大大提高人脸服务的部署灵活性和访问速度。
除此之外还有其他人脸识别的Demo:
表情匹配(PS:我用自己笔记本的摄像头拍的,给大家看我还是模糊下自己丑陋的面孔吧)
实时面部效果:
看起来更像那个名人?(PS:我用自己笔记本的摄像头拍的,给大家看我还是模糊下自己丑陋的面孔吧)
百万级人脸搜索:(PS:我用自己笔记本的摄像头拍的,给大家看我还是模糊下自己丑陋的面孔吧)
实时人群见解:(PS:我用自己笔记本的摄像头拍的,给大家看我还是模糊下自己丑陋的面孔吧)
情感识别:
视频索引分析:分析视频中出现过多少张人脸,并且出现在视频的几分几秒,男女数量统计以及面部表情等信息
还比如这个可以实时动态监测到人的性别,评估年龄和识别表情,并统计当前镜头人数的实时人群见解,动态抓捕人脸所在位置,面孔数等信息
人脸识别只是微软AI能力的其中之一,还有语音识别,文字转语音,语音转文字等,更多人脸识别,物体识别等好AI功能期待您来挖掘和分享。