百度人臉識別SDK學習

  以前看到同事說人臉識別多麼高大上之類的, 我就好奇搜索了一下, 本人是小白級別,喜歡用百度多一點,因此就使用了百度的人臉識別SDK進行研究。不得不說百度提供的完檔很詳細,在學習過程當中不多出現不能解決的問題, 因此本人也偷個懶,把sdk文檔複製下來。數據庫

  注:貌似有個bug,我在百度語音中菜單下建立的人臉識別,而後獲取API_key和Secret_key, 在學習嘗試過程當中, 或多或少有請求量, 可是報表中卻沒有任何記錄, 難道是bug嗎? 我在想是否是能夠無限制的調用了,做爲嘗試, 沒去批量去測試,感興趣的小夥伴能夠試試express

 

準備工做windows

一、須要有百度帳號(沒有的話能夠註冊)後端

註冊地址: https://login.bce.baidu.com/api

註冊登陸以後,在「產品服務」 菜單下找到人臉識別 數組

 

點擊去建立本身的應用名稱,其實最主要的就是 API_key  和 Secret_key安全

 

有了這些就能夠進一步去看 百度提供的SDK 文檔了。服務器

這是百度的SDK地址:http://ai.baidu.com/sdk網絡

選擇本身喜歡的開發語言進行研究, 裏面文檔很詳細, 下載中有Demo app

本人採用的是C# 進行研究。

參考地址:http://ai.baidu.com/docs#/Face-Csharp-SDK/top

 

主要接口:

接口名稱 接口能力簡要描述
人臉檢測 檢測人臉並定位,返回五官關鍵點,及人臉各屬性值
人臉比對 返回兩兩比對的人臉類似值
人臉識別 在人臉庫中查找類似的人臉
人臉認證 識別上傳的圖片是否爲指定用戶
人臉庫設置 對人臉庫的相關操做,如註冊、刪除、更新、查找用戶信息等

 

快速入門

安裝人臉 C# SDK

人臉 C# SDK目錄結構


Baidu.Aip ├── AipSdk.dll // 百度AI服務 windows 動態庫 ├── AipSdk.XML // DLL註釋 ├── Demo/ // Demo文件夾 └── thirdparty // 第三方依賴

支持平臺:.Net Framework 3.5 及以上版本

使用步驟

1.在官方網站下載C# SDK壓縮工具包。

2.解壓後,將 AipSdk.dll 和 thirdparty 中 的dll文件添加爲引用。

3.如需使用demo,將 Demo 文件夾中相關Demo文件添加至工程便可。

使用SDK

Baidu.Aip.Face是主要命名空間,基本使用方法以下:


var APP_ID = "你的 App ID"; var API_KEY = "你的 Api Key"; var SECRET_KEY = "你的 Secret Key"; var client = new Baidu.Aip.Face.Face(API_KEY, SECRET_KEY); var image = File.ReadAllBytes("圖片文件"); var options = new Dictionary<string, object>() { {"face_fields", "beauty,age"} }; // 過程當中發生的網絡失敗等系統錯誤,將會拋出相關異常,請使用 try/catch 捕獲。 var result = client.FaceDetect(image, options);

在上面代碼中,常量APP_ID在百度雲控制檯中建立,常量API_KEYSECRET_KEY是在建立完畢應用後,系統分配給用戶的,均爲字符串,用於標識用戶,爲訪問作簽名驗證,可在AI服務控制檯中的應用列表中查看。

注意:如您之前是百度雲的老用戶,其中API_KEY對應百度雲的「Access Key ID」,SECRET_KEY對應百度雲的「Access Key Secret」。

接口說明

人臉檢測

接口描述

檢測請求圖片中的人臉,返回人臉位置、72個關鍵點座標、及人臉相關屬性信息。

檢測響應速度,與圖片中人臉數量相關,人臉數量較多時響應時間會有些許延長。

典型應用場景:如人臉屬性分析,基於人臉關鍵點的加工分析,人臉營銷活動等。

五官位置會標記具體座標;72個關鍵點座標也包含具體座標,但不包含對應位置的詳細位置描述。

