百度人臉識別api及face++人臉識別api測試(python)


一.百度人臉識別服務

1.官方網址:http://apistore.baidu.com/apiworks/servicedetail/464.html

2.提供的接口包括:

 2.1 多人臉比對:請求多個人臉圖片做比對,使用前無需人臉注冊過程。即同時上傳多張圖片,返回結果為每對圖片的比對分數

 2.2 人臉識別:返回指定group中所有username的注冊人臉和query人臉的相似度,返回結果按照相似度排序;人臉識別需要先在group里注冊username和人臉圖片,您可以使用這個功能自己實現一個小規模的人臉識別系統,比如明星臉識別、家庭成員識別等等。其實就是1n的比對,按照比對的分數返回

 2.3人臉驗證:驗證query人臉圖片是否為指定username注冊的人臉,需要先在username下注冊人臉圖片,其實就是11的比對,返回比對的分數

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接口即11比對的接口,測試用的數據還是lfw,該請求直接傳入圖片的遠程url地址即可,不需要直接上傳圖片文件,用之前還是要注冊生成apikeyapisecret(注意用試用的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.測試結果有待分析。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM