一. 百度AI人脸接口介绍

1.基本介绍

接口能力

  • 两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值;
  • 多种图片类型:支持生活照证件照身份证芯片照带网纹照四种类型的人脸对比;
  • 活体检测:基于图片中的破绽分析,判断其中的人脸是否为二次翻拍(举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节。);
  • 质量检测:返回模糊、光照等质量检测信息,用于辅助判断图片是否符合识别要求;

业务应用

用于比对多张图片中的人脸相似度并返回两两比对的得分,可用于判断两张脸是否是同一人的可能性大小。

典型应用场景:如人证合一验证用户认证等,可与您现有的人脸库进行比对验证。

2.请求参数和返回参数

请求参数

参数 必选 类型 说明
image string 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断。 两张图片通过json格式上传,格式参考表格下方示例
image_type string 图片类型 BASE64:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过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

返回参数

参数名 必选 类型 说明
score float 人脸相似度得分
face_list array 人脸信息列表
+face_token string 人脸的唯一标志

3.请求示例(v3版本)

请求示例

(1)HTTP方法:POST

(2)请求URL: https://aip.baidubce.com/rest/2.0/face/v3/match

(3)URL参数:

参数
access_token 通过API Key和Secret Key获取的access_token,参考“Access Token获取”

Header:

参数
Content-Type application/x-www-form-urlencoded

完整的请求url如下:

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

二.算法思路

1.首先根据自己的API Key和Secret Key获取对应的access_token,将access_token添加到请求url参数中。

2.将要进行对比的两张图片分别经过Base64编码成一串字符串,使用该字符串代替图像地址。需要注意的是,图片的base64编码是不包含图片头的。如data:image/jpg;base64,

3.构建要传入request请求中的json格式的数据。

4.发送post请求,返回响应结果。

具体过程:

1.首先根据自己的API Key和Secret Key获取对应的access_token,将access_token添加到请求url参数中。

# encoding:utf-8
import requests# 将API_KEY和SECRET_KEY分别替换成自己的
API_KEY = 'bIK................'
SECRET_KEY = 'oCb................'# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + API_KEY + '&client_secret=' + SECRET_KEY
response = requests.get(host)
if response:print(response.json())######## 输出结果 #########
"""
{
'refresh_token': 'xxxxxxx',
'expires_in': 2592000,
'session_key': 'xxxxxxx',
'access_token': 'xxxxxxx',
'scope': 'xxxxxxx'
}
"""
###########################

可以看到输出结果是一个字典,而 'access_token' 即为需要的值所对应的键,故我们可通过response.json()['access_token']进行获取。

2.将要进行对比的两张图片分别经过Base64编码成一串字符串,使用该字符串代替图像地址。需要注意的是,图片的base64编码是不包含图片头的。如data:image/jpg;base64,

filename1 = '1.jpg'
img1 = cv.imread(filename1)
f1 = open(filename1, 'rb')
img_1 = base64.b64encode(f1.read())filename2 = '2.jpg'
img2 = cv.imread(filename2)
f2 = open(filename2, 'rb')
img_2 = base64.b64encode(f2.read())print(str(img_1, 'utf-8'))
print(str(img_2, 'utf-8'))

通过上述代码即可得到图片对应的Base64编码,可以将其封装成一个函数:

def pic2base64(filename):"""读取文件对应的图片,将其经过Base64编码成不带图片头的字符串代替图像地址。- 请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。- 需要注意的是,图片的base64编码是不包含图片头的,如data:image/jpg;base64:param filename::return:"""img = cv.imread(filename)f = open(filename, 'rb')res_img = base64.b64encode(f.read())return str(res_img, 'utf-8')

3.构建要传入request请求中的json格式的数据。

# pic_1和pic_2分别是Base64编码后的字符串
pic_1 = pic2base64(filename1)
pic_2 = pic2base64(filename2)access_token = 'xxxxxxxxxxx'   # 根据自己获取的access_token
# 构建请求url
request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match?access_token=" + access_token# 构建headers,作为post的headers参数
headers = {'Content-Type': 'application/x-www-form-urlencoded'
}# 构建json类型的数据,作为post请求的data参数
params = "[" \"{\"image\": \"%s\", " \"\"image_type\": \"BASE64\", " \"\"face_type\": \"LIVE\", " \"\"quality_control\": \"LOW\"}," \"{\"image\": \"%s\", " \"\"image_type\": \"BASE64\", " \"\"face_type\": \"LIVE\", " \"\"quality_control\": \"LOW\"}" \"]" % (pic_1, pic_2)

