胡娟,蒲源
(1.廣東白云學(xué)院大數(shù)據(jù)與計(jì)算機(jī)學(xué)院,廣東廣州 510400;2.華南理工大學(xué)未來(lái)技術(shù)學(xué)院,廣東廣州 511442)
人臉識(shí)別技術(shù)作為一種高效且準(zhǔn)確的身份驗(yàn)證方法,已廣泛應(yīng)用于各個(gè)領(lǐng)域。銀行、機(jī)場(chǎng)、邊境檢查站等場(chǎng)所采用人臉識(shí)別技術(shù),可大幅度提高管理的安全性。在商業(yè)領(lǐng)域,人臉識(shí)別技術(shù)同樣能夠優(yōu)化企業(yè)效率,如自助結(jié)賬、門(mén)禁控制和員工考勤等環(huán)節(jié)。此外,人臉識(shí)別技術(shù)在醫(yī)療保健、社交網(wǎng)絡(luò)和電子商務(wù)等領(lǐng)域的應(yīng)用,為用戶(hù)帶來(lái)了更加智能化的服務(wù)。騰訊云神圖作為人臉識(shí)別技術(shù)的領(lǐng)軍產(chǎn)品,以其卓越的準(zhǔn)確性和穩(wěn)定性,贏得了業(yè)界的廣泛認(rèn)可。
低代碼平臺(tái)是在企業(yè)需要更快速地開(kāi)發(fā)應(yīng)用程序、縮短上線時(shí)間并減少開(kāi)發(fā)成本的情況下誕生的。低代碼平臺(tái)的設(shè)計(jì)目的是讓開(kāi)發(fā)者在不需要大量編碼的情況下,利用可視化拖放界面和預(yù)先定義的組件來(lái)構(gòu)建應(yīng)用程序。這種方法可以大大提高開(kāi)發(fā)效率,它令非專(zhuān)業(yè)開(kāi)發(fā)者也能夠輕松創(chuàng)建復(fù)雜的應(yīng)用程序,從而降低了開(kāi)發(fā)門(mén)檻和學(xué)習(xí)曲線。將復(fù)雜的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)知識(shí)與低代碼技術(shù)相結(jié)合,有助于讓缺乏機(jī)器學(xué)習(xí)算法經(jīng)驗(yàn)的人員快速開(kāi)發(fā)出高質(zhì)量的人臉識(shí)別系統(tǒng)。
低代碼(Low-Code) 一詞最早在2014 年被提出,指通過(guò)圖形用戶(hù)界面和配置,來(lái)代替?zhèn)鹘y(tǒng)的手工編碼計(jì)算機(jī)程序來(lái)創(chuàng)建應(yīng)用程序軟件的平臺(tái)。低代碼開(kāi)發(fā)平臺(tái)提供一個(gè)所見(jiàn)即所得的頁(yè)面可視化編輯器,實(shí)現(xiàn)零代碼/低代碼生成頁(yè)面,可以快速搭建可視化頁(yè)面生產(chǎn)平臺(tái),讓非技術(shù)人員可以通過(guò)拖拽和配置,自助生成H5頁(yè)面、PC頁(yè)面、TV頁(yè)面,大大降低軟件開(kāi)發(fā)生產(chǎn)成本。
騰訊云神圖人臉識(shí)別基于騰訊優(yōu)圖強(qiáng)大的面部分析技術(shù),提供包括人臉檢測(cè)與分析、比對(duì)、搜索、驗(yàn)證、五官定位、活體檢測(cè)等多種功能,為開(kāi)發(fā)者和企業(yè)提供高性能高可用的人臉識(shí)別服務(wù)。可應(yīng)用于在線娛樂(lè)、在線身份認(rèn)證等多種應(yīng)用場(chǎng)景,充分滿足各行業(yè)客戶(hù)的人臉屬性識(shí)別及用戶(hù)身份確認(rèn)等需求。
該系統(tǒng)通過(guò)前端部署的人臉抓拍攝像機(jī)將實(shí)時(shí)采集的人臉數(shù)據(jù)通過(guò)專(zhuān)用網(wǎng)絡(luò)上傳到人臉識(shí)別服務(wù)器,采用騰訊云神圖人臉識(shí)別服務(wù)來(lái)進(jìn)行比對(duì)分析。在人臉識(shí)別API中,使用了一系列復(fù)雜的算法和技術(shù)來(lái)進(jìn)行人臉檢測(cè)和特征提取。當(dāng)出現(xiàn)人臉與人臉庫(kù)數(shù)據(jù)不匹配的情況,會(huì)通過(guò)郵件、短信等方式進(jìn)行警報(bào)或告警,最后生成數(shù)據(jù)分析與比對(duì)報(bào)告。圖1是該系統(tǒng)業(yè)務(wù)整體架構(gòu)圖。
圖1 人臉識(shí)別系統(tǒng)業(yè)務(wù)整體架構(gòu)圖
通過(guò)攝像頭拍照,使用人臉檢測(cè)算法檢測(cè)圖像中是否存在人臉。如果圖像中存在人臉,則根據(jù)返回的面部輪廓邊界框的坐標(biāo)、眼睛、鼻子等關(guān)鍵點(diǎn)的位置判斷是否需要預(yù)處理。如果抓拍到的是人的側(cè)臉,可能會(huì)因?yàn)楣庹?、遮擋、姿態(tài)等因素的影響,從而導(dǎo)致人臉圖像的面部區(qū)域發(fā)生了變形或偏移。這時(shí)需要進(jìn)行旋轉(zhuǎn)圖片、縮放圖片、人臉對(duì)齊、人臉裁剪等預(yù)處理操作,以便后續(xù)能夠更加準(zhǔn)確地進(jìn)行特征提取。將提取出的人臉特征向量與已有的人臉庫(kù)中的面孔特征向量進(jìn)行比對(duì),計(jì)算圖像的特征向量和人臉庫(kù)中的特征向量之間的相似度。如果相似度高于設(shè)定的閾值,系統(tǒng)會(huì)判斷這些人臉圖像為同一人,匹配成功。如果匹配成功,記錄相關(guān)信息;如果匹配失敗,則可以選擇發(fā)出告警信號(hào),并記錄相關(guān)信息,最后生成數(shù)據(jù)分析報(bào)告。圖2展示了該系統(tǒng)業(yè)務(wù)的整個(gè)流程。
圖2 低代碼人臉識(shí)別系統(tǒng)流程圖
1)人臉檢測(cè):人臉檢測(cè)基于深度學(xué)習(xí)技術(shù),通過(guò)訓(xùn)練大量人臉圖像數(shù)據(jù)建立模型。在應(yīng)用過(guò)程中,模型對(duì)輸入的圖像進(jìn)行分析。首先,模型通過(guò)滑動(dòng)窗口(Sliding Window)[3]的方式和尺度金字塔[4]掃描圖像中可能包含的人臉區(qū)域,然后對(duì)于每個(gè)窗口使用分類(lèi)器來(lái)判斷其是否包含人臉。借助多尺度檢測(cè)(Multi-Scale detection) 和非極大值抑制(簡(jiǎn)稱(chēng)為NMS 算法,Non-Maximum Suppression) ,可以準(zhǔn)確地定位到人臉區(qū)域。騰訊云神圖在尺度金字塔掃描圖中使用的是高斯金字塔(Gaussian Pyramid)[5]技術(shù)。高斯金字塔是一種多尺度圖像處理方法,它通過(guò)不斷進(jìn)行下采樣和高斯濾波,生成一系列圖像金字塔,每一層圖像的大小都是前一層圖像的一半,并且對(duì)每一層圖像進(jìn)行平滑處理以保留重要的圖像特征。騰訊云神圖人臉檢測(cè)還使用了全卷積網(wǎng)絡(luò)(Fully Convolutional Network,F(xiàn)CN)。該算法將人臉圖像作為輸入,在網(wǎng)絡(luò)中進(jìn)行多輪卷積和池化等操作,最終輸出每個(gè)人臉關(guān)鍵點(diǎn)的位置坐標(biāo)。
2)特征提?。候v訊云神圖使用深度學(xué)習(xí)方法將人臉圖像轉(zhuǎn)換為128維特征向量。特征提取前需要對(duì)輸入的人臉圖像進(jìn)行預(yù)處理,如人臉縮放、對(duì)齊等,使其滿足模型的輸入要求。然后利用預(yù)訓(xùn)練的深度卷積神經(jīng)網(wǎng)絡(luò)(ResNet 和Inception 等)對(duì)人臉圖像進(jìn)行特征提取。卷積神經(jīng)網(wǎng)絡(luò)通過(guò)多層卷積、池化和激活函數(shù)等操作,從淺層的邊緣和紋理特征到深層的高級(jí)語(yǔ)義特征逐層進(jìn)行提取,這樣提取出的特征更具有區(qū)分性和更強(qiáng)的表達(dá)能力,它能有效地描述不同個(gè)體之間的人臉差異。經(jīng)過(guò)卷積神經(jīng)網(wǎng)絡(luò)提取出的特征通常具有較高的維度,為了將這些特征映射到128維空間,需要添加全連接層進(jìn)行降維。全連接層將前一層的所有神經(jīng)元與當(dāng)前層的所有神經(jīng)元進(jìn)行連接。通過(guò)調(diào)整全連接層的神經(jīng)元數(shù)量,可以實(shí)現(xiàn)降維。例如,前一層有512 個(gè)神經(jīng)元,而全連接層只有128 個(gè)神經(jīng)元,那么特征就會(huì)被映射到128維空間。最后,對(duì)生成的128維特征向量進(jìn)行歸一化處理,使其具有單位長(zhǎng)度。這樣做的目的是消除特征向量的尺度影響,以便于后續(xù)的相似度計(jì)算和人臉識(shí)別。
3)人臉識(shí)別:提取出特征向量之后需要計(jì)算相似度。特征向量的相似度是指兩個(gè)特征向量之間的相似程度,通常用余弦相似度(Cosine Similarity)來(lái)衡量。余弦相似度衡量的是兩個(gè)向量在方向上的相似程度,而不考慮它們?cè)陂L(zhǎng)度上的差異。當(dāng)兩個(gè)向量指向相似的方向時(shí),夾角余弦值接近于1,說(shuō)明它們非常相似;當(dāng)兩個(gè)向量指向截然相反的方向時(shí),夾角余弦值接近于-1,說(shuō)明它們非常不相似;當(dāng)兩個(gè)向量垂直時(shí),夾角余弦值接近于0,說(shuō)明它們之間沒(méi)有相似性。對(duì)于兩個(gè)特征向量a 和b,它們的余弦相似度可以通過(guò)下面的公式計(jì)算:
cosine_similarity(a,b)=(a·b)/(||a||*||b||)
其中,a·b表示向量a和向量b的點(diǎn)積,||a||和||b||分別表示向量a和向量b的模長(zhǎng)。余弦相似度的取值范圍在-1~1,數(shù)值越大表示兩個(gè)向量越相似,數(shù)值越小表示兩個(gè)向量越不相似。在人臉比對(duì)中,可以將兩個(gè)人臉的特征向量進(jìn)行余弦相似度計(jì)算,從而判斷它們是否屬于同一個(gè)人。
要使用騰訊云神圖人臉識(shí)別API,首先需要注冊(cè)一個(gè)騰訊云賬戶(hù)并獲取API 密鑰(SecretId 和Secret-Key)。然后使用以下命令,安裝騰訊云SDK:
npm install tencentcloud-sdk-nodejs --save。安裝完就可以在低代碼開(kāi)發(fā)平臺(tái)的自定義控件中編寫(xiě)代碼了。下面介紹各核心模塊的設(shè)計(jì)與實(shí)現(xiàn)。
人臉抓拍,采集人臉圖像上傳到服務(wù)器之后,對(duì)人臉進(jìn)行檢測(cè)。首先,需要導(dǎo)入騰訊云SDK tencentcloud-sdk-nodejs-iai,這是一個(gè)Node.js 庫(kù),用于與騰訊云的智能圖像識(shí)別IAI服務(wù)進(jìn)行通信。通過(guò)tencentcloud.iai.v20200303.Client 創(chuàng)建一個(gè)新的IaiClient 實(shí)例。該實(shí)例用于與騰訊云IAI 服務(wù)進(jìn)行交互。clientConfig 對(duì)象包含了一些配置信息,如身份驗(yàn)證憑據(jù)secretId和secretKey,這些是用于訪問(wèn)騰訊云API的密鑰。區(qū)域region,用于指定請(qǐng)求的目標(biāo)地域。服務(wù)端點(diǎn)endpoint,是IAI服務(wù)的API地址,用于發(fā)送請(qǐng)求。使用clientConfig 配置信息創(chuàng)建IaiClient 實(shí)例之后,準(zhǔn)備請(qǐng)求參數(shù)(params)。在這段代碼中,將人臉圖片的URL 地址放到了params 中。調(diào)用client.DetectFaceAttributes(params)方法,發(fā)送一個(gè)請(qǐng)求到騰訊云IAI服務(wù)以檢測(cè)人臉屬性。這是一個(gè)異步方法,返回一個(gè)Promise。使用.then 和.catch 處理Promise。如果請(qǐng)求成功,data 變量將包含返回的人臉屬性數(shù)據(jù),然后將其打印到控制臺(tái)。如果發(fā)生錯(cuò)誤,err變量將包含錯(cuò)誤信息,然后將其打印到控制臺(tái)。人臉檢測(cè)代碼如下:
const tencentcloud = require("tencentcloud-sdknodejs-iai");
const IaiClient=tencentcloud.iai.v20200303.Client;
const clientConfig={
credential:{
secretId:"SecretId",
secretKey:"SecretKey",
},
region:"",
profile:{
httpProfile:{
endpoint:"iai.tencentcloudapi.com",
},
},
};
const client=new IaiClient(clientConfig);
const params={
ImageUrl: ′https://example.com/your-face-image.jpg′
};
client.DetectFaceAttributes(params).then(
(data)=>{
console.log(data);
},
(err)=>{
console.error("error",err);
}
);
五官關(guān)鍵點(diǎn)定位的目的是更精準(zhǔn)地分析人臉信息。通過(guò)對(duì)面部五官關(guān)鍵點(diǎn)的定位,可以更加準(zhǔn)確地確定面部特征的位置。核心代碼如下:
const client=new IaiClient(clientConfig);
const params={
ImageUrl: ′https://example.com/your-face-image.jpg′,
FaceAttributesType:′faceoutline′
};
client.AnalyzeFace(params).then(
(data)=>{
console.log(data);
const faceShapeSet = data.FaceShapeSet;// 提取五官關(guān)鍵點(diǎn)數(shù)據(jù)
console.log(faceShapeSet);//輸出五官關(guān)鍵點(diǎn)數(shù)據(jù)
},
(err)=>{
console.error("error",err);
}
);
這段代碼中使用AnalyzeFace 方法定位人臉的五官。五官定位的結(jié)果是返回一組包含五官關(guān)鍵點(diǎn)坐標(biāo)的數(shù)據(jù)。這些關(guān)鍵點(diǎn)通常包括眼睛、鼻子、嘴巴、臉頰等部位的坐標(biāo)。要使用AnalyzeFace 方法進(jìn)行五官定位,需要在params 對(duì)象中添加一個(gè)名為FaceAttributesType的屬性,并將其值設(shè)置為faceoutline。這樣在分析人臉時(shí)會(huì)返回五官關(guān)鍵點(diǎn)數(shù)據(jù)。效果如圖3所示。
圖3 五官關(guān)鍵點(diǎn)坐標(biāo)定位
對(duì)于兩張圖片中的人臉進(jìn)行相似度比對(duì),返回人臉相似度分?jǐn)?shù),實(shí)現(xiàn)1∶1 比對(duì)。1∶1 比對(duì)是人臉識(shí)別技術(shù)中的一種對(duì)比方式,也被稱(chēng)為驗(yàn)證。在1∶1比對(duì)中,通常先將兩張照片進(jìn)行特征提取,然后計(jì)算它們之間的相似度得分。如果相似度得分超過(guò)了設(shè)定的閾值,則可以認(rèn)為這兩張照片屬于同一個(gè)人。核心代碼如下:
const client=new IaiClient(clientConfig);
const params={
ImageUrlA: ′https://example.com/your-face-image-A.jpg′,
ImageUrlB: ′https://example.com/your-face-image-B.jpg′
};
client.CompareFace(params).then(
(data)=>{
console.log(data);
const similarityScore = data.Score;// 提取相似度得分
console.log(′Similarity Score: ′, similarityScore);//輸出相似度得分
},
(err)=>{
console.error("error",err);
}
);
這段代碼中的CompareFace方法可以比較兩張人臉圖像。代碼中,params 對(duì)象包含了兩個(gè)名為ImageUrlA和ImageUrlB的屬性。這些屬性分別包含兩張人臉圖片的URL 地址。當(dāng)調(diào)用client.CompareFace(params)方法時(shí),騰訊云IAI服務(wù)會(huì)比較這兩張圖像并計(jì)算它們之間的相似度得分。.then 處理函數(shù)用于處理成功的響應(yīng)。響應(yīng)中包含的data 對(duì)象包含CompareFace 方法的結(jié)果。通過(guò)訪問(wèn)data.Score,可以獲取相似度得分。效果如圖4所示。
圖4 1:1比對(duì)結(jié)果
對(duì)于給定的一張人臉照片,和已有人臉庫(kù)中的N個(gè)人臉進(jìn)行比對(duì),找出最相似的一張臉或多張臉,并給出相似度排序,實(shí)現(xiàn)1:N 搜索。人臉?biāo)阉骱诵拇a如下:
const client=new IaiClient(clientConfig);
const params={
ImageUrl: ′https://example.com/your-face-image.jpg′,
GroupIds:[′group_id_1′,′group_id_2′]
};
client.SearchFaces(params).then(
(data)=>{
console.log(data);
},
(err)=>{
console.error("error",err);
}
);
這段代碼使用了SearchFaces方法,在指定的人臉庫(kù)分組中搜索與給定人臉圖像相似的人臉。在params 對(duì)象中,ImageUrl 屬性包含人臉圖片的URL 地址,GroupIds 屬性包含一個(gè)字符串?dāng)?shù)組,表示要在其中搜索的人臉庫(kù)分組ID列表。人臉庫(kù)分組ID列表通過(guò)將人臉數(shù)據(jù)分組,可以方便地對(duì)不同的人臉數(shù)據(jù)進(jìn)行批量操作,例如刪除人臉數(shù)據(jù)、修改或添加等操作。同時(shí),通過(guò)對(duì)人臉數(shù)據(jù)進(jìn)行分組,還可以方便地進(jìn)行人臉識(shí)別和人臉?biāo)阉?。在進(jìn)行人臉?biāo)阉鲿r(shí),根據(jù)分組ID來(lái)指定只在特定的分組中進(jìn)行搜索,從而提高搜索效率和準(zhǔn)確度。調(diào)用client.SearchFaces(params)方法后,騰訊云IAI 服務(wù)將在指定的人臉庫(kù)分組中查找與給定人臉圖像相似的人臉。.then 處理函數(shù)用于處理成功的響應(yīng)。響應(yīng)中的data 對(duì)象包含了SearchFaces方法的搜索結(jié)果。
結(jié)合低代碼開(kāi)發(fā)平臺(tái)和人臉識(shí)別技術(shù),本文設(shè)計(jì)了一款高效的人臉識(shí)別系統(tǒng)。該系統(tǒng)實(shí)現(xiàn)了自動(dòng)化人臉對(duì)齊、裁剪,并且人臉識(shí)別的準(zhǔn)確性高。未來(lái),可以在此基礎(chǔ)上進(jìn)一步完善和擴(kuò)展功能,以滿足更多的企業(yè)需求。例如,可以將該系統(tǒng)應(yīng)用于安防領(lǐng)域,對(duì)訪客的身份進(jìn)行識(shí)別和登記;也可以將其應(yīng)用于教育領(lǐng)域[6],通過(guò)人臉識(shí)別來(lái)驗(yàn)證考生的身份。