騰訊優圖及知臉(ZKface)人臉比對介面測試(python)

来源:http://www.cnblogs.com/battlescars/archive/2017/02/13/python_youtu_zkface_test.html
-Advertisement-
Play Games

一.騰訊優圖 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++的人臉比對結果畫在一張圖上進行比對


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 顯然只需求LCP(i,j)就可以了。 將s反轉,然後插入尾碼自動機。由於尾碼自動機的link指針構成了一棵尾碼樹,而字元串又反轉過,所以兩個結點的LCP就是LCA。 樹形DP,求出以每個結點為LCA的個數就可以了。 代碼: 1 #include<iostream> 2 #include<cstdio ...
  • 在之前的章節中,我們都是假設程式中只有一條執行流,程式從main方法的第一條語句逐條執行直到結束。從本節開始,我們討論併發,在程式中創建線程來啟動多條執行流,併發和線程是一個複雜的話題,本節,我們先來討論Java中線程的一些基本概念。 創建線程 線程表示一條單獨的執行流,它有自己的程式執行計數器,有 ...
  • 我們知道,mapper.xml是我們配置操作資料庫的sql語句的地方。其中每個sql語句對應著一個方法,每個方法都有自己的輸入輸出參數類型。那麼這些類型都是怎麼配置的呢?今天我們來一起學習下。 輸入映射 首先是輸入類型,輸入類型分為以下幾種:1.基本類型。2.pojo對象類型。3.pojo包裝對象。 ...
  • springMvc是什麼 springmvc是表現層的框架,是一個spring的表現層組件。是整個spring框架的一部分,但是也可以不使用springmvc。跟struts2框架功能類似。其中的mvc指的是,表現層的Model、View、controller。 springMvc可以做什麼 spr ...
  • public class Test { interface GreetingService { void sayMassage(String a, String b); } public static void main(String args[]) { GreetingService greeti ...
  • #coding:gbk__author__ = 'zhb'import sys,os,getpassos.system('cls')i=0while i <3: name=raw_input("請輸入用戶名:") lock_file=open(r'account_lock.txt','r') for ...
  • 輸入n個整數,如何求出其中最小的k個數? 解法1. 當然最直觀的思路是將數組排序,然後就可以找出其中最小的k個數了,時間複雜度以快速排序為例,是O(nlogn); 解法2. 藉助劃分(Partition)的思路,一次劃分可以把樞軸使得樞軸左邊的元素都比樞軸小,樞軸右邊的元素都比樞軸大(可以參考快速排 ...
  • struts2框架 如果你之前在MVC模式的時候一直都是通過servlet,獲取和返回數據,那麼現在開始學習struts2框架, Struts是一個實現MVC設計模式的優秀的框架。它的許多優點我就不說了。 我用自己做的一張圖說明servlet和struts2的區別。 寫一個最基本的開發步驟,完成開發 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...