调用百度API接口实现人脸识别

通过SDK的方式调用百度API

from aip import AipFace
import base64
import pprint
import cv2
import matplotlib.pyplot as plt
'''''
实例化一个人脸检测对象,即创建AipFace(AipFace是人脸识别的Python SDK客户端,为使用人脸识别的开发人员提供了一系列的交互方法)
APP_IDAPP_KEYSECRET_KEY在百度AI中创建应用所对应的ID
网址:https://ai.baidu.com/tech/face/detect
'''''
APP_ID  = '修改为自己所使用的的ID' 
APP_KEY = '修改为自己所使用的的ID'  
SECRET_KEY = '修改为自己所使用的的ID'  
client = AipFace(APP_ID,APP_KEY,SECRET_KEY)
'''''
人脸检测:检测图片中的人脸返回人脸参数:有定位到人脸位置的信息 年龄 表情等参数
返回的信息是文字,尚未图像化
'''''
#以二进制方式读取一张图片
with open("待识别的图片",'rb') as f:
    img_jpg = f.read()
    img64 = base64.b64encode(img_jpg).decode()  #base64编码
    imgType = 'BASE64'

    # options为可选参数
    # 参数设置参考 https://cloud.baidu.com/doc/FACE/s/ek37c1qiz
    options = {}
    #引号中的参数可以改为“age,beauty,expression,face_shape,gender,
    glasses,landmark,landmark72,landmark150,race,quality,eye_status,
    emotion,face_type” 这里选取的是beauty
    options['face_field'] = 'beauty'  
    options['max_face_num'] = 6  #最大检测到的人脸数  随意设置

    content = client.detect(img64,imgType,options)
    #此行可以看见返回的参数,可以注释掉, 也可以取消注释
    pprint.pprint(content)

#用opencv的方式读取图片
img_open = cv2.imread('自己所检测的图片')

'''''
通过之前人脸检测返回的各种参数  找到其中的位置参数 
有了位置参数便可以利用opencv画矩形框
也可以利用你自己返回的参数,来添加你想要表达的信息,比如年龄等
'''''
if content['error_code'] == 0:
    result = content['result']
    for face in result['face_list']:
        if face['face_probability'] > 0.8:
            loc = face['location']
            #获取人脸框的坐标
            pt1 = (int(loc['left']),int(loc['top']))
            pt2 = (int(loc['left'] + loc['width']),int(loc['top'] + loc['height']))
    #画边框
    cv2.rectangle(img_open,pt1,pt2,(255,0,0),2)
    #画 expression 和  beauty
    cv2.putText(img_open,"{}".format(face['beauty']),(pt1[0],pt1[1] - 10),
                fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=0.5,color=(255,0,0),thickness=2)
    if face['beauty'] >60:
    cv2.putText(img_open,'mei',(pt1[0]+45,pt1[1]-15),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),2)
else:
    cv2.putText(img_open, 'chou', (pt1[0]+45, pt1[1]-15), cv2.FONT_HERSHEY_SIMPLEX,1, (255, 0, 0), 2)
    plt.figure(figsize=(10,8), dpi=100)
    plt.imshow(img_open)
    plt.axis('off')
    plt.show()

检测结果如下图:
调用百度API接口实现人脸识别_第1张图片

你可能感兴趣的:(人脸识别)