百度云人脸检测本地测试并部署

第一步:成为百度云开发者的一员

点击此链接:https://cloud.baidu.com/ 进入百度云首页:

新手指南链接:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3包含以下所有步骤
在这里插入图片描述
若已经拥有百度账号,可直接点击登录(默认大家已有百度账号);若没有,可点击注册(这里不再详细述说)
登录后选择管理控制台(登录即默认进入管理控制台);
在这里插入图片描述
若无,在首页右上角可点击进入并在左边栏目选择:产品服务->人工智能->人脸识别
在这里插入图片描述
进入人脸识别页面后可点击创建应用:
在这里插入图片描述
并根据自己需求填写,最后点击立即创建,这里页面未显示,就在页面底下:
在这里插入图片描述
接下来回到上个页面:点击管理应用,此时平台已经为你分配了此应用的相关凭证,主要为以下标记的框APP_ID, API_KEY, SECRET_KEY:
在这里插入图片描述

第二步:使用Python-SDK实现人脸检测并返回相关属性

直达链接:https://ai.baidu.com/tech/face/detect

或在首页->开放能力->人脸与人体识别->人脸检测,然后点击技术文档
在这里插入图片描述
在这里插入图片描述
在左边栏目选择SDK文档->REST-API-SDk->Python-SDK,并通过相关方法安装Python-SDK,标绿部分为本地安装模式:
在这里插入图片描述
接下来实例化人脸检测,此处的APP_ID, API_KEY, SECRET_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)

最后配置人脸检测接口,此处的image可接受格式为BASE64,URL,FACE_TOKEN,此三种即为imageType填写的内容,这里我们选择BASE64格式

face-field可选项如下:age,beauty,expression,face_shape,gender,glasses,landmark,landmark72,landmark150,race,quality,eye_status,emotion,face_type;此处可选项即为人脸属性的输出选项

client.detect返回的是一个字典形式的数据,其中 max_face_num决定了一张图片中检测多少人脸的数量。:

image = "取决于image_type参数,传入BASE64字符串或URL字符串或FACE_TOKEN字符串"

imageType = "BASE64"

""" 调用人脸检测 """
client.detect(image, imageType);

""" 如果有可选参数 """
options = {}
options["face_field"] = "age"
options["max_face_num"] = 2
options["face_type"] = "LIVE"
options["liveness_control"] = "LOW"
""" 或者 """
options = {
"max_face_num" = 10
"face_field" = "age,beauty,expression,face_shape,gender,glasses,landmark,landmark150,race,quality,eye_status,emotion,face_type"
}
""" 带参数调用人脸检测 """
result = client.detect(image, imageType, options)

因此我们需要将png、jpg、jpeg、bmp格式的图片转换为BASE64格式,定义img2base64转换函数如下:

def img2base64(img_path):
    import base64
    with open(img_path, "rb") as fp:
        img = fp.read() # 读取图片数据
        base64_data = "%s" % base64.b64encode(img) # 将图片数据转换为base64数据
        image = base64_data.decode("utf-8")

        return image

可自行对上述代码进行更改,封装成自己需要的形式。

返回参数详情如下:

字段必选类型说明
face_numint检测到的图片中的人脸数量
face_listarray人脸信息列表,具体包含的参数参考下面的列表。
+face_tokenstring人脸图片的唯一标识
+locationarray人脸在图片中的位置
++leftdouble人脸区域离左边界的距离
++topdouble人脸区域离上边界的距离
++widthdouble人脸区域的宽度
++heightdouble人脸区域的高度
++rotationint64人脸框相对于竖直方向的顺时针旋转角,[-180,180]
+face_probabilitydouble人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大。
+angelarray人脸旋转角度参数
++yawdouble三维旋转之左右旋转角[-90(左), 90(右)]
++pitchdouble三维旋转之俯仰角度[-90(上), 90(下)]
++rolldouble平面内旋转角[-180(逆时针), 180(顺时针)]
+agedouble年龄 ,当face_field包含age时返回
+beautyint64美丑打分,范围0-100,越大表示越美。当face_fields包含beauty时返回
+expressionarray表情,当 face_field包含expression时返回
++typestringnone:不笑;smile:微笑;laugh:大笑
++probabilitydouble表情置信度,范围【0~1】,0最小、1最大。
+face_shapearray脸型,当face_field包含face_shape时返回
++typedoublesquare: 正方形 triangle:三角形 oval: 椭圆 heart: 心形 round: 圆形
++probabilitydouble置信度,范围【0~1】,代表这是人脸形状判断正确的概率,0最小、1最大。
+genderarray性别,face_field包含gender时返回
++typestringmale:男性 female:女性
++probabilitydouble性别置信度,范围【0~1】,0代表概率最小、1代表最大。
+glassesarray是否带眼镜,face_field包含glasses时返回
++typestringnone:无眼镜,common:普通眼镜,sun:墨镜
++probabilitydouble眼镜置信度,范围【0~1】,0代表概率最小、1代表最大。
+eye_statusarray双眼状态(睁开/闭合) face_field包含eye_status时返回
++left_eyedouble左眼状态 [0,1]取值,越接近0闭合的可能性越大
++right_eyedouble右眼状态 [0,1]取值,越接近0闭合的可能性越大
+emotionarray情绪 face_field包含emotion时返回
++typestringangry:愤怒 disgust:厌恶 fear:恐惧 happy:高兴 sad:伤心 surprise:惊讶 neutral:无情绪
++probabilitydouble情绪置信度,范围0~1
+racearray人种 face_field包含race时返回
++typestringyellow: 黄种人 white: 白种人 black:黑种人 arabs: 阿拉伯人
++probabilitydouble人种置信度,范围【0~1】,0代表概率最小、1代表最大。
+face_typearray真实人脸/卡通人脸 face_field包含face_type时返回
++typestringhuman: 真实人脸 cartoon: 卡通人脸
++probabilitydouble人脸类型判断正确的置信度,范围【0~1】,0代表概率最小、1代表最大。
+landmarkarray4个关键点位置,左眼中心、右眼中心、鼻尖、嘴中心。face_field包含landmark时返回
+landmark72array72个特征点位置 face_field包含landmark72时返回
+landmark150array150个特征点位置 face_field包含landmark150时返回
+qualityarray人脸质量信息。face_field包含quality时返回
++occlusionarray人脸各部分遮挡的概率,范围[0~1],0表示完整,1表示不完整
+++left_eyedouble左眼遮挡比例,[0-1] ,1表示完全遮挡
+++right_eyedouble右眼遮挡比例,[0-1] , 1表示完全遮挡
+++nosedouble鼻子遮挡比例,[0-1] , 1表示完全遮挡
+++mouthdouble嘴巴遮挡比例,[0-1] , 1表示完全遮挡
+++left_cheekdouble左脸颊遮挡比例,[0-1] , 1表示完全遮挡
+++right_cheekdouble右脸颊遮挡比例,[0-1] , 1表示完全遮挡
+++chindouble下巴遮挡比例,,[0-1] , 1表示完全遮挡
++blurdouble人脸模糊程度,范围[0~1],0表示清晰,1表示模糊
++illuminationdouble取值范围在[0~255], 表示脸部区域的光照程度 越大表示光照越好
++completenessint64人脸完整度,0或1, 0为人脸溢出图像边界,1为人脸都在图像边界内

