【小資說庫】第13期 應用程序開發人員、DBA和DBMS開發人員的分工是怎樣的?
663
2025-04-05
前文介紹了人臉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:https://docs.python.org/2/library/json.html
有了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,完成一個人臉識別,很簡單吧。
人工智能
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。