Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、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
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus