在上一篇([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對多。
上面文字描述可能還有點模糊,但是看下圖應該能夠直接理解整個的關係:
圖片裡面,總共有:
- 1個PersonGroup叫做MyFriends
- 3個Person
- 每個Person 3個Face
最後這個Model訓練出來的就是一個MyFriends
的模型,可以用來預測圖片裡面的人臉屬於誰。
訓練自己的人臉Model
上面瞭解了概念之後接下來就是實際看看如何實際建立自己的Model。
整個的操作會是:
- 建立Person Group
- 建立Person
- 把人臉加入到Person
- 訓練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來測試:
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
:
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之後,就是實際來測試看看的時候:
加入了之後會得到一個儲存下來的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完成了。
要知道是否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
LargePersonGroup
這組api,基本使用概念一樣。
結語
這篇介紹了Face Api裡面Person Group、Person以及Face的關係以及概念。
透過建立這些東西,可以Train出一個符合自己情景的人物臉Model,那麽接下來就是要看看如何使用這個Model。
不過在更進一步使用這些Model之前,想想如果每次建立Model都透過Postman這樣不是很累嗎?難道沒有什麽工具讓這個變得更加簡單?
下一篇([09]人臉識別的AI服務 - Face Api Explorer - GUI工具來建立Person Group Model)來介紹方便建立這些的GUI工具。