人脸课堂签到管理系统(总结三) 百度人脸检测API的调用

一、人脸识别

总结二:人脸课堂签到管理系统(总结二) 摄像头显示

人脸识别流程图大致如下:

  • 摄像头实时采集画面:(总结二中已实现)
  • 人脸检测:对人脸进行分析检测
  • 人脸搜索:在人脸库中搜索是否存在相识人脸(确认人脸库中是否存在同一个人)

二、创建人脸识别应用

百度人脸识别官网

  1. 控制台登录百度账号,进入控制台点击左侧的 “人脸识别”:

  2. 点击 “创建应用”:

  3. 在应用列表中将会生成一行数据,包含了关键的 API KeySecret Key

三、人脸检测

  1. 获取 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 服务地址发送网络请求的访问令牌

  2. 向百度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)值应为图片的地址链接

    扫描二维码关注公众号,回复: 12084638 查看本文章
  3. 添加两个按钮,分别关联 get_accesstoken() 函数和 get_face() 函数:

    # 按钮关联槽函数
    self.pushButton.clicked.connect(self.get_accesstoken)
    self.pushButton_2.clicked.connect(self.get_face)
    
  4. 完成效果

    点击蓝色按钮获取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}}]}}

具体请求与返回参数说明,请参考:百度人脸检测帮助文档
总结四传送门:人脸课堂签到管理系统(总结四) 实时传输数据

猜你喜欢

转载自blog.csdn.net/xwmrqqq/article/details/109007002