飞道的博客

【AI】Python|人工智能|AI简单实现人脸检测、人脸识别

315人阅读  评论(0)

Python实现人脸检测

首先放一张照片吧,看看我们人脸检测的结果是什么

执行

人脸数量:1
表情:微笑,概率为0.98
性别:女性,概率为1
年龄:23
眼镜:无眼镜,概率为1
情绪:高兴,概率为0.94
魅力值:81.65
输入任意键结束

百度智能云的打分还比较有水平,腾讯云的打分好像给的都偏高,参考价值不是很高。

强调一下哈,本篇文章并不属于面向过程,而是使用百度智能云的API,也是我最近新发现的比较有意思的玩法,可以供娱乐参考。

百度智能云

其他还有腾讯、阿里云等大厂的各式各样的人工智能服务可以自行浏览。

可以点击立即使用,然后登录,里面有详细的文档、和API使用说明,可以供返回的人脸参数包括:年龄、性别、是否带眼镜、是否带口罩、颜值打分(这个功能比较有意思)等,可以自行探索。

以下呢简单修改了一下官方文档中的代码(并不完整,且修改起来有一定难度),让执行更加简单

获取官方的access_token,这是下一步的基础

# encoding:utf-8
import requests

# client_id 为官网获取的AK, client_secret 为官网获取的SK
host_element = list(map(str,input("输入官网获取的AK和SK,用空格分隔:").split()))
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={0}&client_secret={1}'.format(host_element[0],host_element[1])
response = requests.get(host)
if response:
    print(response.json())

输入个人的AK、SK即可直接得到需要的access_token

人脸识别

# encoding:utf-8

import requests
import base64
import json

'''
人脸检测与属性分析
'''

request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
# 二进制方式打开图片文件

f = open('XX', 'rb') # 本地图片地址
img = base64.b64encode(f.read())

params = {}
params["image"] = img
params["image_type"] = "BASE64" # 官方文档中还有其它格式,这里使用BASE64编码图片
params["face_field"] = "age" # 可以添加其他参数


access_token = 'XXXX'  # 填写获取的access_token
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/json'}
response = requests.post(request_url, data=params, headers=headers)
if response:
    result = response.json()   
    print(json.dumps(result, indent=4, ensure_ascii=False)) # 格式化输出

返回示例

{
    "error_code": 0,
    "error_msg": "SUCCESS",
    ... # 不重要
    "result": {
        "face_num": 1,
        "face_list": [
            {
                "face_token": "8a4dafe6baccfbd782ed5740c2a2639e",
                "location": {
                    "left": 919.36,
                    "top": 576.11,
                    "width": 1057,
                    "height": 1047,
                    "rotation": 0
                },
                "face_probability": 1,
                "angle": {
                    "yaw": -15.11,
                    "pitch": 0.52,
                    "roll": -2.4
                },
                "age": 22,
                "beauty": 85.39,
                "expression": {
                    "type": "none",
                    "probability": 1
                },
                "face_shape": {
                    "type": "heart",
                    "probability": 0.46
                },
                "gender": {
                    "type": "female",
                    "probability": 1
                }
            }
        ]
    }
}

返回值可以优化,具体参考百度的官方文档
举例,如何输出像文章开头的例子一样的结果:

if response:
    result = response.json()  # result 是字典格式

    print("人脸数量:",end="")
    print(result["result"]["face_num"])
    
    # 输出表情
    print("表情:",end="")
    if result["result"]["face_list"][0]["expression"]['type'] == 'none':
        print("不笑,",end="")
    elif result["result"]["face_list"][0]["expression"]['type'] == 'smile':
        print("微笑,",end="")
    elif result["result"]["face_list"][0]["expression"]['type'] == 'laugh':
        print("大笑,",end="")
    print("概率为",end="")
    print(result["result"]["face_list"][0]["expression"]['probability'])
    
    # 输出性别
    print("性别:",end="")
    if result["result"]["face_list"][0]["gender"]['type'] == "female":
        print("女性,",end="")
    elif result["result"]["face_list"][0]["gender"]['type'] == "male":
        print("男性,",end="")
    print("概率为", end="")
    print(result["result"]["face_list"][0]["gender"]['probability'])

    # 输出年龄
    print("年龄:",end="")
    print(result["result"]["face_list"][0]["age"])

    # 输出是否戴眼镜
    print("眼镜:",end="")
    if result["result"]["face_list"][0]["glasses"]['type'] == "none":
        print("无眼镜,",end="")
    elif result["result"]["face_list"][0]["glasses"]['type'] == "common":
        print("普通眼镜,",end="")
    elif result["result"]["face_list"][0]["glasses"]['type'] == "sun":
        print("墨镜,",end="")
    print("概率为", end="")
    print(result["result"]["face_list"][0]["glasses"]['probability'])

    # 输出情绪
    print("情绪:",end="")
    if result["result"]["face_list"][0]["emotion"]['type'] == 'angry':
        print("愤怒,",end="")
    elif result["result"]["face_list"][0]["emotion"]['type'] == 'disgust':
        print("厌恶,",end="")
    elif result["result"]["face_list"][0]["emotion"]['type'] == 'fear':
        print("恐惧,",end="")
    elif result["result"]["face_list"][0]["emotion"]['type'] == 'happy':
        print("高兴,",end="")
    elif result["result"]["face_list"][0]["emotion"]['type'] == 'sad':
        print("伤心,",end="")
    elif result["result"]["face_list"][0]["emotion"]['type'] == 'surprise':
        print("惊讶,",end="")
    elif result["result"]["face_list"][0]["emotion"]['type'] == 'neutral':
        print("无表情,",end="")
    elif result["result"]["face_list"][0]["emotion"]['type'] == 'pouty':
        print("撅嘴,",end="")
    elif result["result"]["face_list"][0]["emotion"]['type'] == 'grimace':
        print("鬼脸,",end="")
    print("概率为", end="")
    print(result["result"]["face_list"][0]["emotion"]['probability'])

    # 输出beauty
    print("魅力值:",end="")
    print(result["result"]["face_list"][0]["beauty"])

    input("输入任意键结束")

喜欢的话就赶紧尝试吧!


转载:https://blog.csdn.net/SakuraA6/article/details/106531590
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场