首先来看一下识别的效果:这里需要完整代码以及SDK的请点击此处下载:百度人脸识别—人脸对比

首先需要注册百度账号并且创建对应的应用,这里具体方法如图:

访问:http://ai.baidu.com/  点击控制台

登录后创建应用:

  此处注意:图像处理中的各项功能共用的是一个SDK包,只是不同功能实现的时候使用的函数以及返回参数不同,点击完创建应用后就可以生成三个我们后期识别过程中必须使用的参数:AppID,API Key和secert key,这里我们可以点击查看应用详情来获取

 在这里,我们首先需要通过API Key和Secret Key来获取access_token,这里具体的代码为:

import urllib, urllib2, sys
import ssl
 
# 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】'
request = urllib2.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib2.urlopen(request)
content = response.read()
if (content):
    print(content)

注意:这里很多读者会填写错AK(API Key)和SK(Secret Key),host填写完成后应该是这样的:

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&

然后,我们运行程序就可以获得返回值,返回值中的access_token就是我们需要获取的值了,这个值在后面实际进行人脸检测的时候需要用到:

 完成上述步骤之后,我们就可以进行实际的人脸操作过程了,首先贴上官方SDK给的代码(这些代码仅供参考,因为很多不符合Python3的标准,通知没有图片base64编码的过程),主要是让大家看一看一些官方的参数:

# encoding:utf-8
import urllib2
import json

'''
人脸对比
'''

request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match"


params = json.dumps(
    [{"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
request = urllib2.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/json')
response = urllib2.urlopen(request)
content = response.read()
if content:
    print content

 这里,具体参数有:

参数 必选 类型 说明
image string 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断。 两张图片通过json格式上传,格式参考表格下方示例
image_type string 图片类型
BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;
URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。
face_type string 人脸的类型
LIVE:表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等,
IDCARD:表示身份证芯片照:二代身份证内置芯片中的人像照片,
WATERMARK:表示带水印证件照:一般为带水印的小图,如公安网小图
CERT:表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片
默认LIVE
quality_control string 图片质量控制
NONE: 不进行控制
LOW:较低的质量要求
NORMAL: 一般的质量要求
HIGH: 较高的质量要求
默认 NONE
若图片质量不满足要求,则返回结果中会提示质量检测失败
liveness_control string 活体检测控制
NONE: 不进行控制
LOW:较低的活体要求(高通过率 低攻击拒绝率)
NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率)
HIGH: 较高的活体要求(高攻击拒绝率 低通过率)
默认 NONE
若活体检测结果不满足要求,则返回结果中会提示活体检测失败

 我们在实际使用上可以根据我们的需要来调整参数,这里博主不再赘述,接下来附上博主的源码:

# encoding:utf-8
import urllib.request
import json
import base64
import tkinter.messagebox
import ast

'''
人脸对比
'''
request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match"
filename1 = 'compare1.jpg'
filename2 = 'compare2.jpg'
f = open(filename1,'rb')
f2 = open(filename2,'rb')
img_test1 = base64.b64encode(f.read())
img_test2 = base64.b64encode(f2.read())

params = json.dumps(
    [{"image":''+str(img_test1,'utf-8')+'', "image_type": "BASE64", "face_type": "LIVE", "quality_control": "LOW"},
     {"image":''+str(img_test2,'utf-8')+'', "image_type": "BASE64", "face_type": "IDCARD", "quality_control": "LOW"}])
#params=urlencode(params)
access_token = '这里需要你自行填入'
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()
if content:
    print(content)
content = content.decode("utf-8")
content = ast.literal_eval(content)
print(content['result']['score'])
tkinter.messagebox.showinfo('图片相似度', "两个人的相似度为:%d"%content['result']['score']+"%")