当前位置: 移动技术网 > IT编程>脚本编程>Python > 百度AI人脸识别接口调用示例(基于python)

百度AI人脸识别接口调用示例(基于python)

2020年07月26日  | 移动技术网IT编程  | 我要评论

前言:

百度AI平台的人脸检测和人脸搜索这两个接口是可以免费调用的,因此比较值得学习。

人脸检测:

首先需要在百度AI的控制台建立应用,获取API KeySecret Key,下面只呈现代码,参数、请求要求等详细信息可以参考百度AI官网技术文档

 基于API的调用:

# encoding:utf-8

import requests
import base64
from urllib.parse import urlencode
import urllib

def getAccess_token(AK,SK):
    host = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+AK+"&client_secret="+SK
    response = requests.get(host)
    if response:
        dict=response.json()
        access_token=dict.get("access_token","none")
        #print(dict.get("access_token","none"))
    return access_token

def Base64(img_path):
    with open(img_path, 'rb') as f:
        image_data = f.read()
        base64_data = base64.b64encode(image_data)  # base64编码
        string=str(base64_data,"utf-8")
        # print(string)
    return string

def request_post(base64_code,access_token):
    request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
    params={'image':''+base64_code+'','image_type':'BASE64','face_field':'age,beauty,faceshape,gender,glasses'}
    params=urlencode(params)
    request_url = request_url + "?access_token=" + access_token
    request = urllib.request.Request(url=request_url,data=params.encode("utf-8"))
    request.add_header('Content-Type', 'application/json')
    response = urllib.request.urlopen(request)
    content = response.read()
    return content

if __name__ == "__main__":
    AK="qdfasgdagsdeZ1GfiW0HYv1mK"
    SK="sdgaehyerhewi1WL6v5tjnXm"
    img_path = 'C:/Users/Desktop/dsfas.jpg'
    # print(Base64(img_path))
    base64_code = Base64(img_path)
    access_token=getAccess_token(AK,SK)
    data_set=request_post(base64_code,access_token)
    print(data_set)
   

返回结果:

{
    'error_code': 0, 
    'error_msg': 'SUCCESS',
     'log_id': 11014555848, 
     'timestamp': 1595553710, 
     'cached': 0, 
     'result': 
     {
         'face_num': 1, 
         'face_list': 
         [
             {
                'face_token': 'df6100a11a22226a7057c2ef3d6057a5', 
                'location': 
                  {
                    'left': 34.63, 
                    'top': 118.53, 
                    'width': 89, 
                    'height': 83, 
                    'rotation': -10
                  }, 
                'face_probability': 1,
                'angle': 
                    {
                    'yaw': 2.95, 
                    'pitch': 20.88, 
                    'roll': -13.98
                    }, 
                'liveness': 
                   {
                    'livemapscore': 0.97
                    },
                'beauty': 79.47
                }
                ]
                }
            }

基于SDK的调用:

       基于SDK的调用首先需要安装相应的python库

安装使用Python SDK有如下方式:

如果已安装pip,执行pip install baidu-aip即可。
如果已安装setuptools,执行python setup.py install即可。



人脸识别 Python SDK目录结构

├── README.md
├── aip                   //SDK目录
│   ├── __init__.py       //导出类
│   ├── base.py           //aip基类
│   ├── http.py           //http请求
│   └── face.py //人脸识别
└── setup.py              //setuptools安装
import base64
from aip import AipFace


global string
#""" 你的 APPID AK SK """
APP_ID = '14547822'
API_KEY = 'qTfhshYv1mK'
SECRET_KEY = 'UHuhdfyhwerhhi1WL6v5tjnXm'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)

img_path = 'C:/Users/Desktop/dsfas.jpg'
with open(img_path, 'rb') as f:
    image_data = f.read()
    base64_data = base64.b64encode(image_data)  # base64编码
    string=str(base64_data,"utf-8")
    # print(string)    
image = string
imageType = "BASE64"

options = {}
options["max_face_num"] = 2
options["face_type"] = "LIVE"
options["liveness_control"] = "LOW"
options["face_field"] = "age,beauty,emotion,glasses,race,face_shape,gender"

dict_data=client.detect(image, imageType, options)#返回数据类型为字典
#print(dict_data)

#对返回结果进行处理并输出

dict_data2=dict_data.get("result","none")
dict_data3=dict_data2.get("face_list","none")
for i in dict_data3:
    for key,value in i.items():
        print(key,value)

输出处理后的结果:

location {'left': 34.63, 'top': 118.53, 'width': 89, 'height': 83, 'rotation': -10}
face_probability 1
angle {'yaw': 2.95, 'pitch': 20.88, 'roll': -13.98}
age 25
beauty 79.47
emotion {'type': 'neutral', 'probability': 0.85}
glasses {'type': 'none', 'probability': 1}
race {'type': 'yellow', 'probability': 1}
face_shape {'type': 'oval', 'probability': 0.66}
gender {'type': 'male', 'probability': 1}