請求說明

圖片接受類型支持本地圖片路徑字符串,圖片文件二進制數組。

舉例,要對一張圖片進行人臉識別,具體的人臉信息在返回的result字段中。自定的參數在options字典中:


public static void FaceDetect() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var image = File.ReadAllBytes("圖片文件路徑"); var options = new Dictionary<string, object>() { {"face_fields", "beauty,age"} }; var result = client.FaceDetect(image, options); }

人臉檢測 請求參數詳情

參數 類型 描述 是否必須
face_fields string 包括age、beauty、expression、faceshape、gender、glasses、landmark、race、qualities信息,逗號分隔,默認只返回人臉框、機率和旋轉角度。
max_face_num number 最多處理人臉數目,默認值1
image byte[] 圖像數據

返回說明

參數 類型 是否必定輸出 描述
log_id number 日誌id
result_num number 人臉數目
result array 人臉屬性對象的集合
+age number 年齡。face_fields包含age時返回
+beauty number 美醜打分,範圍0-1,越大表示越美。face_fields包含beauty時返回
+location array 人臉在圖片中的位置
++left number 人臉區域離左邊界的距離
++top number 人臉區域離上邊界的距離
++width number 人臉區域的寬度
++height number 人臉區域的高度
+face_probability number 人臉置信度,範圍0-1
+rotation_angle number 人臉框相對於豎直方向的順時針旋轉角,[-180,180]
+yaw number 三維旋轉之左右旋轉角[-90(左), 90(右)]
+pitch number 三維旋轉之俯仰角度[-90(上), 90(下)]
+roll number 平面內旋轉角[-180(逆時針), 180(順時針)]
+expression number 表情,0,不笑;1,微笑;2,大笑。face_fields包含expression時返回
+expression_probability number 表情置信度,範圍0~1。face_fields包含expression時返回
+faceshape array 臉型置信度。face_fields包含faceshape時返回
++type string 臉型:square/triangle/oval/heart/round
++probability number 置信度:0~1
+gender string male、female。face_fields包含gender時返回
+gender_probability number 性別置信度,範圍0~1。face_fields包含gender時返回
+glasses number 是否帶眼鏡,0-無眼鏡,1-普通眼鏡,2-墨鏡。face_fields包含glasses時返回
+glasses_probability number 眼鏡置信度,範圍0~1。face_fields包含glasses時返回
+landmark array 4個關鍵點位置,左眼中心、右眼中心、鼻尖、嘴中心。face_fields包含landmark時返回
++x number x座標
++y number y座標
+landmark72 array 72個特徵點位置,示例圖 。face_fields包含landmark時返回
++x number x座標
++y number y座標
+race string yellow、white、black、arabs。face_fields包含race時返回
+race_probability number 人種置信度,範圍0~1。face_fields包含race時返回
+qualities array 人臉質量信息。face_fields包含qualities時返回
++occlusion array 人臉各部分遮擋的機率, [0, 1] (待上線)
+++left_eye number 左眼
+++right_eye number 右眼
+++nose number 鼻子
+++mouth number
+++left_cheek number 左臉頰
+++right_cheek number 右臉頰
+++chin number 下巴
++type array 真實人臉/卡通人臉置信度
+++human number 真實人臉置信度,[0, 1]
+++cartoon number 卡通人臉置信度,[0, 1]

人臉比對

接口描述

該請求用於比對多張圖片中的人臉類似度並返回兩兩比對的得分,可用於判斷兩張臉是不是同一人的可能性大小。

典型應用場景:如人證合一驗證,用戶認證等,可與您現有的人臉庫進行比對驗證。

說明:支持對比對的兩張圖片作在線活體檢測

請求說明


public static void FaceMatch() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var image1 = File.ReadAllBytes("圖片文件路徑"); var image2 = File.ReadAllBytes("圖片文件路徑"); var images = new byte[][] {image1, image2}; // 人臉對比 var result = client.FaceMatch(images); }

人臉比對請求參數:

全部圖片經base64編碼後的圖片數據總和不超過10M。如下可選參數放在接口最後的options參數中。

