百度AI平台提供的接口十分丰富,对于做项目来说,百度是一个很好的开放平台。本文利用百度提供的接口来实现人脸识别,而且可以无限制调用。博客参考人脸识别-Python-SDK
pip install baidu-aip
利用已有的百度账号进行登录,没有百度账号先注册一个。在控制台中心创建人脸识别应用
创建成功后即可获得AppID、API Key、Secret Key,以及可查看操作内容和添加人脸库。
将ID、Key输入进去。
from aip import AipFace
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipFace(APP_ID, API_KEY, SECRET_KEY
百度Aip支持的图片格式是base64,因此我们要将图片转换为base64格式。图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M
data = 'image.jpg'
data = base64.b64encode(img_data)
image = data.decode()
imageType = "BASE64"
SDK文档中提供了6条可选参数,可选参数里面包含了常用的信息。
""" 调用人脸检测 """
client.detect(image, imageType);
""" 如果有可选参数 """
options = {}
options["face_field"] = "age"
options["max_face_num"] = 2 #最大值为10
options["face_type"] = "LIVE"
options["liveness_control"] = "LOW" #较低的活体
""" 带参数调用人脸检测 """
client.detect(image, imageType, options)
res = client.detect(image, imageType, options)
print(res)
try:
res_list = res['result']
except Exception as e:
res_list = None
return res_list
import base64
from aip import AipFace
APP_ID = '19492922'
API_KEY = 'nlyImVonYtURm1IcYpqvYRZn'
SECRET_KEY = 'your secret_key'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
def face_check(img_data):
"""
人脸识别demo
:param img_data: 二进制的图片数据
:return:
"""
data = base64.b64encode(img_data)
image = data.decode()
imageType = "BASE64"
""" 调用人脸检测 """
client.detect(image, imageType)
""" 如果有可选参数 """
options = {}
options["face_field"] = "beauty,age,faceshape,expression,gender,glasses"
options["max_face_num"] = 10
options["face_type"] = "LIVE"
""" 带参数调用人脸检测 """
res = client.detect(image, imageType, options)
try:
res_list = res['result']
except Exception as e:
res_list = None
return res_list
if __name__ == "__main__":
with open("richowe.jpg", "rb") as f:
data = f.read()
res = face_check(data)
print(res)
这里用到列表,我们可以直接打印调用返回的值,返回的是列表,那我们对列表进行打印找到我们需要的人数年龄美丑值,简化程序。
import base64
from aip import AipFace
def face(img_data,client):
data = base64.b64encode(img_data)
image = data.decode()
imageType = "BASE64"
client.detect(image, imageType)
options = {}
options["face_field"] = "beauty,age,faceshape"
options["max_face_num"] = 10
result = client.detect(image, imageType, options)
print("人数:", result['result']['face_num']) #打印人数
print("年龄:", result['result']['face_list'][0]['age']) #年龄
print("颜值:", result['result']['face_list'][0]['beauty']) #颜值
if __name__ == "__main__":
with open("richowe1.jpg", "rb") as f:
data = f.read()
APP_ID = '19492922'
API_KEY = 'nlyImVonYtURm1IcYpqvYRZn'
SECRET_KEY = 'your secret_key'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
face(data,client)
看一下AI给自己颜值打多少分
这年龄差不多,但32.82属实没排面,换一张!
52.71,好吧长得丑!
FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。‘face_probability’人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大。那我们需要把列表的face_token和face_probability的值读出来。
face_token = res['result']['face_list'][0]['face_token']
face_probability = res['result']['face_list'][0]['face_probability']
#print(face_token)
#print(face_probability)
if (face_token != 'NONE'):
print("识别到人脸" +"\n"+ "人脸可能性:", face_probability)
else:
print("未能识别到人脸")