百度AI平台提供的接口十分丰富,对于做项目来说,百度是一个很好的开放平台。本文利用百度提供的接口来实现人脸识别,而且可以无限制调用。博客参考人脸识别-Python-SDK
一、安装baidu-aip模块
按win+R打开cmd,在里面输入
pip3 install baidu-aip
若出现如下界面,即成功安装了baidu-aip模块:
二、获取百度AI接口密钥
首先,进入如下百度AI官方网站:
https://ai.baidu.com/tech/ocr
有百度账户的输入账户密码进行登录,没有的点击注册,按指示输入相关信息即可注册登录。
登录后找到开放能力的功能列表,下方有人脸与人体识别内容,点击人脸对比了解详情。
就会出现如下服务协议:
点击我已同意百度AI开放平台服务协议,就可以进入如下界面:
下滑根据需求点击领取免费资源。
点击概览中的创建应用
实名认证过程就不演示了
实名认证后点击0元领取
创建成功后即可获得AppID、API Key、Secret Key,以及可查看操作内容和添加人脸库。
接下来查阅官网文档进行操作
请求URL数据格式
# encoding:utf-8
import requests
# client_id 为官网获取的AK, client_secret 为官网获取的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:
print(response.json())
图片转换
百度Aip支持的图片格式是base64,因此我们要将图片转换为base64格式。图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M
data = 'image.jpg'
data = base64.b64encode(img_data)
image = data.decode()
imageType = "BASE64"
调用人脸对比
# encoding:utf-8
import requests
'''
人脸对比
'''
request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match"
params = "[{\"image\": \"sfasq35sadvsvqwr5q...\", \"image_type\": \"BASE64\", \"face_type\": \"LIVE\", \"quality_control\": \"LOW\"},
{\"image\": \"sfasq35sadvsvqwr5q...\", \"image_type\": \"BASE64\", \"face_type\": \"IDCARD\", \"quality_control\": \"LOW\"}]"
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/json'}
response = requests.post(request_url, json=params, headers=headers)
if response:
print (response.json())
返回示例
{
"score": 44.3,
"face_list": [ //返回的顺序与传入的顺序保持一致
{
"face_token": "fid1"
},
{
"face_token": "fid2"
}
]
}
示例程序
import requests
import base64
import json
from get_access_token import get_access_token
'''
人脸对比
'''
request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match"
# 二进制方式打开图片文件
f1 = open('img/1608205456.png', 'rb')
img1 = base64.b64encode(f1.read()) # base64编码
# print(img1)
f2 = open('img/p1.png', 'rb')
img2 = base64.b64encode(f2.read()) # base64编码
# print(img2)
params = json.dumps([
{
"image": str(img1, 'utf-8'), # b --> str
"image_type": "BASE64",
"face_type": "LIVE",
"quality_control": "LOW"
},
{
"image": str(img2, 'utf-8'),
"image_type": "BASE64",
"face_type": "LIVE",
"quality_control": "LOW"
}
])
# print(params, type(params))
access_token = get_access_token("ZL9fe59R8G3ShQZv8qlWNgwK", "Kc5YyfVcp83yPKEyuMxBVfFOhr5hAAdr")
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/json'}
response = requests.post(request_url, data=params, headers=headers)
if response:
print(response.json()['result']['score'])
if response.json()['result']['score'] > 95:
print("same")