趙丙秀
摘要:有關(guān)人臉識別技術(shù)的應(yīng)用越來越普及,已經(jīng)滲透到家庭看護(hù)、移動互聯(lián)網(wǎng)、智能硬件、政府警用、金融、監(jiān)控、零售、社交娛樂等各個領(lǐng)域。國內(nèi)有許多企業(yè)提供了人臉識別產(chǎn)品。該文介紹了基于Js、Ajax、Jsp等技術(shù)利用百度AI的SDK的Web人臉注冊登錄的實現(xiàn)。
關(guān)鍵詞:AIPFace;人臉識別;百度AI;Jsp
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)07-0114-02
近幾年來,有關(guān)人臉識別技術(shù)的應(yīng)用越來越普及,已逐漸滲透到各行各業(yè),如家庭看護(hù)、遠(yuǎn)程驗證注冊、政府警用、網(wǎng)吧兼管、手機(jī)支付等等。例如:“I Baby”全景嬰兒監(jiān)視器,其借助人臉識別技術(shù),監(jiān)護(hù)寶寶,并實時同步到移動設(shè)備上,讓家長隨時隨地都能監(jiān)管寶貝。微軟公司的顏齡機(jī)器人"how-old.net"網(wǎng)站可從用戶提供人物照片,識別出人性別和年齡?,F(xiàn)在各大金融APP利用人臉識別技術(shù),實現(xiàn)身份驗證、賬號注冊、掃臉放貸、掃臉支付等。
1 基本思想
目前國內(nèi)有許多企業(yè)提供了人臉識別產(chǎn)品,比如北京曠視科技、北京商湯科技、騰訊、阿里、百度等。本系統(tǒng)利用百度ai人臉識別,注冊時,將頁面中采集的人臉圖像存入百度云人臉庫和服務(wù)器中。登錄時,將采集到得人臉圖像與百度云人臉庫中的人臉信息進(jìn)行比對,比對成功則可以成功登錄。
本系統(tǒng)前端采用HTML5、JS、CSS3等技術(shù)對注冊和登錄頁面進(jìn)行設(shè)計和布局。利用JSP、Ajax、Servlet等技術(shù)進(jìn)行后端的處理和交互。注冊具體過程:
1)當(dāng)用戶注冊時,通過打開本地攝像頭提取人的臉部;2)獲取到人臉之后在通過ajax進(jìn)行提交到Servlet;3)在Servlet里面進(jìn)行處理(添加到人臉庫中),并且將前臺ajax傳過來的base64圖像進(jìn)行轉(zhuǎn)換成圖片,然后上傳到服務(wù)器中;4)提交到人臉庫的同時,設(shè)置編號為注冊用戶名。
登錄具體過程:
1)用戶需要輸入登錄的用戶名(username);2)通過本地打開攝像頭進(jìn)行獲取人臉的base64圖像信息;3)將base64圖像信息轉(zhuǎn)換成圖片之后在進(jìn)行與服務(wù)器中的人臉進(jìn)行比對。比對成功則成功登錄。
2 百度人臉識別SDK
人臉識別使用百度人臉識別Java SDK。其中AipFace是人臉識別的Java客戶端,為使用人臉識別的開發(fā)人員提供了一系列的交互方法。這里列舉幾個方法:
人臉?biāo)阉鳎簊earch(image, imageType, groupIdList, options)
人臉檢測:detect(image, imageType, options)
人臉注冊:addUser(image, imageType, groupId, userId, options)
人臉驗證:verifyUser(userId, groupIdList, path, options);
在使用百度人臉識別Java SDK之前需要導(dǎo)入相關(guān)的jar包。步驟如下:
1)在百度官方網(wǎng)站下載Java SDK壓縮工具包。
2)將下載的aip-java-sdk-version.zip解壓后,復(fù)制到工程文件夾中。
3)在Eclipse中選中工程點擊右鍵,選中“Properties”打開工程屬性視圖,選中“ Java Build Path -> Add JARs”。
4)添加SDK工具包aip-java-sdk-version.jar和第三方依賴工具包log4j-1.2.17.jar、json-20160810.jar。
3 具體實現(xiàn)
1)數(shù)據(jù)庫設(shè)計
本系統(tǒng)數(shù)據(jù)庫采用MySql數(shù)據(jù)庫,用于登錄的用戶表users的各字段名和類型如下:
id int(11) NOT NULL, username varchar(50) NOT NULL, password varchar(50) DEFAULT NULL, headphoto varchar(50) DEFAULT NULL
2)Js讀取攝像頭獲得頭像信息
打開攝像頭主要用到getUserMedia方法,然后將獲取到的媒體流置入video標(biāo)簽。
navigator.getMedia({ video: true }, function(stream) {
mediaStreamTrack = stream.getTracks()[0];
video.src = (window.URL || window.webkitURL).createObjectURL(stream);
video.play();
}, function(err) { console.log(err); });
3)獲取人臉圖像
Js代碼中獲得圖像,然后將用戶名和圖像利用Ajax技術(shù)提交給FaceServlet文件進(jìn)行注冊處理。截取圖片主要用到canvas繪圖,使用drawImage方法將video的內(nèi)容繪至canvas中。將截取的內(nèi)容上傳至服務(wù)器,將canvas中的內(nèi)容轉(zhuǎn)為base64格式上傳。
拍照按鈕處理的核心代碼:
var canvans = document.getElementById("canvas");
var video = document.getElementById("video");
var context = canvas.getContext("2d");
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
context.drawImage(video,0,0);
var imgData = canvans.toDataURL();
var imgData1 = imgData.substring(22); //在前端截取22位字符串作為圖像數(shù)據(jù)
var username = $("#username").val();
$.ajax({ type: "post", url: "FaceServlet?tag=reg",
data:{"img":imgData1,"username":username}, success: function(data){
if(data=="恭喜你!人臉注冊成功,即將跳轉(zhuǎn)登錄頁面"){
alert(data); location.href = "login.jsp"; }
if(data=="人臉識別失敗,請正對屏幕攝像頭??!"){
alert(data); return false; }
},error:function(msg){ alert("錯誤"); } });
4)利用人臉圖像進(jìn)行注冊或登錄
FaceServlet中注冊處理,如果是注冊,則需要將提交的數(shù)據(jù)存入數(shù)據(jù)庫和將用戶名和圖像存入百度人臉庫。如果是登錄,則將獲得的人臉圖像與人臉庫中的進(jìn)行比對。
其中有三個核心代碼:GenerateImage將圖像上傳服務(wù)器,facesetAddUser將圖像上傳人臉庫,verifyUser方法為驗證用戶的方法。
public booleanGenerateImage(String imgStr, String imgFilePath),其核心代碼如下:
BASE64Decoder decoder = new BASE64Decoder();
byte[] bytes = decoder.decodeBuffer(imgStr); // Base64解碼
for (int i = 0; i if (bytes[i] < 0) {// 調(diào)整異常數(shù)據(jù) bytes[i] += 256; } } OutputStream out = new FileOutputStream(imgFilePath); // 生成jpeg圖片 out.write(bytes); public booleanfacesetAddUser(AipFace client, String path, String username)的核心代碼: HashMap JSONObject res = client.addUser(username, "test_users_info", Arrays.asList("group1", "group2"), path, options); if (res.keySet().contains("error_code")) { return false; } return true; public Double verifyUser(AipFace client, String path, String username)的核心代碼: HashMap options.put("top_num", 5); JSONObject res = client.verifyUser(username, Arrays.asList("group1", "group2"), path, options); Double result = Double.parseDouble(res.getJSONArray("result").get(0) .toString()); return result; 4 結(jié)束語 基于百度AI平臺的Web人臉注冊和登錄系統(tǒng),將人臉圖像存入將注冊的人臉圖片存入百度人臉庫,利用百度AI平臺中AipFace中提供的注冊人臉、驗證人臉的方法來實現(xiàn)人臉的添加和識別。人臉識別注冊登錄技術(shù)可以廣泛應(yīng)用到各種系統(tǒng)中,節(jié)省了注冊時間和登錄時間,并具有一定的安全措施。 參考文獻(xiàn) [1] 楊紫荊,韋思宏.潘林.人臉自動檢測與識別技術(shù)探究[J].設(shè)備管理與維修,2018(16):162-163. [2] 羅佳偉,孫雪峰,李琳.基于百度AI平臺的Web人臉注冊和登錄系統(tǒng)的設(shè)計[J].中國新通信,2018(6):73. 【通聯(lián)編輯:朱寶貴】