參數 是否必選 類型 說明
ext_fields string 返回質量信息,取值固定: 目前支持qualities(質量檢測)。(對全部圖片都會作改處理)
image_liveness string 返回的活體信息,「faceliveness,faceliveness」 表示對比對的兩張圖片都作活體檢測;「,faceliveness」 表示對第一張圖片不作活體檢測、第二張圖作活體檢測;「faceliveness,」 表示對第一張圖片作活體檢測、第二張圖不作活體檢測

返回說明

字段 是否必選 類型 說明
log_id number 請求惟一標識碼,隨機數
result_num number 返回結果數目,即:result數組中元素個數
result array 結果數據,index和請求圖片index對應。數組元素爲每張圖片的匹配得分數組,top n。 得分[0,100.0]
+index_i number 比對圖片1的index
+index_j number 比對圖片2的index
+score double 比對得分
ext_info array 對應參數中的ext_fields
+qualities string 質量相關的信息,無特殊需求能夠不使用
+faceliveness string 活體分數「0,0.9999」(表示第一個圖不作活體檢測、第二個圖片活體分數爲0.9999)。活體檢測參考分數0.4494,以上則可認爲是活體(測試期間)

返回樣例:


//請求爲四張圖片,第三張解析失敗 { "log_id": 73473737, "result_num":3, "result": [ { "index_i": 0, "index_j": 1, "score": 44.3 }, { "index_i": 0, "index_j": 3, "score": 89.2 }, { "index_i": 1, "index_j": 3, "score": 10.4 } …… ] }

人臉識別

接口描述

用於計算指定組內用戶,與上傳圖像中人臉的類似度。識別前提爲您已經建立了一我的臉庫。

典型應用場景:如人臉閘機,考勤簽到,安防監控等。

說明:人臉識別返回值不直接判斷是不是同一人,只返回用戶信息及類似度分值。

說明:推薦可判斷爲同一人的類似度分值爲80,您也能夠根據業務需求選擇更合適的閾值。

請求說明


public static void FaceIdentify() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var image1 = File.ReadAllBytes("圖片文件路徑"); var result = client.User.Identify(image1, new []{"groupId"}, 1, 1); }

人臉識別請求參數詳情:

參數 是否必選 類型 說明
group_id string 用戶組id(由數字、字母、下劃線組成)列表,每一個groupid長度限制48
image byte[] 圖像數據
ext_fields string 特殊返回信息,多個用逗號分隔,取值固定: 目前支持 faceliveness(活體檢測)
user_top_num number 返回用戶top數,默認爲1,最多返回5個

返回說明

字段 是否必選 類型 說明
log_id number 請求惟一標識碼,隨機數
result_num number 返回結果數目,即:result數組中元素個數
ext_info array 對應參數中的ext_fields
+faceliveness string 活體分數,如0.49999。活體檢測參考分數0.4494,以上則可認爲是活體(測試期間
result array 結果數組
+group_id string 對應的這個用戶的group_id
+uid string 匹配到的用戶id
+user_info string 註冊時的用戶信息
+scores array 結果數組,數組元素爲匹配得分,top n。得分[0,100.0]

返回樣例:


{ "log_id": 73473737, "result_num":1, "result": [ { "group_id" : "test1", "uid": "u333333", "user_info": "Test User", "scores": [ 99.3, 83.4 ] } ] }

人臉認證

接口描述

用於識別上傳的圖片是否爲指定用戶,即查找前須要先肯定要查找的用戶在人臉庫中的id。

典型應用場景:如人臉登陸,人臉簽到等

說明:人臉認證與人臉識別的差異在於:人臉識別須要指定一個待查找的人臉庫中的組;而人臉認證須要指定具體的用戶id便可,不須要指定具體的人臉庫中的組;實際應用中,人臉認證須要用戶或系統先輸入id,這增長了驗證安全度,但也增長了複雜度,具體使用哪一個接口須要視您的業務場景判斷。

說明:請求參數中,新增在線活體檢測

請求說明

舉例,要認證一張圖片在指定group中是否爲uid的用戶:


public static void FaceVerify() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var image1 = File.ReadAllBytes("圖片文件路徑"); var result = client.User.Verify(image1, "uid", new []{"groupId"}, 1); }