4.发送post请求,返回响应结果。

# 发起POST请求
resp = requests.post(url=request_url, data=params, headers=headers)# 打印返回的响应信息
if resp:res_json = resp.json()print(res_json)########## 输出结果 ###############
"""
{'error_code': 0, 'error_msg': 'SUCCESS', 'log_id': 7999899975001, 'timestamp': 1592787625, 'cached': 0, 'result': {'score': 36.03727722, 'face_list': [{'face_token': '5d4ad1f83294b6f5c6efa972bb9680d0'}, {'face_token': '87193c64392d230cffc53f56b8d9f83c'}]}
}"""

故我们可以通过判断错误信息是否为SUCCESS,是则打印出最终的score;否则打印出错误信息。

resp = requests.post(url=request_url, data=params, headers=headers)if resp:res_json = resp.json()print(res_json)error_msg = res_json['error_msg']if error_msg != 'SUCCESS':print("错误信息: ", error_msg)else:res_score = res_json['result']['score']print("最终的得分是:", res_score)

三.完整代码

import requests
import base64
import cv2 as cvAPI_KEY = 'bIKRsY3ZQuYhby4jg0Z4QwDQ'
SECRET_KEY = 'oCbEN6p39hGvv5QDUcjuI8hFaRfM9iCx'# client_id 为官网获取的AK, client_secret 为官网获取的SK
def get_access_token(API_KEY, SECRET_KEY):"""根据API_KEY和SECRET_KEY构造url请求,获取access_token:param API_KEY::param SECRET_KEY::return:"""host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + API_KEY + '&client_secret=' + SECRET_KEYresponse = requests.get(host)if response:return response.json()['access_token']else:return Nonedef pic2base64(filename):"""读取文件对应的图片,将其经过Base64编码成不带图片头的字符串代替图像地址。- 请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。- 需要注意的是,图片的base64编码是不包含图片头的,如data:image/jpg;base64:param filename::return:"""img = cv.imread(filename)f = open(filename, 'rb')res_img = base64.b64encode(f.read())return str(res_img, 'utf-8')# 将要比较的文件进行Base64编码成字符串
filename1 = 'James.jpg'
filename2 = 'wade.jpg'
pic_1 = pic2base64(filename1)
pic_2 = pic2base64(filename2)# 获取access_token
access_token = get_access_token(API_KEY, SECRET_KEY)# 若access_token不为空,则进行请求
if access_token is not None:request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match?access_token=" + access_tokenheaders = {'Content-Type': 'application/x-www-form-urlencoded'}params = "[" \"{\"image\": \"%s\", " \"\"image_type\": \"BASE64\", " \"\"face_type\": \"LIVE\", " \"\"quality_control\": \"LOW\"}," \"{\"image\": \"%s\", " \"\"image_type\": \"BASE64\", " \"\"face_type\": \"LIVE\", " \"\"quality_control\": \"LOW\"}" \"]" % (pic_1, pic_2)resp = requests.post(url=request_url, data=params, headers=headers)# 若返回响应,则读取响应,判断是否有错误,有则打印错误信息,否则输出最终得分if resp:res_json = resp.json()error_msg = res_json['error_msg']if error_msg != 'SUCCESS':print("错误信息: ", error_msg)else:res_score = res_json['result']['score']print("最终的得分是:", res_score)

四.实现效果

图片说明:以下两张分别是wade.jpg和James.jpg,位于代码同级目录下。

        

结果:

最终的得分是: 36.03727722

使用百度AI接口v3进行人脸对比相关推荐

  1. 百度AI图像处理(V3版本)—人脸识别(人脸对比)调用教程(基于Python3-附Demo)

    首先来看一下识别的效果:这里需要完整代码以及SDK的请点击此处下载:百度人脸识别-人脸对比 首先需要注册百度账号并且创建对应的应用,这里具体方法如图: 访问:http://ai.baidu.com/  ...

  2. python 人脸比对,python 使用百度AI接口进行人脸对比的步骤

    1. 注册百度云账号 注册百度智能云,提交申请. 创建应用获取AppID,API Key,Secret Key. 2. 安装baidu python api 人脸对比 API 文档 pip insta ...

  3. Linux下QT软件使用C++语言调用百度AI接口实现人脸库人脸搜索

    参考文档Qt+百度AI实现人脸识别之人脸检测_画茧自缚-CSDN博客 本文档对于以上文档进行精简,参考以上文档实现百度AI人脸库管理-人脸搜索:百度AI接口一通具通,可以以此方法扩展. .h部分 #i ...

  4. 使用百度云接口API和人脸库完成本地合影图片的多人脸识别--V3版接口Python语言

    百度接口人脸检测,识别率很高,而且操作简单.网上百度还未见到借助百度云接口API和人脸库完成本地合影图片的多人脸识别,本人编写的代码可以实现,但觉得不够简洁,代码数还可以精减,欢迎交流. 1.准备工作 ...

  5. python调用百度AI接口识别营业执照

    上一篇文章介绍了应用python中的pytesseract库和OCR识别软件进行文字识别.本文介绍应用百度AI的文字识别功能对营业执照进行识别,感兴趣的朋友一起来看看效果吧.    一.安装baidu ...

  6. 调用百度AI接口实现图片文字识别

    一.准备阶段 进入百度AI网址点击这里跳转 ,点击导航栏的开放能力 ---- 文字识别 ---- 通用文字识别,进入文字识别OCR界面. 在文字识别ORC界面点击 技术文档 进入帮助文档. 在左侧可以 ...

  7. 调用百度ai接口实现图片文字识别详解

    调用百度ai接口实现图片文字识别详解 首先先介绍一下这篇博文是干嘛的,为了不浪费大家时间.公司最近和短视频公司合作,需要监控app的截图上的文字是否符合规范,也就是确保其没有违规的文字.到网上找了一些 ...

  8. React native 接入百度AI活体检测、人脸识别 iOS版本

    前期准备工作参考:React native 接入百度AI活体检测.人脸识别 Android版本 iOS配置 1.将FaceSDK里面的文件导入到iOS项目 添加完之后是这样的 2.选择链接C++标准库 ...

  9. Python调用百度AI接口用以实现在线语音合成 并创建简单的GUI界面 生成可执行应用程序

    调用百度AI接口用以实现在线语音合成 并创建简单的GUI界面 生成可执行应用程序 1. 实验环境 Python3.8.Pycharm.window10 2.实验过程 1.首先登陆百度智能云:https ...

最新文章

  1. MAYA 2022基础入门学习教程
  2. java连接mysql以及增删改查操作
  3. GPT-3数学不及格,愁坏团队,于是他们出了12500道数学
  4. 成立两年,他们用产品描绘出了基于第三代AI的基础设施蓝图
  5. iis、apache与nginx禁止目录执行asp、php脚本的实现方法
  6. 全球及中国生物质能利用产业十四五发展目标及前景容量预测报告2021-2027年
  7. 超棒的视差滚动效果javascript类库 - Jarallax
  8. Ajax学习总结(2)——Ajax参数详解及使用场景介绍
  9. SAP License:COPA特性值转换
  10. 如何用微观数据分析玩家流失
  11. 《编写高质量代码:改善Java程序的151条建议》读书笔记
  12. python程序设计基础教程慕课版课后题答案_Python语言程序设计基础
  13. 整理了个软件需求规格说明书模板
  14. 【生信MOOC】生信数据库1
  15. AXI4总线协议总结
  16. 梦之所寄,行之所为——地狱之门就此洞开(读梦断代码有感)
  17. 螺旋城的灾难完全攻略及地图
  18. 调用链根因定位论文《Root Cause Analysis of Anomalies of Multitier Services in Public Clouds》
  19. 判断手机是否被黑客入侵的7种方法
  20. 前端工资涨不上去?可能是你没掌握构建工具:关于 Webpack、Babel、esbuild、Vite、Rollup、Parcel、SWC......的那些事

热门文章

  1. PC微信逆向:分析群拉人功能
  2. 由于Skyline RabbitMQ导致NI Package Manager安装失败
  3. python 全栈开发,Day59(小米商城)
  4. 新手小白如何选择入门第一把吉他,注意这几点不踩坑,初学者入门吉他推荐
  5. 编写一个程序,输入一个3位整数,要求逆序输出对应的数。
  6. 高效MKV转MP4工具,高效无损,多音轨MKV也可转MP4自动去除字幕
  7. java学习笔记29--数组
  8. 设计模式(老司机带你深入了解)
  9. Android一年学习回顾总结
  10. 如何用UltraISO将文件制作成ISO镜像