python图片比对、自动化测试,腾讯优图及知脸(ZKface)人脸比对接口测试(python)
一.騰訊優圖
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_POINT8 youtu =TencentYoutuyun.YouTu(appid, secret_id, secret_key, userid, end_point)9
10
11 defcompare_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 =016 while 1:17 image_path = "xxxxxx" #你本地lfw數據的路徑
18 line =lfw_file.readline()19 if notline:20 break
21 line = line.strip('')22 images = line.split('')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']) + '')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) + '')75
76 if (int(count / 300)) % 2 ==0:77 flag = 1
78 else:79 flag =080
81 res_file.write(line + '' + str(score) + '' + str(flag) + '')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 importjson4
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 exceptException: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" inres_dict.keys():24 print(res_dict['faceid'])25 return res_dict['faceid']26 else:27 return '-1'
28 else:29 return '-1'
30 exceptException: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=' +face238
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 exceptException: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' inres_dict.keys():55 print(res_dict['similarity'])56 return res_dict['similarity']57 else:58 return -1
59 else:60 return -1
61 exceptException:62 return -1
63
64
65 defface_compare_test():66 lfw_file = open("pairs.txt")67 res_file = open("res_zk.txt", "a+")68 count =069 while 1:70 image_path = "你lfw數據集在本地的路徑"
71 line =lfw_file.readline()72 if notline:73 break
74 line = line.strip('')75 images = line.split('')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('' +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 =0126
127 res_file.write(line + '' + str(score) + '' + str(flag) + '')128 count += 1
129
130 lfw_file.close()131 res_file.close()132
133 face_compare_test()
三.性能評測
建議采用畫rock曲線的方式進行比較,可以將百度和face++的人臉比對結果畫在一張圖上進行比對
總結
以上是生活随笔為你收集整理的python图片比对、自动化测试,腾讯优图及知脸(ZKface)人脸比对接口测试(python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 潜艇上浮和下潜过程中要开动推进器加快速度
- 下一篇: 您好,关于人大毕业生为追求梦想不顾一切的