[Azure] C# + Azure Face API 做人臉相似度比對 ( FindSimilarAsync )
上一篇文章說到了 如何 Azure Face API 作臉部辨識簡單上手 ,這次基於上一篇來座相似度辨識,這主要可以做啥呢?
如果你是要做一個系統有登入功能,你可以做影像辨識判斷是本人就可以登入,或是幫自己的海量的謎片進行分類?
如果不知道如何申請 Azure Face API 或是基本的偵測照片中的人像,可以參考這篇文章 Azure Face API 作臉部辨識簡單上手
1. 上一篇文章我主要都是本地的圖片進行上傳辨識,這次為了省下我本地傳輸時間,我都是把照片先放到 網路上,然後使用
DetectWithUrlAsync ,直接使用網址上抓下圖來辨識。
2. 主要概念,送去辨識後,你會得到一個 或是多個 faceId ,之後你要選取其中一個當做比對的母本,之後再拿其他的 faceId 進行比對
所以我當作母本的 圖片盡量都是一張臉,之後測試被比對圖片大概就可有不只一張,進行比對,所以在程式碼裡面,傳入辨識的時候,被比對的 faceIds
是 List ,然後第一步辨識拿到 faceId ,這是有時間限制的,我目前是用預設,如果你有其他操作記得要設定時間 ( faceIdTimeToLive ),預設似乎是 24小時
測試圖片來源: https://www.pakutaso.com/ 。
C# code:
"; } var detectResultTarget = faceClient.Face.DetectWithUrlAsync(targetImage, detectionModel: DetectionModel.Detection01).Result; if (detectResultTarget.Count > 0) { targetFaceIds = detectResultTarget.Select(x => x.FaceId).ToList(); Result += "TargetFaceIds:" + string.Join(",", targetFaceIds) + "
"; } //尋找相似的臉 var finSimilarResult = faceClient.Face.FindSimilarAsync(baseFaceIds[0].Value, faceIds: targetFaceIds, mode: FindSimilarMatchMode.MatchFace).Result; Result += ""; foreach (var r in finSimilarResult) { Result += "被比對的FaceId : " + r.FaceId + ", 相似度:" + r.Confidence + "
"; }
送回來的資料,會放在 Confidence 中,0-1 之間。這邊 列出幾張測試結果。
reference:
https://docs.microsoft.com/zh-tw/rest/api/faceapi/face/find-similar
https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Vision.Face/2.7.0-preview.1
https://azure.microsoft.com/zh-cn/pricing/details/cognitive-services/face-api/
https://github.com/azure-samples/cognitive-services-vision-face-finder/tree/master/