一.百度人臉識別服務
1.官方網址:http://apistore.baidu.com/apiworks/servicedetail/464.html
2.提供的接口包括:
2.1 多人臉比對:請求多個人臉圖片做比對,使用前無需人臉注冊過程。即同時上傳多張圖片,返回結果為每對圖片的比對分數
2.2 人臉識別:返回指定group中所有username的注冊人臉和query人臉的相似度,返回結果按照相似度排序;人臉識別需要先在group里注冊username和人臉圖片,您可以使用這個功能自己實現一個小規模的人臉識別系統,比如明星臉識別、家庭成員識別等等。其實就是1對n的比對,按照比對的分數返回
2.3人臉驗證:驗證query人臉圖片是否為指定username注冊的人臉,需要先在username下注冊人臉圖片,其實就是1對1的比對,返回比對的分數
3.測試的接口:多人臉比對接口,不需要注冊的過程,所以選擇這個接口,
4.測試的數據:lfw數據集上的數據,可以去官網下載數據及pairs.txt,可以先研究一下該數據集
5.測試的代碼(python):(官網上python例子中傳入的參數是有問題的)
1 import base64 2 import urllib 3 import urllib.request 4 import urllib.parse 5 import time 6 import json 7 8 #所需的圖片要以base64編碼的形式上傳二進制字符串 9 def image_to_base64(image_path): 10 image_data = open(image_path, "rb") 11 temp = image_data.read() 12 base64_data = base64.b64encode(temp) 13 image_data.close() 14 data_string = str(base64_data) 15 data_string = data_string.strip('\'b') 16 return data_string 17 18 def compare(image1, image2): 19 url = 'http://apis.baidu.com/idl_baidu/faceverifyservice/face_compare' 20 reg = r'{"params": [{"cmdid": "1000", "appid": "你的apikey", "clientip": "你的ip","type": "st_groupverify", "groupid": "12345", "versionnum": "1.0.0.1", "usernames": {"name1": "name1", "name2": "name2"}, "images": {"name1": "%s", "name2": "%s"}, "cates": {"name1":"7", "name2":"7"}}], "jsonrpc": "2.0","method": "Compare"}' % (image1, image2) 21 byte_data = reg.encode(encoding="utf-8") 22 req = urllib.request.Request(url, data=byte_data) 23 req.add_header("apikey", "你的apikey") 24 #請求第一次可能會出錯,重新請求一次就好了 25 try: 26 resp = urllib.request.urlopen(req) 27 content = resp.read() 28 if content: 29 print(content) 30 return content 31 except Exception: 32 resp = urllib.request.urlopen(req) 33 content = resp.read() 34 if content: 35 print(content) 36 return content 37 38 def compare_test(): 39 lfw_file = open("pairs.txt") 40 res_file = open("res_baidu.txt", "a+") 41 count = 0 42 while 1: 43 image_path = "你本地的lfw圖片地址" 44 line = lfw_file.readline() 45 if not line: 46 break 47 line = line.strip('\n') 48 images = line.split('\t') 49 if len(images) > 3: 50 register_image = image_path + images[0] + "\\" + images[0] + "_" 51 if len(images[1]) < 2: 52 register_image = register_image + "000" + images[1] + ".jpg" 53 elif len(images[1]) < 3: 54 register_image = register_image + "00" + images[1] + ".jpg" 55 elif len(images[1]) < 4: 56 register_image = register_image + "0" + images[1] + ".jpg" 57 else: 58 register_image = register_image + images[1] + ".jpg" 59 60 verify_image = image_path + images[2] + "\\" + images[2] + "_" 61 if len(images[3]) < 2: 62 verify_image = verify_image + "000" + images[3] + ".jpg" 63 elif len(images[3]) < 3: 64 verify_image = verify_image + "00" + images[3] + ".jpg" 65 elif len(images[3]) < 4: 66 verify_image = verify_image + "0" + images[3] + ".jpg" 67 else: 68 verify_image = verify_image + images[3] + ".jpg" 69 else: 70 register_image = image_path + images[0] + "\\" + images[0] + "_" 71 if len(images[1]) < 2: 72 register_image = register_image + "000" + images[1] + ".jpg" 73 elif len(images[1]) < 3: 74 register_image = register_image + "00" + images[1] + ".jpg" 75 elif len(images[1]) < 4: 76 register_image = register_image + "0" + images[1] + ".jpg" 77 else: 78 register_image = register_image + images[1] + ".jpg" 79 80 verify_image = image_path + images[0] + "\\" + images[0] + "_" 81 if len(images[2]) < 2: 82 verify_image = verify_image + "000" + images[2] + ".jpg" 83 elif len(images[2]) < 3: 84 verify_image = verify_image + "00" + images[2] + ".jpg" 85 elif len(images[2]) < 4: 86 verify_image = verify_image + "0" + images[2] + ".jpg" 87 else: 88 verify_image = verify_image + images[2] + ".jpg" 89 90 content = compare(image_to_base64(register_image), image_to_base64(verify_image)) 91 content = str(content) 92 content = content.strip('b\'') 93 content = json.loads(content) 94 95 if (int(count/300)) % 2 == 0: 96 flag = 1 97 else: 98 flag = 0 99 100 if content['result']['_ret']['reslist']: 101 score = content['result']['_ret']['reslist']['name2|name1'] 102 else: 103 score = "-1" 104 105 res_file.write(line + '\t' + score + '\t' + str(flag) + '\n') 106 count += 1 107 108 lfw_file.close() 109 res_file.close() 110 111 compare_test()
6.比對結果中會出現很多個0.00000的情況,不了解具體的原因。。。知道的兄弟求告知!!!
二.Face++人臉識別服務
1.官方網址:https://console.faceplusplus.com.cn/documents/4887586
2.提供的接口包括Detect,Compare,Search等,只研究了一下Compare接口即1對1比對的接口,測試用的數據還是lfw,該請求直接傳入圖片的遠程url地址即可,不需要直接上傳圖片文件,用之前還是要注冊生成apikey和apisecret(注意用試用的apikey),直接上代碼:
3.Python測試代碼:
1 import urllib 2 import urllib.request 3 import urllib.parse 4 import json 5 6 7 def compare(image1, image2): 8 url = "https://api-cn.faceplusplus.com/facepp/v3/compare" 9 data = { 10 'api_key': '你自己的apikey', 11 'api_secret': '你自己的apisecret', 12 'image_url1': image1, 13 'image_url2': image2 14 } 15 data = urllib.parse.urlencode(data) 16 data = data.encode('utf-8') 17 req = urllib.request.Request(url, data=data) 18 19 try: 20 resp = urllib.request.urlopen(req) 21 content = resp.read() 22 if content: 23 print(content) 24 return content 25 except Exception: 26 resp = urllib.request.urlopen(req) 27 content = resp.read() 28 if content: 29 print(content) 30 return content 31 32 33 def compare_test(): 34 lfw_file = open("pairs.txt") 35 res_file = open("res_face.txt", "a+") 36 count = 0 37 while 1: 38 image_path = "http://vis-www.cs.umass.edu/lfw/images/" 39 line = lfw_file.readline() 40 if not line: 41 break 42 line = line.strip('\n') 43 images = line.split('\t') 44 if len(images) > 3: 45 register_image = image_path + images[0] + "/" + images[0] + "_" 46 if len(images[1]) < 2: 47 register_image = register_image + "000" + images[1] + ".jpg" 48 elif len(images[1]) < 3: 49 register_image = register_image + "00" + images[1] + ".jpg" 50 elif len(images[1]) < 4: 51 register_image = register_image + "0" + images[1] + ".jpg" 52 else: 53 register_image = register_image + images[1] + ".jpg" 54 55 verify_image = image_path + images[2] + "/" + images[2] + "_" 56 if len(images[3]) < 2: 57 verify_image = verify_image + "000" + images[3] + ".jpg" 58 elif len(images[3]) < 3: 59 verify_image = verify_image + "00" + images[3] + ".jpg" 60 elif len(images[3]) < 4: 61 verify_image = verify_image + "0" + images[3] + ".jpg" 62 else: 63 verify_image = verify_image + images[3] + ".jpg" 64 else: 65 register_image = image_path + images[0] + "/" + images[0] + "_" 66 if len(images[1]) < 2: 67 register_image = register_image + "000" + images[1] + ".jpg" 68 elif len(images[1]) < 3: 69 register_image = register_image + "00" + images[1] + ".jpg" 70 elif len(images[1]) < 4: 71 register_image = register_image + "0" + images[1] + ".jpg" 72 else: 73 register_image = register_image + images[1] + ".jpg" 74 75 verify_image = image_path + images[0] + "/" + images[0] + "_" 76 if len(images[2]) < 2: 77 verify_image = verify_image + "000" + images[2] + ".jpg" 78 elif len(images[2]) < 3: 79 verify_image = verify_image + "00" + images[2] + ".jpg" 80 elif len(images[2]) < 4: 81 verify_image = verify_image + "0" + images[2] + ".jpg" 82 else: 83 verify_image = verify_image + images[2] + ".jpg" 84 85 content = compare(register_image, verify_image) 86 content = str(content) 87 content = content.strip('b\'') 88 content = json.loads(content) 89 90 if (int(count / 300)) % 2 == 0: 91 flag = 1 92 else: 93 flag = 0 94 95 if 'confidence' in content.keys(): 96 score = content['confidence'] 97 else: 98 score = '-1' 99 res_file.write(line + '\t' + str(score) + '\t' + str(flag) + '\n') 100 101 count += 1 102 103 lfw_file.close() 104 res_file.close() 105 compare_test()
4.測試結果有待分析。。