百度AI圖像處理(V3版本)—人臉識別(人臉對比)調用教程(基於Python3-附Demo)

首先來看一下識別的效果:這裏需要完整代碼以及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']+"%")

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章