人脸搜索:

     人脸搜索首先需要建立人脸库,然后才能进行以下两种搜索

  • 人脸搜索:也称为1:N识别,在指定人脸集合中,找到最相似的人脸;
  • 人脸搜索 M:N识别:也称为M:N识别,待识别图片中含有多个人脸时,在指定人脸集合中,找到这多个人脸分别最相似的人脸

1.建立人脸库:(详细信息可以参考技术文档

        基于API的调用:

# encoding:utf-8

import requests
import base64
from urllib.parse import urlencode
import urllib

#人脸库结构
# |- 人脸库(appid)
#    |- 用户组一(group_id)
#       |- 用户01(uid)
#          |- 人脸(faceid)
#       |- 用户02(uid)
#          |- 人脸(faceid)
#          |- 人脸(faceid)
#          ....
#        ....
#    |- 用户组二(group_id)
#    |- 用户组三(group_id)

# 人脸注册

def getAccess_token(AK,SK):
    host = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+AK+"&client_secret="+SK
    response = requests.get(host)
    if response:
        dict=response.json()
        access_token=dict.get("access_token","none")
        #print(dict.get("access_token","none"))
    return access_token

def Base64(img_path):
    with open(img_path, 'rb') as f:
        image_data = f.read()
        base64_data = base64.b64encode(image_data)  # base64编码
        string=str(base64_data,"utf-8")
        # print(string)
    return string

def request_post(base64_code,access_token):
    request_url="https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add"
    params={'image':''+base64_code+'','image_type':'BASE64','group_id':'group_1','user_id':'user_1','user_info':'图片2'}
    params=urlencode(params)
    request_url = request_url + "?access_token=" + access_token
    request = urllib.request.Request(url=request_url,data=params.encode("utf-8"))
    request.add_header('Content-Type', 'application/json')
    response = urllib.request.urlopen(request)
    content = response.read()
    return content

if __name__ == "__main__":
    AK="qTKX7fdhsGfiW0HYv1mK"
    SK="UHu5ydfgsdgfsdga5tjnXm"
    img_path = 'C:/Users/Desktop/dhglkj.jpg'
    # print(Base64(img_path))
    base64_code = Base64(img_path)
    access_token=getAccess_token(AK,SK)
    data_set=request_post(base64_code,access_token)
    print(data_set)
    #print(type(data_set))#<class 'bytes'>

# 查看人脸库列表

def getAccess_token(AK,SK):
    host = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+AK+"&client_secret="+SK
    response = requests.get(host)
    if response:
        dict=response.json()
        access_token=dict.get("access_token","none")
        #print(dict.get("access_token","none"))
    return access_token

def request_post(access_token):
    request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/getlist"
    params={"user_id":"user_1","group_id":"group_1"}
    params=urlencode(params)
    request_url = request_url + "?access_token=" + access_token
    request = urllib.request.Request(url=request_url,data=params.encode("utf-8"))
    request.add_header('Content-Type', 'application/json')
    response = urllib.request.urlopen(request)
    content = response.read()
    return content

if __name__ == "__main__":
    AK="qTKX7mdafsfg0HYv1mK"
    SK="UHu5yYuQahn7L4fhasdfawv5tjnXm"
    access_token=getAccess_token(AK,SK)
    data_set=request_post(access_token)
    print(data_set)
    print(type(data_set))#<class 'bytes'>


#人脸删除

def getAccess_token(AK,SK):
    host = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+AK+"&client_secret="+SK
    response = requests.get(host)
    if response:
        dict=response.json()
        access_token=dict.get("access_token","none")
        #print(dict.get("access_token","none"))
    return access_token

def request_post(access_token):
    request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/delete"
    params={"user_id":"user_2","group_id":"group_1","face_token":"df6100a11a22226a7057c2ef3d6057a5"}
    params=urlencode(params)
    request_url = request_url + "?access_token=" + access_token
    request = urllib.request.Request(url=request_url,data=params.encode("utf-8"))
    request.add_header('Content-Type', 'application/json')
    response = urllib.request.urlopen(request)
    content = response.read()
    return content

if __name__ == "__main__":
    AK="qTKX7sdfasdgYv1mK"
    SK="UHu5yYuQahrgagdL6v5tjnXm"
    access_token=getAccess_token(AK,SK)
    data_set=request_post(access_token)
    print(data_set)
    print(type(data_set))#<class 'bytes'>

基于SDK的调用:


import base64
from aip import AipFace

#人脸注册
global string

APP_ID = '1351822'
API_KEY = 'qTKrefhdfgsv1mK'
SECRET_KEY = 'UHejgfhjraf346v5tjnXm'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)

