Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[Cognitive Service之Face Api][08]人臉識別的AI服務 - 建立自己人物的臉Model - 瞭解PersonGroup、Person以及Face的概念

[Cognitive Service之Face Api][08]人臉識別的AI服務 - 建立自己人物的臉Model - 瞭解PersonGroup、Person以及Face的概念.jpg
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 

在上一篇([07]人臉識別的AI服務 - C#整合Verify驗證兩張圖片的人是否同個人)介紹完了Face Api裡面的Verify功能,在介紹這個Api的時候遇到了其中一個呼叫方式的參數叫做personGroupId

這個Person Group Id只得是什麽呢?如何建立呢?

這邊來看一下在Face Api裡面的Person Group、Person以及Face的概念,以及如何呼叫API來建立這些概念。

Face API裡面自建Model的概念

到目前爲止所介紹的Face API的方法都是識別出圖片裡面的臉(Face),但是沒有人(Person)的概念。

換個方式說,如果今天給一張圖片,是否能夠識別出這個圖片的臉是屬於誰?或者這個圖片裡面的臉是否和某個人是同一個人?

其實Face Api有辦法做到,但是有個前提條件,那就是要建立自己的人物Model。

這個很好理解,畢竟人物是每個application不同,因此只有符合你的domain才需要建立,但是怎麽建立呢?

要建立之前需要理解三個概念:

Face - 臉

到目前爲止有介紹的Face Api的服務所得到的Face Id都是代表這張臉的一個unique id。

而這個Face Id所代表的就是一張臉。

Person - 人

Person顧名思義就是代表一個人,而一個人可以有很多張不同時期或活動臉,例如年輕的時候,出去玩的時候等等。

因此,Person和Face是屬於1對多的關係。

PersonGroup - 一組人

Person Group代表一組有關係的人,或者換句話説這組人物的Model。

因此,PersonGroup和Person的關係是屬於:1對多

上面文字描述可能還有點模糊,但是看下圖應該能夠直接理解整個的關係:

chrome_2018-10-03_18-00-38.png
Face Api Model的關係圖,原始來源:https://docs.microsoft.com/en-us/azure/cognitive-services/face/face-api-how-to-topics/howtoidentifyfacesinimage

圖片裡面,總共有:

  1. 1個PersonGroup叫做MyFriends
  2. 3個Person
  3. 每個Person 3個Face

最後這個Model訓練出來的就是一個MyFriends的模型,可以用來預測圖片裡面的人臉屬於誰。

訓練自己的人臉Model

上面瞭解了概念之後接下來就是實際看看如何實際建立自己的Model。

整個的操作會是:

  1. 建立Person Group
  2. 建立Person
  3. 把人臉加入到Person
  4. 訓練Person Group建立出Model

1. 建立Person Group

首先是要瞭解怎麽呼叫API,因此可以參考文件:PersonGroup Create

這個方法的URI是:https://[location].api.cognitive.microsoft.com/face/v1.0
/persongroups/{personGroupId}

這個是一個Put的方法然後接受參數如下:

personGroupId
代表這個Person Group的唯一值,最長不超過64子元,然後只接受英數字和'-'以及'_'

在Header的部分:

Content-Type
可以設定也可以不設定,基本上就是application/json
Ocp-Apim-Subscription-Key
Face Api的subscription key

最後在Body的部分:

name
這個PersonGroup的名稱,不超過128長度即可。
userData
非必填欄位,最多不超過16KB大小的内容。任何文字類型都可以放在這邊。

瞭解了整個API之後,就可以透過Postman來測試:

Postman_2018-10-03_18-30-49.png
建立出PersonGroup

2. 建立Person

有了Group之後就是來建立一個Person。

詳細api可以參考:PersonGroup Person Create

方法的URI是:https://[location].api.cognitive.microsoft.com/face/v1.0
/persongroups/{personGroupId}/persons

這是一個POST的方法,然後接受的參數是:

personGroupId
這邊輸入的是Person要被存在那個Group的PersonGroupId

在Header的部分:

Content-Type
可以設定也可以不設定,基本上就是application/json
Ocp-Apim-Subscription-Key
Face Api的subscription key

最後在Body的部分:

name
這個Person的名稱,不超過128長度即可。
userData
非必填欄位,最多不超過16KB大小的内容。任何文字類型都可以放在這邊。

實際用Postman執行,返回一個personId,以我的例子是:c2e08f72-1ff2-45c4-861e-b31d5f18e0a3:

Postman_2018-10-03_18-38-54.png
執行完Create Person

3. 把人臉加入到Person

有了PersonId之後,接下來就是要把和這個人相關的人臉都加入進去。

需要注意,每一個加入的臉都是一直存在的,因此是需要收費的哦。

這個時候用到的API就是PersonGroup Person Add Faces

使用這個服務需要注意
  • 1個人只能夠有248張臉
  • 圖片最大6MB,只接受格式:JPEG、PNG、BMP以及GIF(第一張)
  • 圖片的人臉要在範圍(36x36 - 4096x4096像素)裡面

詳細api可以參考:PersonGroup Person Add Face

方法的URI是:https://[location].api.cognitive.microsoft.com/face/v1.0
/persongroups/{personGroupId}/persons/{personId}/persistedFaces[?userData][&targetFace]

這是一個POST的方法,然後接受的參數是:

personGroupId
這邊輸入的是Person要被存在那個Group的PersonGroupId
personId
把這個臉加入到那個人裡面
userData
非必填欄位,最多不超過16KB大小的内容。任何文字類型都可以放在這邊。
targetFace

用來表示圖片裡面人臉的位置。以"targetFace=left,top,width,height"的方式

如果圖片有多個臉,那麽要必填,不然的話非必填欄位。

在Header的部分:

Content-Type
如果是application/json,那麽body就是輸入圖片的網址,不然就是application/octet-stream,那麽body就是圖片的binary。
Ocp-Apim-Subscription-Key
Face Api的subscription key

最後在Body的部分: 看Content-type,這邊的範例用的是application/json。

瞭解了api之後,就是實際來測試看看的時候:

Postman_2018-10-03_18-59-54.png
透過postman執行person addface

加入了之後會得到一個儲存下來的Face Id:e80e5b1b-d5ef-46c5-aa93-bc52f1bb7dba

4. 訓練Person Group建立出Model

等到Person建立完成,臉也都加入完了之後,既可以把Model建立出來了,這個時候就需要呼叫Train的API。

詳細api可以參考:PersonGroup Train

方法的URI是:https://[location].api.cognitive.microsoft.com/face/v1.0
/persongroups/{personGroupId}/train

這是一個POST的方法,然後接受的參數是:

personGroupId
這邊輸入的是Person要被存在那個Group的PersonGroupId

在Header的部分:

Ocp-Apim-Subscription-Key
Face Api的subscription key

執行下去之後這個PersonGroup將會開始做Training。不過,執行完了返回不代表Train完成了。

Postman_2018-10-03_21-38-02.png
執行Train得到的結果

要知道是否Train完了要透過另外一個方法:PersonGroup Get Training Status

方法的URI是:https://[location].api.cognitive.microsoft.com/face/v1.0
/persongroups/{personGroupId}/training

這是一個GET的方法,然後接受的參數是:

personGroupId
這邊輸入的是Person要被存在那個Group的PersonGroupId

在Header的部分:

Ocp-Apim-Subscription-Key
Face Api的subscription key

Postman_2018-10-03_21-38-17.png
執行完get training status,可以看到狀態是success
以上就是建立Person Model的方式,如果説要建立的Person很大量,那麽可以使用LargePersonGroup這組api,基本使用概念一樣。

結語

這篇介紹了Face Api裡面Person Group、Person以及Face的關係以及概念。

透過建立這些東西,可以Train出一個符合自己情景的人物臉Model,那麽接下來就是要看看如何使用這個Model。

不過在更進一步使用這些Model之前,想想如果每次建立Model都透過Postman這樣不是很累嗎?難道沒有什麽工具讓這個變得更加簡單?

下一篇([09]人臉識別的AI服務 - Face Api Explorer - GUI工具來建立Person Group Model)來介紹方便建立這些的GUI工具。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus