前文介紹了人臉api,但沒有乙個完整的功能實現,各個功能的api始終如散開的珍珠一樣,不能串成珠鏈。到底這套api是如何工作的呢?person、person group、facelist、face這些不同的物件是怎麼發生聯絡的呢?
於是,我決定寫乙個相對完整的簡單程式,完成乙個對人臉進行識別的功能。
仔細看了看文件,琢磨了一下。為了實現人臉識別,需要實現以下幾個步驟:
1、建立乙個person group。人需要通過組來進行管理組織。每個組最多有1000個人,免費的每個訂閱最多1000人,s0訂閱的每個組10000人,每個訂閱上限1m組、100m人。
2、建立乙個person。人是face的擁有著。每個人最多有248張臉的。和人關聯的臉是持久化的persistedface,而使用detect等api讀取的是非持久的face。
3、為person提供幾張不同的face。除了face,還有facelist物件,但更多用於分辨類似的臉。我估計要進行人臉識別,用face物件就可以。
4、對提供的幾張face進行訓練。人工智慧需要對輸入進行訓練,利用認知服務進行分析並得到結果。理論上提供訓練的資料越多,結果越準確。
5、提供一張用於比對的face。上傳一張,讓人工智慧判斷是不是同乙個人。
開始之前我要首先熟悉一下示例**。前文提供的示例**和face api的示例**使用了不同的模組。示例**引入了requests這個庫,使用它可以更靈活的完成有關http的各類方法特別是傳遞資料。所以:
pip install requests
因為有兩種不同的資料headers提交方式json和octet-steam,所以分開寫了兩個不同的headers頭部定義。為了便於使用,把訂閱的key和訪問的基礎鏈結分別使用變數進行提供。
正式開幹~首先是建立person group。和別的物件不同,persongroup的名字和id都是字串,只接受小寫英文本元和『-』、『_』,不多於64個字元。
其他物件的id都是類似guid的形式。通常在建立物件的時候由服務返回。由於person group是首先建立的,所以其id由使用者指定也很合乎情理。建立person group之後,就可以在組裡面建立人了。
每一部我都是用了print來輸出獲得的json資料。由於新增face需要提供person id,所以在這裡我從json裡面取出了personid的資料。
python裡面處理json可以用dump、dumps、load、loads不同的方法。loads能夠把獲得的json資料轉成dict或者list,這在我踩過list的坑之後才想明白。一旦json中的資料分層了,轉化出來的就是list了,這時就需要逐層處理資料。可以參考python的手冊: 18.2. json— json encoder and decoder:
有了personid,就可以為特定的人新增face了。官方示例**給的是通過json傳遞乙個的url。有很多人在下面問,怎麼使用本地的**呢?其實利用檔案,然後使用octet-steam傳送給azure就可以了。經過一番對requests.request()引數的猜測和對檔案的嘗試,果然就能夠把傳上去了。persistedfaceid其實後面沒有直接使用,為了學習我還是把它提取出來了。
為了訓練機器,繼續傳了幾張我的帥照……
當乙個人有了幾分臉面之後……哈哈,我們應該訓練人工智慧了。直接post特定url即可。
到了關鍵的時候了,我們要檢驗認知服務的效果了。先使用detect方法輸入一張**。
大連**手術多少錢
這裡其實不需要所有引數,只需要返回faceid就可以。所以把params裡面的資料刪了也無所謂。不過我想看看完整的輸出是怎樣的,就全寫出來了。
於是就遇到了前面說的坑,使用dict的方法,沒法獲得list裡面的資料。要是一層一層分析…好麻煩啊,轉念一想,輸出的格式是固定的,因此偷了個懶,直接用list的下標獲取faceid的dict,然後再get出faceid。
最後,就是呼叫verify方法,確認提供的**是不是我們之前使用幾張**訓練過的人的了。這句話好長去……
為了容易體現結果,我還特意用了中文……
按照文件說的,高於0.5的評分就可以視作通過,所以屬性isidentical的值為true,直接拿來做條件。
**是我本人嗎?當然,是。
利用azure的face api,完成乙個人臉識別,很簡單吧。
從零開始玩人工智慧 人臉 API 01
說實話,邊學ai邊學python挺酸爽的。可這阻止不了我嘗試學習ai的熱情,哈哈。並且,如果我能搞出來,看到文章的您肯定也不在話下。人臉api是azure上ai及認知服務的一項,應該是從計算機視覺分出來的吧,針對人臉的特點單獨做了特定的人工智慧機器學習及api封裝。由於是基於azure的雲端服務,所...
從零開始玩人工智慧 人臉 API 02
前文介紹了人臉api,但沒有乙個完整的功能實現,各個功能的api始終如散開的珍珠一樣,不能串成珠鏈。到底這套api是如何工作的呢?person person group facelist face這些不同的物件是怎麼發生聯絡的呢?於是,我決定寫乙個相對完整的簡單程式,完成乙個對人臉進行識別的功能。仔...
從零開始學習人工智慧 python篇 (二)
mac 系統自帶python,本人系統為macos high sierra,版本為10.13.3,在終端輸入指令python v 獲得到的python版本為 2.7.15,所以mac系統是自帶python的。但是2020 年 1 月 1 日,官方宣布停止 python 2 的更新。所以本著要玩就玩最...