Python利用百度AI平台实现人脸识别

前言

百度AI平台提供的接口十分丰富,对于做项目来说,百度是一个很好的开放平台。本文利用百度提供的接口来实现人脸识别,而且可以无限制调用。博客参考人脸识别-Python-SDK

安装
pip install baidu-aip
百度AI平台

利用已有的百度账号进行登录,没有百度账号先注册一个。在控制台中心创建人脸识别应用应用创建
创建成功后即可获得AppID、API Key、Secret Key,以及可查看操作内容和添加人脸库。

新建AipFace demo

将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属实没排面,换一张!
打印1
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("未能识别到人脸")

发布了31 篇原创文章 · 获赞 22 · 访问量 9485

猜你喜欢

转载自blog.csdn.net/richowe/article/details/105609935