人臉認證請求參數詳情:

可選參數均放在接口最後的options參數中。

參數 是否必選 類型 說明
uid string 用戶id(由數字、字母、下劃線組成),長度限制128B
image byte[] 圖像數據
group_id string 用戶組id(由數字、字母、下劃線組成)列表,每一個groupid長度限制48
top_num number 返回匹配得分top數,默認爲1
ext_fields string 特殊返回信息,多個用逗號分隔,取值固定: 目前支持 faceliveness(活體檢測)

返回說明

字段 是否必選 類型 說明
log_id number 請求惟一標識碼,隨機數
result_num number 返回結果數目,即:result數組中元素個數
result array 結果數組,數組元素爲匹配得分,top n。 得分範圍[0,100.0]。推薦得分超過80可認爲認證成功
ext_info array 對應參數中的ext_fields
+faceliveness string 活體分數,如0.49999。活體檢測參考分數0.4494,以上則可認爲是活體(測試期間)

返回樣例:


{ "results": [ 93.86580657959, 92.237548828125 ], "result_num": 2, "log_id": 1629483134 }

人臉註冊

接口描述

用於從人臉庫中新增用戶,能夠設定多個用戶所在組,及組內用戶的人臉圖片,

典型應用場景:構建您的人臉庫,如會員人臉註冊,已有用戶補全人臉信息等。

人臉庫、用戶組、用戶、用戶下的人臉層級關係以下所示:


|- 人臉庫 |- 用戶組一 |- 用戶01 |- 人臉 |- 用戶02 |- 人臉 |- 人臉 .... .... |- 用戶組二 |- 用戶組三 |- 用戶組四 ....

說明:關於人臉庫的設置限制

  • 每一個開發者帳號只能建立一我的臉庫;
  • 每一個人臉庫下,用戶組(group)數量沒有限制;
  • 每一個用戶組(group)下,可添加最多300000張人臉,如每一個uid註冊一張人臉,則最多300000個用戶uid;
  • 每一個用戶(uid)所能註冊的最大人臉數量沒有限制;

說明:人臉註冊完畢後,生效時間最長爲35s,以後即可以進行識別或認證操做。

說明:註冊的人臉,建議爲用戶正面人臉。

說明:uid在庫中已經存在時,對此uid重複註冊時,新註冊的圖片默認會追加到該uid下,若是手動選擇action_type:replace,則會用新圖替換庫中該uid下全部圖片。

請求說明

舉例,要註冊一個新用戶,用戶id爲uid,加入組id爲group1, 註冊成功後服務端會返回操做的logid:


public static void FaceRegister() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var image1 = File.ReadAllBytes("圖片文件路徑"); var result = client.User.Register(image1, "uid", "user info here", new []{"groupId"}); }

人臉註冊請求參數要求:

全部圖片經base64編碼後的圖片數據總和不超過10M。

人臉註冊返回數據參數詳情:

參數 是否必選 類型 說明
uid string 用戶id(由數字、字母、下劃線組成),長度限制128B
image byte[] 圖片數據
group_id string 用戶組id(由數字、字母、下劃線組成),長度限制48
user_info string 新的user_info信息
action_type string 若是爲replace時,則uid不存在時,不報錯,會自動註冊。 不存在該參數時,若是uid不存在會提示錯誤

返回說明

字段 是否必選 類型 說明
log_id number 請求標識碼,隨機數,惟一

返回樣例:


// 註冊成功 { "log_id": 73473737, } // 註冊發生錯誤 { "error_code": 216616, "log_id": 674786177, "error_msg": "image exist" }

人臉更新

接口描述

用於對人臉庫中指定用戶,更新其下的人臉圖像。

說明:針對一個uid執行更新操做,新上傳的人臉圖像將覆蓋此uid原有全部圖像。

說明:執行更新操做,若是該uid不存在時,會返回錯誤。若是添加了action_type:replace,則不會報錯,並自動註冊該uid,操做結果等同註冊新用戶。