返回示例如下:

{
  "face_num": 1,
  "face_list": [
       {
            "face_token": "35235asfas21421fakghktyfdgh68bio",
            "location": {
                "left": 117,
                "top": 131,
                "width": 172,
                "height": 170,
                "rotation": 4
           },
            "face_probability": 1,
            "angle" :{
                 "yaw" : -0.34859421849251
                 "pitch" 1.9135693311691
                 "roll" :2.3033397197723
           }
            "landmark": [
               {
                    "x": 161.74819946289,
                    "y": 163.30244445801
               },
                ...
           ],
            "landmark72": [
               {
                    "x": 115.86531066895,
                    "y": 170.0546875
               },
                ...
           ],
            "age": 29.298097610474,
            "beauty": 55.128883361816,
            "expression": {
                "type": "smile",
                "probability" : 0.5543018579483
           },
            "gender": {
                "type": "male",
                "probability": 0.99979132413864
           },
            "glasses": {
          "type": "sun",
                "probability": 0.99999964237213
           },
            "race": {
                "type": "yellow",
                "probability": 0.99999976158142
           },
            "face_shape": {
                "type": "triangle",
                "probability": 0.5543018579483
           }
            "quality": {
                "occlusion": {
                    "left_eye": 0,
                    "right_eye": 0,
                    "nose": 0,
                    "mouth": 0,
                    "left_cheek": 0.0064102564938366,
                    "right_cheek": 0.0057411273010075,
                    "chin": 0
               },
                "blur": 1.1886881756684e-10,
                "illumination": 141,
                "completeness": 1
           }
       }
   ]
}

第三步:本地测试

调用百度云人脸检测链接,并运用flask部署,完整代码如下:

from baiduyun_face_detection.aip import AipFace
import base64
from flask import Flask, jsonify, request

app = Flask(__name__)

class baiduyun_sdk():
    def __init__(self,):
        self.app_id = "你的APP_ID"
        self.api_key = "你的API_KEY"
        self.secret_key = "你的SECRET_KEY"
        self.imageType = "BASE64"
        self.options = {
            "max_face_num": 10,
            "face_fields":"age,beauty,expression,face_shape,gender,glasses,landmark,landmark150,race,quality,eye_status,emotion,face_type"
        }

    # 获取到通往百度云人脸检测的链接
    def get_baiduyun_face_detect_url(self):
        client = AipFace(self.app_id, self.api_key, self.secret_key)

        return client

    # 获取图片的base64格式,因为百度云暂时只接受三种输入格式:BASE64、FACE_TOKEN、URL(个人理解为网络图片链接)
    def img2base64(self,image_bytes):
        # with open(image_bytes, "rb") as fb:
        img = image_bytes.read()
        base64data = "%s" % base64.b64encode(img)
        image = base64data.decode("utf-8")

        return image

    # 获取图片属性并返回一个json文件
    def get_attributes(self,image_bytes):
        image = self.img2base64(image_bytes = image_bytes)

        image_type = self.imageType

        options = self.options

        client = self.get_baiduyun_face_detect_url()

        attribute = client.detect(image, image_type, options)

        return attribute

@app.route("/attribute", methods= ["POST"])
def attribute():
    response = {}
    image_bytes = request.files["file"]
    if image_bytes != None:
        response['rtCode'] = '20000'
    else:
        response['rtCode'] = '20002'
    result = baiduyun_sdk().get_attributes(image_bytes = image_bytes)

    response["result"] = result["result"]

    return jsonify(response)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

``本地测试调用代码如下:

import requests

resp = requests.post("http://192.168.1.***:5000/attribute",#这里需要修改自己的地址
files="file":open("D:/***/images/duorentu.jpg","rb")})# 这需要修改自己的图片路径

print(resp.json())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值