邱城銓,羅回彬,陳汕,李宇棟,蘇敬雄,呂翔
(北京理工大學(xué)珠海學(xué)院計(jì)算機(jī)學(xué)院,珠海519000)
傳統(tǒng)校園宿舍出入的記錄與分析工作大多數(shù)由宿管與輔導(dǎo)員手工記錄分析,其費(fèi)時(shí)費(fèi)力且容易錯(cuò)漏。隨著信息技術(shù)的發(fā)展,筆者深受當(dāng)下技術(shù)領(lǐng)域與人員流量管理的啟發(fā),嘗試整合分布式Web 后臺(tái)框架、GPS定位系統(tǒng)、人臉識(shí)別技術(shù)的成果,設(shè)計(jì)一款可支撐高峰期并發(fā)量的分布式智慧校園人臉識(shí)別系統(tǒng)。本系統(tǒng)主要應(yīng)用人臉識(shí)別與GPS 定位來(lái)解決校園中學(xué)生人員流動(dòng)的記錄與分析,可以較好的輔助學(xué)校宿管員和輔導(dǎo)員進(jìn)行在線審批、記錄和數(shù)據(jù)分析,可以解放一部分勞動(dòng)力,實(shí)現(xiàn)互聯(lián)網(wǎng)與物聯(lián)網(wǎng)緊密結(jié)合,較好地應(yīng)用到校園生活中。
在智慧校園人臉識(shí)別系統(tǒng)研發(fā)的過(guò)程中,突破了傳統(tǒng)Web 后臺(tái)的開(kāi)發(fā)和架構(gòu)模式,應(yīng)用了最新流行的分布式架構(gòu)搭建后臺(tái)系統(tǒng),前后端分離開(kāi)發(fā),系統(tǒng)架構(gòu)如圖1 所示。
本系統(tǒng)架構(gòu)屬于可集成多個(gè)Web 項(xiàng)目的分布式框架體系,本項(xiàng)目中以微信小程序作為用戶交互入口,后臺(tái)交互采用Web 瀏覽器端讓系統(tǒng)管理員進(jìn)行基礎(chǔ)信息的增刪改查,以Spring Cloud Gateway 作為API 網(wǎng)關(guān)入口,應(yīng)用服務(wù)器進(jìn)行數(shù)據(jù)處理,存儲(chǔ)與報(bào)表統(tǒng)計(jì),數(shù)據(jù)持久化至MySQL 服務(wù)器,中間可穿插Redis 緩存,采用Eureka 負(fù)責(zé)服務(wù)的注冊(cè)于發(fā)現(xiàn)。
圖1 系統(tǒng)架構(gòu)圖
系統(tǒng)功能點(diǎn)劃分層次分明,智慧校園人臉識(shí)別系統(tǒng)用戶入口為微信小程序,后臺(tái)管理為瀏覽器端,各個(gè)功能模塊如圖2 所示。
用戶注冊(cè)進(jìn)入系統(tǒng),注冊(cè)人臉數(shù)據(jù),將人臉信息注冊(cè)至人臉識(shí)別系統(tǒng),便可以參與正常的業(yè)務(wù)流程。智慧校園人臉識(shí)別系統(tǒng)采用微信小程序用戶進(jìn)行GPS 定位+人臉識(shí)別兩種鑒別方式監(jiān)控學(xué)生宿舍歸校人數(shù)統(tǒng)計(jì),晚歸記錄,請(qǐng)假表申請(qǐng)審批,統(tǒng)計(jì)校內(nèi)人口流量情況,并集成短信推送系統(tǒng)進(jìn)行進(jìn)一步的消息服務(wù)。
圖2 智慧校園人臉識(shí)別系統(tǒng)功能模塊
圖3 系統(tǒng)數(shù)據(jù)流
智慧校園人臉識(shí)別系統(tǒng)在微信小程序端可分為三個(gè)角色入口:學(xué)生、輔導(dǎo)員和宿管,每個(gè)角色都有各自的職責(zé)與交互流程,活動(dòng)信息持久化至MySQL 數(shù)據(jù)庫(kù),通過(guò)SMS 接口進(jìn)行消息提醒推送,使用戶隨時(shí)接收活動(dòng)最新消息。Web 后臺(tái)瀏覽器端通過(guò)管理員負(fù)責(zé)基礎(chǔ)數(shù)據(jù)的導(dǎo)入導(dǎo)出,信息維護(hù)。
人臉識(shí)別系統(tǒng)的集成與實(shí)踐是本系統(tǒng)突出的第一大特色,使微信小程序前端、后臺(tái)Web 服務(wù)、人臉識(shí)別服務(wù)實(shí)現(xiàn)交互。其中,人臉注冊(cè)根據(jù)樓棟號(hào)來(lái)進(jìn)行信息注冊(cè),并且可以自己規(guī)定圖像屬性,在注冊(cè)時(shí)將學(xué)號(hào)進(jìn)行映射,以此完成學(xué)生信息注冊(cè);人臉識(shí)別的具體流程發(fā)生在學(xué)生進(jìn)行簽到/晚歸的時(shí)候,通過(guò)識(shí)別攝像頭前的用戶和服務(wù)器上用戶注冊(cè)的圖片進(jìn)行特征點(diǎn)比對(duì)。具體人臉識(shí)別流程如圖4 所示。
圖4 人臉識(shí)別流程
GPS 定位系統(tǒng)的集成與應(yīng)用是本系統(tǒng)突出的第二特色,通過(guò)GPS 進(jìn)行進(jìn)一步的定位鑒定,可有效防止學(xué)生異地簽到/認(rèn)證。
該GPS 定位系統(tǒng)采用的是騰訊地圖微信小程序JavaScript SDK 位置服務(wù),根據(jù)官方文檔,需要申請(qǐng)密鑰,還需要下載微信小程序JavaScript SDK,在微信開(kāi)發(fā)者工具中要添加request 合法域名(https://apis.map.qq.com)。
(1)小程序中引入sdk 核心類:(即js 文件)
例:var QQMapWX = require('../../libs/qqmap-wxjssdk.js');
(2)實(shí)例化api 核心類
qqmapsdk=new QQMapWX({
key:'申請(qǐng)的key'
});
(3)使用api 提供的方法來(lái)獲取當(dāng)前位置的經(jīng)緯度
qqmapsdk.reverseGeocoder({
success:function(res){
var res=res.result;
}
})
(4)小程序中獲取樓棟經(jīng)緯度和簽到范圍,然后調(diào)用API 提供的接口,計(jì)算當(dāng)前位置經(jīng)緯度和樓棟經(jīng)緯度的距離是否在簽到范圍內(nèi)(本項(xiàng)目中,在Web 后臺(tái)頁(yè)面中,設(shè)置了學(xué)生樓棟的經(jīng)緯度、考勤范圍),來(lái)判斷該學(xué)生是否在他所在的樓棟。
wx.request({
url:’https://apis.map.qq.com/ws/distance/v1/?mode=driving&from=’+當(dāng)前位置經(jīng)緯度+‘‘&to=’+樓棟經(jīng)緯度+’&key=’+你申請(qǐng)的密鑰
success:(res=>{
res.data.result.elements[0].distance//就是兩點(diǎn)之間的距離
})
})
SMS 模塊的集成是本系統(tǒng)的第三大特色,在用戶交互的過(guò)程中可能出現(xiàn)重要的通知業(yè)務(wù),本系統(tǒng)集成了SMS 模塊,通過(guò)自定義短信通知,將重大系統(tǒng)通知推送給用戶對(duì)應(yīng)的手機(jī)號(hào)。本項(xiàng)目中觸發(fā)SMS 調(diào)用的流程如下:在輔導(dǎo)員發(fā)布?xì)w校簽到活動(dòng)之后,系統(tǒng)根據(jù)輔導(dǎo)員管理的班級(jí),獲取所有班級(jí)的學(xué)生信息,再根據(jù)對(duì)應(yīng)學(xué)生的基本信息生成content,最后調(diào)用短信接口,逐條發(fā)送短信。
(1)SMS 消息推送模板如下:
A. header:【宿簽】
B. content(內(nèi)容)
(2)SMS 接口的定義如下:
public static void sendSms(String tel,String content);
其中,tel 表示待發(fā)送的手機(jī)號(hào),content 表示內(nèi)容。在實(shí)際實(shí)現(xiàn)的時(shí)候會(huì)在每個(gè)content 前面加上對(duì)應(yīng)的header。當(dāng)消息推送失敗的時(shí)候系統(tǒng)會(huì)記錄對(duì)應(yīng)的錯(cuò)誤日志。推送內(nèi)容的定義如下:
content=header+content;
log.info("短信推送:{} 內(nèi)容:{}",tel,content);
(3)使用JDK8 中的流處理進(jìn)行短信推送的調(diào)用流程如下:
studentIdChargeByCounselor
.forEach(id->{
Student student=studentService.selectById(id);
Counselor counselor = studentService.getCounselor(id);
String content = "您的輔導(dǎo)員" + counselor.getName()
+"發(fā)布了歸宿簽到活動(dòng),請(qǐng)前往App 查看詳
情";
SmsUtil.sendSms(student.getTel(),content);
});
使用Redis 緩存進(jìn)行緩存數(shù)據(jù),應(yīng)對(duì)高并發(fā)情況下的重復(fù)請(qǐng)求,是本系統(tǒng)實(shí)現(xiàn)的第四大特色,在沒(méi)有使用Redis 緩存之前,所有數(shù)據(jù)庫(kù)請(qǐng)求都需要在數(shù)據(jù)庫(kù)中進(jìn)行SQL 解析處理,并返回對(duì)應(yīng)SQL 語(yǔ)句內(nèi)容,在高并發(fā)情況下數(shù)據(jù)庫(kù)壓力過(guò)大會(huì)導(dǎo)致用戶體驗(yàn)感低下。統(tǒng)一緩存接口類以及方法的定義如下:
(1)cacheable()方法先判斷是否存在緩存,存在則直接返回緩存數(shù)據(jù),不存在則獲取數(shù)據(jù)庫(kù)數(shù)據(jù),再調(diào)用set()方法添加緩存數(shù)據(jù);
(2)set()方法添加緩存數(shù)據(jù),其中重載的方法有一個(gè)TimeUint 字段用來(lái)設(shè)置緩存失效時(shí)間;
(3)delete()方法刪除緩存數(shù)據(jù),其中重載的方法可以刪除多條或者刪除一條;
(4)get()方法根據(jù)key 獲取對(duì)應(yīng)的緩存數(shù)據(jù)。
其中,緩存在系統(tǒng)業(yè)務(wù)中的查詢流程如圖5 所示。
圖5 緩存查詢業(yè)務(wù)
Redis 緩存在系統(tǒng)中主要借鑒了AOP(面向切面)設(shè)計(jì)思想,在不修改原本業(yè)務(wù)邏輯代碼的前提下,使用切面代碼,對(duì)業(yè)務(wù)前后進(jìn)行處理,例舉添加用戶的緩存設(shè)計(jì),在添加用戶的業(yè)務(wù)方法返回之后,將返回?cái)?shù)據(jù)添加到Redis 緩存中,具體方法步驟如下所示。
(1)設(shè)計(jì)切入點(diǎn)
@Pointcut("execution(*com.qcq.wecheck.service.UserService.insert(..))&&args(user)")
public void insert(User user){}
(2)實(shí)現(xiàn)切入邏輯,判斷業(yè)務(wù)方法是否成功執(zhí)行,成功執(zhí)行則設(shè)置對(duì)應(yīng)緩存數(shù)據(jù)。具體AOP 實(shí)現(xiàn)如下所示:
@AfterReturning(value="insert(user)",argNames="user,success",returning="success")
public void afterInsert(User user,boolean success){
if(success){
String key = parseKey(USER,user.getOpenId
());
cacheSupport.set(key,user);
}
}
數(shù)據(jù)庫(kù)采用關(guān)系型數(shù)據(jù)庫(kù)MySQL,持久化框架采用MyBatis Plus,利用MyBatis Plus 的快速開(kāi)發(fā)特性,將系統(tǒng)所有的交互數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)庫(kù)。
數(shù)據(jù)庫(kù)表主要有:學(xué)生表、輔導(dǎo)員表、宿管表、樓棟表、設(shè)備表、活動(dòng)表、活動(dòng)記錄表、學(xué)院表、年級(jí)表、專業(yè)表、班級(jí)表、基礎(chǔ)信息表、管理員表,如圖6 所示。
圖6 系統(tǒng)數(shù)據(jù)庫(kù)關(guān)系圖
本項(xiàng)目小程序端實(shí)現(xiàn)效果如圖7 所示,人臉識(shí)別界面,主要用于晚歸登記;用戶的主頁(yè)面,顯示角色對(duì)應(yīng)活動(dòng);即時(shí)通訊界面,接收歷史消息記錄。此外,Web 前端管理員頁(yè)面如圖8 所示,主要包括學(xué)生、宿管員、輔導(dǎo)員基本信息管理頁(yè)面和宿舍樓棟位置信息管理頁(yè)面等。
圖7 小程序端主要界面
圖8 Web端頁(yè)面
通過(guò)人臉識(shí)別與GPS 定位記錄學(xué)生歸校簽到行為,記錄學(xué)生晚歸次數(shù)等操作節(jié)省了宿管與輔導(dǎo)員的工作量和提高了他們的管理效率。此外,通過(guò)智慧校園人臉識(shí)別系統(tǒng)的工作方式,可以將這些學(xué)校人員出入的記錄很好地保存在保障性強(qiáng)、容錯(cuò)率高、可追溯性強(qiáng)的數(shù)據(jù)庫(kù)。本項(xiàng)目是智慧校園建設(shè)的重要組成部分,系統(tǒng)的數(shù)據(jù)保存在阿里云上的MySQL 服務(wù)器上,用戶活動(dòng)報(bào)表等進(jìn)階文檔也可以存儲(chǔ)至阿里云OSS 平臺(tái)進(jìn)行永久性維護(hù),對(duì)今后的智慧校園開(kāi)發(fā)有一定的參考價(jià)值和借鑒意義。