阿里云视觉AI五天训练营之搭建多场景人脸口罩检测系统(附效果动图)

    科技2022-07-10  177

    搭建多场景人脸口罩检测系统-基于阿里云视觉智能平台

    最后一次的课了,就不辣么水了。这次的试验目的是将用户上传的图片(例如在公共场合的监控照片)进行识别,返回当前图片中的人数、(人)活体的可信度、佩戴口罩的人数以及其占比、未佩戴口罩的人物坐标。可以设置适当的阀值,当达到一定阀值(占比)时进行警告或者通知等处理。

    第一步,阿里云控制台获取accesskey

    不管你调用任何的能力,基本都需要获取accesskey。

    第二步,去阿里云视觉开放平台查看接口文档

    这次试验一共使用了阿里云视觉开放平台的两个能力,分别是: 人脸检测定位:返回图片中人脸数量,人脸坐标;

    使用OpenCV切割人脸(无阿里云相关接口,所以通过本地实现):通过人脸坐标进行裁剪图片,以便下一步检测口罩;

    人脸口罩识别:识别输入图片中的人脸是否有戴口罩。

    预计效果: 输出图片中的人脸数以及可信度,输出未戴口罩的人数以及可信度,未戴口罩的人数达到一定占比对用户进行通知。

    第三步,编写代码(高级CV工程师又上线了)

    1.导入需要使用的模块,以及阿里云视觉相关的模块

    import os import json import time from urllib import request import numpy as np import cv2 from viapi.fileutils import FileUtils from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from aliyunsdkfacebody.request.v20191230.DetectFaceRequest import DetectFaceRequest from aliyunsdkfacebody.request.v20191230.DetectMaskRequest import DetectMaskRequest

    2.出于安全以及模块化的考虑,将阿里云的AccessKey和AccessSecret写入配置文件,需要的时候通过函数调用,代码如下。

    #获取accesskeyId和AccessSecret def get_access(): with open(r'accesskey.conf', 'r') as f: KeyId, Secret = f.read().split() #split切割 return KeyId, Secret

    3.由于将图片交由阿里云视觉平台处理需要使用阿里云OSS,在阿里云OSS的文档中有关于各大编程语言的上传下载等操作的sdk,但是出于懒惰的考虑,我决定使用阿里云视觉平台提供的临时OSS,默认region就是上海的,而上传图片只需要几行代码就搞定了,简直完美;由于在调用的时候需要区分是上传的是本地文件还是图片URL,所以我多加了一个参数‘bool’,用于方便上传本地或者网络的图片,具体代码如下。

    # 上传图片到临时OSS def uploadImage_2_oss(accessKeyId, accessSecret, uploadUrl, bool): file_utils = FileUtils(accessKeyId, accessSecret) oss_url = file_utils.get_oss_url(uploadUrl,"jpg",bool) return (oss_url) # oss_url = file_utils.get_oss_url("/home/xxx.mp4","mp4",True) # print(oss_url)

    4.准备就绪,编写代码调用阿里云视觉平台的人脸检测定位能力,对通过上传到临时OSS的图片进行处理,并格式化返回的结果,因为我们不需要一些无用的返回结果,只需要返回FaceProbabilityList以及Credibility和FaceCoordinate,对于人脸坐标,其实后面还有的用处,返回json数据以及Face_Number,具体代码如下。

    #人脸检测并返回人脸数量、可信度、人脸坐标 def Face_Number_Check(accessKeyId, accessSecret, oss_url): client = AcsClient(accessKeyId, accessSecret, 'cn-shanghai') request_Face_Number = DetectFaceRequest() request_Face_Number.set_accept_format('json') request_Face_Number.set_ImageURL(oss_url) response_Face_Number = client.do_action_with_exception(request_Face_Number) response_Face_Number = str(response_Face_Number, encoding='utf-8') res_Face_Data_List = json.loads(response_Face_Number) Face_Number = len(res_Face_Data_List['Data']['FaceProbabilityList']) Face_Credibility = res_Face_Data_List['Data']['FaceProbabilityList'] #返回人脸矩形框,分别是[left, top, width, height] face_Coordinate = list_split(res_Face_Data_List['Data']['FaceRectangles'],4) C_C_json = {'Coordinate':[], 'Credibility':[]} # class1_value.append ('检测到图像中的人脸数共有 %d 个'
    转载请注明原文地址:https://blackberry.8miu.com/read-555.html
    最新回复(0)