利用百度雲人臉識別API人臉對比介面,將對比分數較高的圖片存入指定的文件夾 ...
1 from urllib import request 2 import base64 3 import requests 4 import re 5 import json 6 import urllib 7 import os 8 9 10 # 獲取token 11 def get_token(client_id,client_secret): 12 host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+ client_id + '&client_secret='+ client_secret + '' 13 headers = {'Content-Type': 'application/json; charset=UTF-8'} 14 res = requests.post(host, headers=headers) 15 access_token = re.findall('"access_token":"(.*?)"', res.text)[0] 16 return access_token 17 18 # 打開文件夾 19 def geturlPath(path): 20 dirs = os.listdir(path) 21 lst = [] 22 for dir1 in dirs: 23 pa = path + dir1 24 lst.append(pa) 25 return lst 26 27 # 打開本地圖片,並轉化為base64 28 def open_pic2base(image): 29 f = open(image,'rb') 30 img = base64.b64encode(f.read()).decode('utf-8') 31 return img 32 33 # 對兩張圖片進行對比 34 def check2pic(client_id,client_secret,image1,image2): 35 request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match" 36 for image in image2: 37 a = open_pic2base(image) 38 b = base64.b64decode(a) 39 params = json.dumps( 40 [{"image": open_pic2base(image1), "image_type": "BASE64","quality_control": "LOW"}, 41 {"image": a, "image_type": "BASE64","quality_control": "LOW"}]) 42 43 # 調用介面 44 access_token = get_token(client_id, client_secret) 45 request_url = request_url + "?access_token=" + access_token 46 params = params.encode("utf-8") 47 request = urllib.request.Request(url=request_url, data=params) 48 request.add_header('Content-Type', 'application/json') 49 50 response = urllib.request.urlopen(request) 51 content = response.read() 52 score = 0 53 if content: 54 result = json.loads(content.decode('utf-8')) 55 if result["error_code"] == 0: 56 score = result["result"]["score"] 57 if score > 75: 58 with open('G:/images6/'+ image.split('/')[-1],'wb') as f: 59 f.write(b) 60 f.close() 61 else: 62 errors = {} 63 error_msg = result["error_msg"] 64 errors[image.split('/')[-1]] = error_msg 65 print(errors) 66 if __name__ == '__main__': 67 client_id = '***************' 68 client_secret = '*******************' 69 path = r'G:/images5/' 70 71 image1 = 'G:\images2\gu1.jpg' 72 image2 = geturlPath(path) 73 74 # 將兩張圖片進行對比,得出相似分 75 check2pic(client_id,client_secret,image1,image2)