一、人脸识别
人脸识别流程图大致如下:
- 摄像头实时采集画面:(总结二中已实现)
- 人脸检测:对人脸进行分析检测
- 人脸搜索:在人脸库中搜索是否存在相识人脸(确认人脸库中是否存在同一个人)
二、创建人脸识别应用
-
控制台登录百度账号,进入控制台点击左侧的 “人脸识别”:
-
点击 “创建应用”:
-
在应用列表中将会生成一行数据,包含了关键的 API Key 和 Secret Key:
三、人脸检测
-
获取 access_token:
def get_accesstoken(self): # client_id 为官网获取的AK, client_secret 为官网获取的SK host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】' # 发送网路请求 response = requests.get(host) if response: data = response.json() self.access_token = data.get('access_token')
注意:需将 “【官网获取的AK】” 替换为刚刚自己申请的 API Key值;"【官网获取的SK】" 替换成 Secret Key值
access_token 的作用相当于是像百度 API 服务地址发送网络请求的访问令牌
-
向百度AI发送人脸检测请求,让百度AI去完成人脸检测,返回检测结果:
def get_face(self): # getOpenFileName通过对话框形式获取一张图片(.jpg)路径 path, ret = QFileDialog.getOpenFileName(self, "get picture", ".", "图片格式(*.jpg)") print(path) # 把图片转换成base64编码 fp = open(path, 'rb') # r: 只读,b: 二进制形式 base64_image = base64.b64encode(fp.read()) print(base64_image) # 请求地址 request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect" # 请求参数 params = { "image": base64_image, "image_type": "BASE64", "face_field": "age,gender,glasses" } # 获取的access_token access_token = self.access_token # 合并的网络请求地址 request_url = request_url + "?access_token=" + access_token # 通过json格式请求 headers = {'content-type': 'application/json'} # 发送网络post请求 response = requests.post(request_url, data=params, headers=headers) if response: print(response.json())
此处请求参数(params)中图片类型(image_type)为 BASE64,因此需将图片进行 Base64编码(先得到图片的二进制,然后用Base64格式编码);如果图片类型(image_type)为 URL,则图片(image)值应为图片的地址链接
-
添加两个按钮,分别关联 get_accesstoken() 函数和 get_face() 函数:
# 按钮关联槽函数 self.pushButton.clicked.connect(self.get_accesstoken) self.pushButton_2.clicked.connect(self.get_face)
-
完成效果
点击蓝色按钮获取access_token;然后点击绿色按钮弹出一个对话框,选择一张图片发送网络请求,让百度 AI 检测是否存在人脸,然后返回结果。
上传检测图片:
最终返回结果:
{'error_code': 0,
'error_msg': 'SUCCESS',
'log_id': 7984893555558,
'timestamp': 1602348011,
'cached': 0,
'result': { 'face_num': 1,
'face_list': [
{
'face_token': '07bd05e22381d3f64c066cbcb7613b25',
'location': {
'left': 383.71,
'top': 236.01,
'width': 191,
'height': 182,
'rotation': -7},
'face_probability': 0.94,
'angle': {'yaw': 20.5, 'pitch': 26.93, 'roll': -15.73},
'age': 15,
'gender': {'type': 'female', 'probability': 0.69},
'glasses': {'type': 'none', 'probability': 0.99}}]}}
具体请求与返回参数说明,请参考:百度人脸检测帮助文档
总结四传送门:人脸课堂签到管理系统(总结四) 实时传输数据