一.騰訊優圖 1.開發者地址:http://open.youtu.qq.com/welcome/developer 2.接入流程:按照開發者頁面的接入流程接入之後,創建應用即可獲得所需的AppID、SecretID和SecretKey這是進行介面調用必須的憑證 3.測試流程: 3.1.測試可以直接調 ...
一.騰訊優圖
1.開發者地址:http://open.youtu.qq.com/welcome/developer
2.接入流程:按照開發者頁面的接入流程接入之後,創建應用即可獲得所需的AppID、SecretID和SecretKey這是進行介面調用必須的憑證
3.測試流程:
3.1.測試可以直接調用網路介面,或者下載相應語言的sdk(http://open.youtu.qq.com/welcome/developer#/tool-sdk),我採用的是下載python版本的sdk(該sdk對應的python2.x的版本)
3.2.測試的數據還是lfw的數據集,測試結果如果調用成功則獲取到比對的分數,調用失敗則將改組比對的分數設置為-1,以便後續的分析,直接上python代碼:
1 import TencentYoutuyun # 這是下載的python模塊 2 3 appid = 'xxxxx' # 你的appid 4 secret_id = 'xxxxx' #你的secret_id 5 secret_key = 'xxxxx' #你的secret_key 6 userid = 'test' # 任意字元串 7 end_point = TencentYoutuyun.conf.API_YOUTU_END_POINT 8 youtu = TencentYoutuyun.YouTu(appid, secret_id, secret_key, userid, end_point) 9 10 11 def compare_test(): 12 lfw_file = open("pairs.txt") # lfw的pair.txt 刪除了第一行 13 res_file = open("youtu.txt", "a+") # txt保存比對分數 14 error_code = open("error_code.txt", "a+") # 測試用於保存調用出錯編碼 15 count = 0 16 while 1: 17 image_path = "xxxxxx" # 你本地lfw數據的路徑 18 line = lfw_file.readline() 19 if not line: 20 break 21 line = line.strip('\n') 22 images = line.split('\t') 23 if len(images) > 3: 24 register_image = image_path + images[0] + "/" + images[0] + "_" 25 if len(images[1]) < 2: 26 register_image = register_image + "000" + images[1] + ".jpg" 27 elif len(images[1]) < 3: 28 register_image = register_image + "00" + images[1] + ".jpg" 29 elif len(images[1]) < 4: 30 register_image = register_image + "0" + images[1] + ".jpg" 31 else: 32 register_image = register_image + images[1] + ".jpg" 33 34 verify_image = image_path + images[2] + "/" + images[2] + "_" 35 if len(images[3]) < 2: 36 verify_image = verify_image + "000" + images[3] + ".jpg" 37 elif len(images[3]) < 3: 38 verify_image = verify_image + "00" + images[3] + ".jpg" 39 elif len(images[3]) < 4: 40 verify_image = verify_image + "0" + images[3] + ".jpg" 41 else: 42 verify_image = verify_image + images[3] + ".jpg" 43 else: 44 register_image = image_path + images[0] + "/" + images[0] + "_" 45 if len(images[1]) < 2: 46 register_image = register_image + "000" + images[1] + ".jpg" 47 elif len(images[1]) < 3: 48 register_image = register_image + "00" + images[1] + ".jpg" 49 elif len(images[1]) < 4: 50 register_image = register_image + "0" + images[1] + ".jpg" 51 else: 52 register_image = register_image + images[1] + ".jpg" 53 54 verify_image = image_path + images[0] + "/" + images[0] + "_" 55 if len(images[2]) < 2: 56 verify_image = verify_image + "000" + images[2] + ".jpg" 57 elif len(images[2]) < 3: 58 verify_image = verify_image + "00" + images[2] + ".jpg" 59 elif len(images[2]) < 4: 60 verify_image = verify_image + "0" + images[2] + ".jpg" 61 else: 62 verify_image = verify_image + images[2] + ".jpg" 63 64 content = youtu.FaceCompare(register_image, verify_image) 65 error_code.write(str(content['errormsg']) + '\n') 66 if content['errorcode'] != 0: 67 score = -1 68 else: 69 score = content['similarity'] 70 71 print(str(count)) 72 print(register_image) 73 print(verify_image) 74 print(str(score) + '\n') 75 76 if (int(count / 300)) % 2 == 0: 77 flag = 1 78 else: 79 flag = 0 80 81 res_file.write(line + '\t' + str(score) + '\t' + str(flag) + '\n') 82 count += 1 83 84 lfw_file.close() 85 res_file.close() 86 error_code.close() 87 88 compare_test()
二.知臉(ZKfaceOnline)
1.知臉開發者中心地址:http://zkfaceonline.com:8003/developers_doc.html
2.接入流程:註冊後可獲取到Ocp-Apim-Subscription-Key,然後再開發者管理界面註冊人臉比對資料庫,記住該資料庫的名稱,該名稱以及Ocp-Apim-Subscription-Key在後面的測試過程中都是必需的。
3.測試流程:
3.1.人臉比對分為兩個步驟:先將需要比對的兩張圖片上傳到指定介面做人臉特征的提取,如果成功則返回這兩張圖片在資料庫中faceid,然後將返回的兩個faceid提交到指定的人臉比對介面做比對,如果比對成功則會返回兩張圖片之間的相似值
3.2.具體測試代碼,如下:
1 # coding=utf-8 2 import requests #該模塊是第三方庫,可以去網上下載 3 import json 4 5 6 def get_face_id(image): #上傳一張圖片做人臉檢測,返回faceid 7 url = 'http://zkfaceonline.com:8003/face/v0/faceApimatch?detect&db&matchDB=你的資料庫名稱' 8 headers = { 9 'Content-Type': 'application/octet-stream', 10 'Ocp-Apim-Subscription-Key': '你自己的key', 11 } 12 data = open(image, "rb").read() 13 try: 14 res = requests.post(url, headers=headers, data=data) 15 except Exception: 16 res = requests.post(url, headers=headers, data=data) 17 18 result = res.text.strip('this key has no database[]') 19 try: 20 result = json.loads(result) 21 if len(result) == 1: 22 res_dict = result[0] 23 if "faceid" in res_dict.keys(): 24 print(res_dict['faceid']) 25 return res_dict['faceid'] 26 else: 27 return '-1' 28 else: 29 return '-1' 30 except Exception: 31 return '-1' 32 33 34 def face_compare(image1, image2): #兩張圖片做人臉比對,返回比對分數 35 face1 = get_face_id(image1) 36 face2 = get_face_id(image2) 37 url = 'http://zkfaceonline.com:8003/face/v0/faceApimatch?match&db&matchDB=你的資料庫名稱&faceset1=' + face1 + '&faceset2=' + face2 38 39 headers = { 40 'Content-Type': 'application/octet-stream', 41 'Ocp-Apim-Subscription-Key': '你自己的key', 42 } 43 try: 44 res = requests.post(url, headers=headers) 45 except Exception: 46 res = requests.post(url, headers=headers) 47 48 result = res.text.strip('this key has no database[]') 49 print(res.text) 50 try: 51 result = json.loads(result) 52 if len(result) == 1: 53 res_dict = result[0] 54 if 'similarity' in res_dict.keys(): 55 print(res_dict['similarity']) 56 return res_dict['similarity'] 57 else: 58 return -1 59 else: 60 return -1 61 except Exception: 62 return -1 63 64 65 def face_compare_test(): 66 lfw_file = open("pairs.txt") 67 res_file = open("res_zk.txt", "a+") 68 count = 0 69 while 1: 70 image_path = "你lfw數據集在本地的路徑" 71 line = lfw_file.readline() 72 if not line: 73 break 74 line = line.strip('\n') 75 images = line.split('\t') 76 if len(images) > 3: 77 register_image = image_path + images[0] + "/" + images[0] + "_" 78 if len(images[1]) < 2: 79 register_image = register_image + "000" + images[1] + ".jpg" 80 elif len(images[1]) < 3: 81 register_image = register_image + "00" + images[1] + ".jpg" 82 elif len(images[1]) < 4: 83 register_image = register_image + "0" + images[1] + ".jpg" 84 else: 85 register_image = register_image + images[1] + ".jpg" 86 87 verify_image = image_path + images[2] + "/" + images[2] + "_" 88 if len(images[3]) < 2: 89 verify_image = verify_image + "000" + images[3] + ".jpg" 90 elif len(images[3]) < 3: 91 verify_image = verify_image + "00" + images[3] + ".jpg" 92 elif len(images[3]) < 4: 93 verify_image = verify_image + "0" + images[3] + ".jpg" 94 else: 95 verify_image = verify_image + images[3] + ".jpg" 96 else: 97 register_image = image_path + images[0] + "/" + images[0] + "_" 98 if len(images[1]) < 2: 99 register_image = register_image + "000" + images[1] + ".jpg" 100 elif len(images[1]) < 3: 101 register_image = register_image + "00" + images[1] + ".jpg" 102 elif len(images[1]) < 4: 103 register_image = register_image + "0" + images[1] + ".jpg" 104 else: 105 register_image = register_image + images[1] + ".jpg" 106 107 verify_image = image_path + images[0] + "/" + images[0] + "_" 108 if len(images[2]) < 2: 109 verify_image = verify_image + "000" + images[2] + ".jpg" 110 elif len(images[2]) < 3: 111 verify_image = verify_image + "00" + images[2] + ".jpg" 112 elif len(images[2]) < 4: 113 verify_image = verify_image + "0" + images[2] + ".jpg" 114 else: 115 verify_image = verify_image + images[2] + ".jpg" 116 117 print('\n' + str(count)) 118 print(register_image) 119 print(verify_image) 120 score = face_compare(verify_image, register_image) 121 122 if (int(count / 300)) % 2 == 0: 123 flag = 1 124 else: 125 flag = 0 126 127 res_file.write(line + '\t' + str(score) + '\t' + str(flag) + '\n') 128 count += 1 129 130 lfw_file.close() 131 res_file.close() 132 133 face_compare_test()
三.性能評測
建議採用畫rock曲線的方式進行比較,可以將百度和face++的人臉比對結果畫在一張圖上進行比對