img_path = 'C:/Users/Desktop/dsfas.jpg'
with open(img_path, 'rb') as f:
    image_data = f.read()
    base64_data = base64.b64encode(image_data)  # base64编码
    string=str(base64_data,"utf-8")
    # print(string)    
image = string
imageType = "BASE64"
groupId = "group_1"
userId = "user_1"

#client.addUser(image, imageType, groupId, userId);

options = {}
options["user_info"] = "user's info"
options["quality_control"] = "NORMAL"
options["liveness_control"] = "LOW"
options["action_type"] = "REPLACE"

print(client.addUser(image, imageType, groupId, userId, options))


#人脸删除

APP_ID = '3512822'
API_KEY = 'qTK235aswdtgsafiW0HYv1mK'
SECRET_KEY = 'UHrjtfgy568q3wfsdgGxPYhv5tjnXm'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
userId = "user_1"
groupId = "group_1"
faceToken = "60f228fddd57eae00cd14b97bc46b174"
#调用删除
print(client.faceDelete(userId, groupId, faceToken))

#人脸信息查询

APP_ID = '18436222'
API_KEY = 'qTKX7mrhjrtygg4567hgfGfiW0HYv1mK'
SECRET_KEY = 'UHurtjhtyk5673424xPYhi1WL6v5tjnXm'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)

userId = "user_1"
groupId = "group_1"
print(client.getUser(userId, groupId))

返回结果:


#添加人脸图片 dsfas.jpg

b'{
    "error_code":0,
    "error_msg":"SUCCESS",
    "log_id":1565001553584,
    "timestamp":1595591257,
    "cached":0,
    "result":{
        "face_token":"df6100a11a22226a7057c2ef3d6057a5",
        "location":{
            "left":34.63,
            "top":118.53,
            "width":89,
            "height":83,
            "rotation":-10}}}'


#添加人脸图片 dsfas.jpg
b'{
    "error_code":0,
    "error_msg":"SUCCESS",
    "log_id":2584845545055,
    "timestamp":1595593206,
    "cached":0,"result":{
        "face_token":"1f92a58188cefd7e4a34ba40d05d1d53",
        "location":{
            "left":95.6,
            "top":129.77,
            "width":112,"height":108,
            "rotation":-1
            }
        }
 }'


#查看图片数据列表 user_1

b'{
    "error_code":0,
    "error_msg":"SUCCESS",
    "log_id":17565896520,
    "timestamp":1595593711,
    "cached":0,
    "result":{
        "face_list":[{
            "face_token":"df6100a11a22226a7057c2ef3d6057a5",
            "ctime":"2020-07-24 19:47:37"},
            {"face_token":"1f92a58188cefd7e4a34ba40d05d1d53",
            "ctime":"2020-07-24 20:20:06"}]}}'

#删除人脸图片


{
  "error_code": 0,  
  "log_id": 73473737,
}

2.人脸搜索:(详细信息可以参考技术文档

    基于SDK的调用:

from aip import AipFace 
import base64

global string
#""" 你的 APPID AK SK """
APP_ID = '1835822'
API_KEY = 'qergfdhGfiW435HYv1mK'
SECRET_KEY = 'UHu5yYujytk34Yhi1WL6v5tjnXm'

client = AipFace(APP_ID, API_KEY, SECRET_KEY)

img_path = 'C:/Users/Desktop/dsfas_test.jpg'

with open(img_path, 'rb') as f:
    image_data = f.read()
    base64_data = base64.b64encode(image_data)  # base64编码
    string=str(base64_data,"utf-8")
    # print(string)
    
image = string

imageType = "BASE64"

groupIdList = "group_1"

""" 调用人脸搜索 """
list1=client.search(image, imageType, groupIdList)
print(list1)

""" 如果有可选参数 """
options = {}
options["max_face_num"] = 3
options["match_threshold"] = 70
options["quality_control"] = "NORMAL"
options["liveness_control"] = "LOW"
options["user_id"] = "233451"
options["max_user_num"] = 3

""" 带参数调用人脸搜索 """
list2=client.search(image, imageType, groupIdList, options)
print(list2)

返回结果:

{
    'error_code': 0,
     'error_msg': 'SUCCESS', 
     'log_id': 2555001258499, 
     'timestamp': 1595593364, 
     'cached': 0, 
     'result': {
         'face_token': '7d3ae01110f614257a143b8821bb63ce', 
         'user_list': [{
             'group_id': 'group_1',
              'user_id': 'user_1', 
              'user_info': '图片2', 
              'score': 94.658317565918}]
              }
}

结束语:

调用百度AI开放接口可以快速便捷的为应用增加AI能力,对于有需求但又没有神经网络搭建、模型训练能力的人员来说是一种不错的选择。

本文地址:https://blog.csdn.net/weixin_42126140/article/details/107582755

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网