从零开始玩人工智能-人脸 API-03
? ? 前文我們嘗試寫了一個(gè)完整的人臉驗(yàn)證過程,從創(chuàng)建一個(gè)組,一個(gè)人,到為人提供照片,并訓(xùn)練AI,直至最后提供一張照片讓 AI 利用 Face API 判斷是不是這個(gè)特定的人。
??? 另一個(gè)經(jīng)常會用到的人臉識別,是在一張照片中查找認(rèn)識的人。Facebook什么的挺早就能夠識別照片中的人并可以讓你給他們打上標(biāo)簽。其實(shí),利用Face API做類似的事情也一點(diǎn)不復(fù)雜。不信我們用代碼來看看。
??? 為了說明在一張合影中 AI 能夠找到并識別特定人,我用了去年峰會中國MVP及MVP Lead梁迪和微軟CEO薩蒂亞·納德拉(Satya Nadella)、微軟全球資深副總裁沈向洋、微軟全球資深副總裁潘正磊的合影來做代碼范例,也算是扯虎皮做大旗吧哈哈哈。
???? 首先,使用前文示例代碼中用到的Detect方法來識別照片中的人臉。
??? 說實(shí)話,我有點(diǎn)擔(dān)心。這張照片里的人好多啊,AI 能夠都識別出來么?
??? 呼啦啦返回了46個(gè)faceId,我趴在照片上一頓數(shù),還真的是一個(gè)不落都識別出來了,厲害厲害!
??? 在這里我遇到了一個(gè)問題。如前文介紹的,Detect方法識別出來的人臉會以JSON形式返回,而兩層及兩層以上的數(shù)據(jù)結(jié)構(gòu)在轉(zhuǎn)成Python的數(shù)據(jù)時(shí),不再是dict,而是list。多層的數(shù)據(jù)意味著多層的list對象。上一次因?yàn)閿?shù)據(jù)簡單,直接使用了List的下標(biāo)來定位數(shù)據(jù)。這一次就要老老實(shí)實(shí)遍歷進(jìn)行處理了。因此,for語句和list.append()就學(xué)會使用了。
??? 由這個(gè)問題引發(fā)的另外一個(gè)問題是,生成的List需要提供給下一步Face的Identify方法作為輸入。按照API文檔的說明,輸入應(yīng)該形如:
???? 在“faceIds”這里,應(yīng)該輸入所有經(jīng)由Detect識別出的人臉的ID。所以我把上一步獲得的List轉(zhuǎn)換成了JSON格式然后拼裝這個(gè)請求的body。結(jié)果……報(bào)錯(cuò)了……冷靜地print出來list和body,跟文檔進(jìn)行比較,原來多了對’’’號……
???? 原來拼裝這個(gè)JSON的時(shí)候,使用List對象facesId就可以了。使用json的dumps()把List轉(zhuǎn)成json,我多此一舉了。那為什么又報(bào)Error:0呢?仔細(xì)看文檔,用于Identify方法的人臉數(shù)量,應(yīng)該1到10之間。我們輸入給AI的Face ID大大超過了這個(gè)數(shù)量,所以……報(bào)錯(cuò)了……那該怎么辦呢?我可以分批處理,也可以裁剪照片。因?yàn)楹罄m(xù)還要試試找不到人怎么辦,所以我對照片進(jìn)行了不同的裁剪。
???? 返回的json格式形如:
??? 如果沒有對應(yīng)到人,faceId對應(yīng)的“condidates”就會顯示為[],即空。而對應(yīng)到人的faceId對應(yīng)會有識別出的人的personId和相識度評分confidence。看來要把這個(gè)結(jié)果濾出來做點(diǎn)操作還是有點(diǎn)小復(fù)雜啊,一樣,使用for語句逐個(gè)下標(biāo)處理List。
??? 使用兩層List的下標(biāo)讀取,就能夠成功拆分從Face API返回的json數(shù)據(jù)了。我記得人臉識別的Verify方法里,判斷是否本人的參考值為0.5,因此在這里如果系統(tǒng)返回相識度評分大于0.5,我就繼續(xù)從Face ID再去識別具體的人是誰。
??? 果然,Face API從合影照片中認(rèn)出了我~那么如果我不在照片里呢?
??? Face API確實(shí)沒有發(fā)現(xiàn)通過training認(rèn)識的人~
??? 細(xì)心的你發(fā)現(xiàn)了吧,兩次照片檢測的Face ID怎么全部不一樣?還記得前文我們說過的嗎?Detect生成的Face ID是臨時(shí)的,會在24小時(shí)之后清除,所以每次獲得的ID都不同,即使是同一張臉。而關(guān)聯(lián)到人的臉,其Face ID就是持久的,可以在需要的時(shí)候使用。
??? 這么牛的合影,難道只識別我自己嗎?當(dāng)然不,我們要試試 AI 能不能識別多個(gè)人~
??? 立刻上網(wǎng)為這三位大神各自找了三張照片。找的過程中發(fā)現(xiàn),潘女士原來早在2010年就參加過MVP的Open Day,難怪上次MVP Round Table的時(shí)候覺得那么熟悉,看我這糟糕的記性…
??? 趕緊在上次創(chuàng)建的person group里再創(chuàng)建了三個(gè)person,每人傳輸了上圖的三張照片。
??? 再次運(yùn)行代碼,這一次,AI 在合影中就識別出了四個(gè)人了,厲害厲害~
??? 利用Azure Cognitive Services中的Face API,哪怕沒有任何深入的 AI 知識,哪怕沒有熟練的編程技巧,只需要簡單的幾十行代碼,就能夠?qū)崿F(xiàn)有趣的人臉識別。
轉(zhuǎn)載于:https://blog.51cto.com/haohu/2073059
總結(jié)
以上是生活随笔為你收集整理的从零开始玩人工智能-人脸 API-03的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodejs中的exports和modu
- 下一篇: python分割文件目录/文件名和后缀