請求說明

舉例,要更新一個用戶,用戶id爲uid, 更新成功後服務端會返回操做的logid:


public static void FaceUpdate() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var image1 = File.ReadAllBytes("圖片文件路徑"); var result = client.User.Update(image1, "uid", "groupId", "new user info"); }

人臉更新請求參數詳情:

參數 是否必選 類型 說明
uid string 用戶id(由數字、字母、下劃線組成),長度限制128B
image byte[] 圖片數據
group_id string 用戶組id(由數字、字母、下劃線組成),長度限制48
user_info string 新的user_info信息

返回說明

字段 是否必選 類型 說明
log_id number 請求標識碼,隨機數,惟一

// 更新成功 { "log_id": 73473737, } // 更新發生錯誤 { "error_code": 216612, "log_id": 1137508902, "error_msg": "user not exist" }

人臉刪除

接口描述

用於從人臉庫中刪除一個用戶。

人臉刪除注意事項:

  • 刪除的內容,包括用戶全部圖像和身份信息;
  • 若是一個uid存在於多個用戶組內且沒有指定group_id,將會同時將從各個組中把用戶刪除
  • 若是指定了group_id,則只刪除此group下的uid相關信息

請求說明


public static void FaceDelete() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var result = client.User.Delete("uid"); result = client.User.Delete("uid", new []{"group1"}); }

人臉刪除請求參數要求:

參數 是否必選 類型 說明
uid string 用戶id(由數字、字母、下劃線組成),長度限制128B
group_id string 刪除指定group_id中的uid信息

返回說明

人臉刪除返回數據參數詳情:

字段 是否必選 類型 說明
log_id number 請求標識碼,隨機數,惟一

返回樣例:


// 更新成功 { "log_id": 73473737, } // 更新發生錯誤 { "error_code": 216612, "log_id": 1137508902, "error_msg": "user not exist" }

用戶信息查詢

接口描述

用於查詢人臉庫中某用戶的詳細信息。

請求說明

舉例,要查詢指定用戶的信息:


public static void UserInfo() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var result = client.User.GetInfo("uid"); }

用戶信息查詢請求參數要求:

如下可選參數放在接口最後的options參數中。

參數 是否必選 類型 說明
uid string 用戶id(由數字、字母、下劃線組成),長度限制128B
group_id string 選擇指定group_id則只查找group列表下的uid內容,若是不指定則查找全部group下對應uid的信息

用戶信息查詢返回數據參數詳情:

字段 是否必選 類型 說明
log_id number 請求標識碼,隨機數,惟一
result array 結果數組
+uid string 匹配到的用戶id
+user_info string 註冊時的用戶信息
+groups array 用戶所屬組列表

返回樣例:


{ "result": { "uid": "testuser2", "user_info": "registed user info ...", "groups": [ "grp1", "grp2", "grp3" ] }, "log_id": 2979357502 }

組列表查詢

接口描述

用於查詢用戶組的列表。

請求說明

舉例:


public static void GroupList() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var result = client.Group.GetAllGroups(0, 100); }

組列表查詢請求參數詳情:

參數 是否必選 類型 說明
start number 默認值0,起始序號
num number 返回數量,默認值100,最大值1000

組列表查詢返回數據參數詳情:

字段 是否必選 類型 說明
log_id number 請求標識碼,隨機數,惟一
result_num number 返回個數
result array group_id列表

返回樣例:


{ "result_num": 2, "result": [ "grp1", "grp2" ], "log_id": 3314921889 }

組內用戶列表查詢

接口描述

用於查詢指定用戶組中的用戶列表。

請求說明

舉例:


public static void GroupUsers() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var result = client.Group.GetUsers("groupId", 0, 100); }

組內用戶列表查詢請求參數詳情:

參數 是否必選 類型 說明
group_id string 用戶組id
start number 默認值0,起始序號
num number 返回數量,默認值100,最大值1000

組內用戶列表查詢返回數據參數詳情:

字段 是否必選 類型 說明
log_id number 請求標識碼,隨機數,惟一
result_num number 返回個數
result array user列表
+uid string 用戶id
+user_info string 用戶信息

返回樣例:


{ "log_id": 3314921889, "result_num": 2, "result": [ { "uid": "uid1", "user_info": "user info 1" }, { "uid": "uid2", "user_info": "user info 2" } ] }

組內添加用戶

接口描述

用於將已經存在於人臉庫中的用戶添加到一個新的組。

說明:並非向一個指定組內添加用戶,而是直接從其它組複製用戶信息

請求說明

舉例:


public static void GroupAddUser() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var result = client.Group.AddUser(new []{"toGroupId"}, "uid", "fromGroupId"); }

組間複製用戶請求參數詳情:

參數 是否必選 類型 說明
src_group_id string 從指定group裏複製信息
group_id string 須要添加信息的組id列表
uid string 用戶id

####返回說明

字段 是否必選 類型 說明
log_id number 請求標識碼,隨機數,惟一

返回樣例:


// 正確返回值 { "log_id": 3314921889, } // 發生錯誤時返回值 { "error_code": 216100, "log_id": 3111284097, "error_msg": "already add" }

組內刪除用戶

接口描述

用於將用戶從某個組中刪除,但不會刪除用戶在其它組的信息。

說明:當用戶僅屬於單個分組時,本接口將返回錯誤,請使用人臉刪除接口

請求說明

舉例:


public static void GroupDeleteUser() { var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key"); var result = client.Group.DeleteUser(new []{"groupId"}, "uid"); }

組內刪除用戶請求參數詳情:

參數 是否必選 類型 說明
group_id string 用戶組id列表
uid string 用戶id

返回說明

字段 是否必選 類型 說明
log_id number 請求標識碼,隨機數,惟一

返回樣例:


// 正確返回值 { "log_id": 3314921889, } // 發生錯誤時返回值 { "error_code": 216619, "log_id": 815967402, "error_msg": "user must be in one group at least" }

錯誤信息

錯誤返回格式

若請求錯誤,服務器將返回的JSON文本包含如下參數:

  • error_code:錯誤碼。
  • error_msg:錯誤描述信息,幫助理解和解決發生的錯誤。

錯誤碼

錯誤碼 錯誤信息 描述
4 Open api request limit reached 集羣超限額
17 Open api daily request limit reached 天天流量超限額
18 Open api qps request limit reached QPS超限額
19 Open api total request limit reached 請求總量超限額
100 Invalid parameter 無效參數
110 Access token invalid or no longer valid Access Token失效
111 Access token expired Access token過時
216015 module closed 模塊關閉
216100 invalid param 參數異常
216101 not enough param 缺乏必須的參數
216102 service not support 請求了不支持的服務,請檢查調用的url
216103 param too long 請求超長,通常爲一次傳入圖片個數超過系統限制
216110 appid not exist appid不存在,請從新檢查後臺應用列表中的應用信息
216111 invalid userid userid信息非法,請檢查對應的參數
216200 empty image 圖片爲空或者base64解碼錯誤
216201 image format error 圖片格式錯誤
216202 image size error 圖片大小錯誤
216300 db error 數據庫異常,少許發生時重試便可
216400 backend error 後端識別服務異常,能夠根據具體msg查看錯誤緣由
216401 internal error 內部錯誤
216402 face not found 未找到人臉,請檢查圖片是否含有人臉
216500 unknown error 未知錯誤
216611 user not exist 用戶不存在,請確認該用戶是否註冊或註冊已經生效(須要已經註冊超過35s)
216613 fail to delete user record 刪除用戶圖片記錄失敗,重試便可
216614 not enough images 兩兩比對中圖片數少於2張,沒法比較
216615 fail to process images 服務處理該圖片失敗,發生後重試便可
216616 image existed 圖片已存在
216617 fail to add user 新增用戶圖片失敗
216618 no user in group 組內用戶爲空,確認該group是否存在或已經生效(須要已經註冊超過35s)
216631 request add user overlimit 本次請求添加的用戶數量超限
相關文章
相關標籤/搜索