以Azure Face API 實作臉部辨識. 前言 - Medium

文章推薦指數: 80 %
投票人數:10人

臉部辨識也是近幾年非常紅的大數據議題之一, Microsoft 推出的Azure Face API 是一項認知服務,可提供演算法來偵測、辨識和分析影像中的人臉。

Ashe’stechtalks技術文章職場生活個人網站以AzureFaceAPI實作臉部辨識AsheLiaoFollowMar22,2019·8minread前言臉部辨識也是近幾年非常紅的大數據議題之一,Microsoft推出的AzureFaceAPI是一項認知服務,可提供演算法來偵測、辨識和分析影像中的人臉。

處理人臉資訊的能力在許多不同的軟體案例中都有其重要性,例如安全性、自然使用者介面、影像內容分析和管理、行動應用程式及機器人。

針對FaceAPI,目前一共有五種不同的功能。

偵測臉部(Detect)尋找相似臉部(FindSimilar)群組(Group)識別(Identify)驗證(Verify)以上的資訊會藉由jsonfile回送,接著會逐一介紹五個API的使用時機和方式。

偵測臉部(Detect)最基礎的FaceAPI,使用者傳入一張圖片後,會自動偵測圖片中出現的人臉,並回傳臉部框架(facerectangle),將會給定框架的左上角以及長寬,以及可以自選以下的特徵。

FaceIdFaceLandmarksFaceAttributesFaceId就像是臉部的身分證,FaceAPI會產生一組獨一無二的亂碼作為識別這張臉的數位簽章,並會在最後一次呼叫FaceAPI的24小時後過期。

FaceLandmarks將回傳一個陣列,包含這張臉的27個重要的點。

FaceAttributes則包含13種的特徵,包含年紀、性別、微笑強度(0–1)、鬍鬚強度(0–1,分為兩鬢鬍鬚sideburns、髭moustache、以及鬍子beard)、頭部傾角、眼鏡種類(未戴眼鏡、閱讀眼鏡、太陽眼鏡、泳鏡)、情緒強度(0–1,分為中立、憤怒、輕視、厭惡、恐懼、高興、悲傷、驚訝)、髮型(是否頭髮可見,髮色為何)、化妝(眼妝、口紅)、配件(髮圈、眼鏡、口罩)、模糊量值及強度([弱中強,0–1])、曝光程度(良好、過曝、不足)、臉部像素雜訊([弱中強,0–1])尋找相似臉部(FindSimilar)從上一個API我們可以知道,把臉部送入FaceAPI後,將會回傳一個會在24小時後過期的FaceId。

透過尋找相似臉部API,會把這個FaceId送入透過FacelList創造的陣列中去尋找相似的臉部,FacelList中的FaceId並不會在24小時後過期。

尋找相似臉部API有兩種不同的工作模式,人像配對模式和臉部配對模式。

人像配對模式是默認的工作模式,會將一張臉送入FaceList後,搜尋FaceList中同一個人的其他臉部,常用在搜尋已知人員的其他臉部圖像。

另一個則是臉部配對模式,臉部配對模式會忽略同一個人的限制,直接在FaceList中尋找相似的臉部,常用在名人臉部相似度排序。

回送的jsonfile則會包含最相似的臉部的FaceId以及信心值[0,1]。

群組(Group)根據臉部的相似程度,把許多人的臉部照片自動分類,群組數目會根據臉部特徵而有不同。

在群組API中,有可能發生相同臉部但因為光線陰影面積不同,造成特徵不相同,而被分類到不同的群組中。

回送的jsonfile會將群組分為兩種回傳,一種是具有相同特徵的groups,一種則是臉部特徵在所有群組中皆找不到適合的群組放入,就會被放進messygroup。

FaceAPI的相關功能非常多,因為剩下的功能(創造或索引PersonGroup)較為複雜,屬於較進階的應用,因此我打算先介紹最常用的偵測臉部API,這也是專案或是Hackathon最常用到的。

