有時在朋友圈或其他地方會看到一些AI面相的分享鏈接或小程序,不是面相算命的有多吸引人,而是前面有"AI"兩個字母。於是我就上網找了一下相關代碼,發現了一個微擎系統的面相模塊。下載下來后,借用了別人認證的服務號運行並閱讀了源代碼,好奇也逐步消失,唯一沒跑通的就是臉部識別之后無法返回對應的結語;比如鼻相描述,眼相描述等等,因為需要一個收費接口,不過為了不收費只能自己寫,這個后面再說。
版本清單
微擎1.8.3 (關注下面 公眾號 回復“微擎”也可以獲取源碼)
AI面相模塊1.17
安裝環境
PHP+MYSQL+認證服務號
預覽
臉部識別部分
臉部識別使用的是百度人臉識別API,地址: https://ai.baidu.com/tech/face/detect。個人賬戶也可以免用申請使用,微擎的面相是用戶上傳一張圖片后,調用百度接口,通過API返回結果判斷圖片是否符合,符合保存頭像和部分接口信息。然后通過臉部特征點將其返回到前端,前端根據特征點的坐標繪制五官定位,臉部眼睛眉毛等輪廓。
其中最主要是使用landmark特征點,就是臉部五官的XY坐標,可以把人臉想成蒙上一張網,眼角就是其中一個(x,y)。接口返回4特征點,72特征點,150特征點,值越大五官定位越精確。
其實接口還有返回臉型,顏值,是否真人臉,是否戴眼鏡,表情,性別,人種等很多比較有趣的字段,不過有一個精確值。但是這個AI面相代碼並沒有使用這些,后面我修改的時候把這些元素都加上去了,感覺表情能識別出來會更驚喜。
支付提現部分
屬於商業代碼,自然就有收費和推廣部分。所以里面有關於鼻子或其他解鎖的需要收費,並且還有二級分銷,就少不了提現功能。關於公眾號中支付和提現,如果沒有申請商戶平台賬號可以先申請。完了后只需要把公眾號和商戶平台進行綁定,記錄相關參數和下載提現需要的證書秘鑰等。最后就是在微擎系統中配置了。
1. 支付(公眾號AppID, Appsecret, 商戶ID,支付秘鑰[自己在微信商戶平台設置的32位字符串])
2. 提現(證書和證書私鑰)
面相算術閾值
這個就是AI面相源碼最后需要的了,因為當圖片上傳后,五官也定位了,但是沒有描述。所以很多網站上下載的代碼都是對這部分做了sg11加密,類似下面
雖然下載PHP擴展SG11也能正常運行,但是讀不了源碼更改不了比較難受。其中SG11擴展包分別是: ixed.5.5.win和 ixed.5.5.lin,對應windows和linux。不過我后來發現了這個獲取描述的接口,地址: http://eb4lxnw.66bbn.com/api/index/getContent,請求參數見下,請求值是亂打的。
最后再回頭去看代碼的時候,發現上傳頭像后讀取相關描述是直接傳入五官名字就可以,比如傳入“眼睛”,“鼻子”等返回。其實我開始以為這個描述是有結合特征點做篩選,所以我猜那個系統描述的數據量很大,當需要讀取時就隨機返回一條,知道這個后面后自己修改就比較好做了。
自己寫的部分
添加了下面的幾個類和幾張表(包括五官解鎖描述語,五官種類等)。不過自己是有結合72特征點計算五官的占比然后去匹配對應的數據的,鼻子寬度占比能知道鼻翼的大小等等。而數據是在網上采集和爬取后整理的,最后使用起來就像上面那幾個報告的描述那樣也能達到一點准確度。