之後有機會再和大家分享剩下的:)開始使用FaceAPI#建立資源登入AzurePortal按下左側的建立資源,在搜尋框中搜尋Face3.選擇第一個“臉部”資源並建立輸入建立資源的必要資訊後,點選建立#開始使用資源部屬完成後,可以從右上角的鈴鐺形狀通知點選,進入剛剛建立完成的資源群組在建立完成的資源群組中,會有一個CognitiveServices的資源,點選進入進入並在右邊選單點選Overview後,我們就進到臉部辨識的概覽頁面中,我們需要取得右邊的Endpoint以及ManageKeys以使用FaceAPI#以Postman示範-前置作業首先,FaceAPI是能夠識別人臉資訊的認知服務。

也就是說,我們需要找到一張有人臉的照片讓FaceAPI來判斷。

以下這張是我找的照片,在寒戰中飾演警務處副處長的M.BLee(梁家輝),請右鍵點選複製圖片位置#以Postman示範-URL打開Postman,在API方法中選擇Post旁邊的RequestURL請貼上在開始使用第三步取得的endpoint由於我們要實作人臉偵測,想要回傳的值包含臉部位置、年齡、性別和情緒,我們需要小小改動Endpoint本來的Endpoint應該長這樣https://[在建立資源時選取的地點會自動生成不用更改ex:westus2].api.cognitive.microsoft.com/face/v1.0需要改成https://[在建立資源時選取的地點會自動生成不用更改ex:westus2].api.cognitive.microsoft.com/face/v1.0/detect?returnFaceAttributes=age,gender,emotion這樣才能夠回傳我們想要的FaceAttributes,如果要顯示更多特徵,或是想要改成上面介紹的幾種功能,請參考這篇官方教學文章。

#以Postman示範-Header&BodyHeader要放的是剛剛在開始使用第三步取得的Managekeys,點選Showaccesskeys可以看到兩把Key可以選擇,請隨意選取一把並複製。

接著,請在Postman中選取Headers,並在Key值填入Ocp-Apim-Subscription-Key,Value填上剛剛複製好的Key。

切換到Body,選擇raw,以及在右邊的下拉選單中選擇JSON(application/json)格式在以下的程式碼中,貼上剛剛複製的圖片位置並複製整段程式碼貼上Postman{"url":"[改成剛剛複製的圖片位置要留意最後必須為.jpg或是.png]"}Header設定完應該長這樣Body設定完應該長這樣#以Postman示範-取得結果按下右邊的藍色Send按鈕,就可以看到FaceAPI回送的結果。

回送的結果會以json格式返回。

剛剛發送的圖片URL中的人臉是寒戰2的李文彬,飾演者梁家輝在2012時的年紀應該是54歲左右,劇中的設定是51歲,相差不太大。

李文彬是男性也沒錯,這張臉的情緒也蠻中立的。

因此可以說,FaceAPI在辨別這張臉的時候,準確性相當高。

常常被問到的問題是,為何FaceAPI回送的年齡都比較老?如果大家還記得幾年前風行一時的howold.net的話,微軟就是利用其中的臉部資料庫來訓練FaceAPI,而當時資料庫較多的臉部為西方人臉孔,造成東方人普遍臉部辨識的會較實際年長一點。

#結論這篇文章一開始,我們先簡介了何謂FaceAPI、FaceAPI幾種常用的功能。

接著介紹如何在AzurePortal建立FaceAPI資源,最後利用Postman實做臉部的年紀、性別、情緒等偵測。

如果你覺得這系列的文章對你有幫助的話,請不吝拍手或留言,你的支持是我寫Medium的最大動力。

Ashe’stechtalksMytechtalksandhands — onguideaboutMicrosoftAzure78FaceApiCognitiveServicesMicrosoftAzure78 claps78Ashe’stechtalksMytechtalksandhands — onguideaboutMicrosoftAzureWrittenbyAsheLiaoFollowATS,PublicSector,MicrosoftTaiwan|Microsoft15thMTCTAI|NTUBDSRCRA,DSSITAAshe’stechtalksMytechtalksandhands — onguideaboutMicrosoftAzure



請為這篇文章評分?