朱林,莊麗,弭娜,操鳳萍,李彩虹,翟玉慶
(東南大學(xué)成賢學(xué)院,江蘇南京,210000)
伴隨著當(dāng)今計算機網(wǎng)絡(luò)技術(shù)的不斷發(fā)展和完善,網(wǎng)絡(luò)教育具備了多種不可替代的優(yōu)勢,例如海量的多媒體資源、高自由度的師生互動、強大的自主學(xué)習(xí)性以及便捷的管理性能。在線教學(xué)作為當(dāng)前熱門的網(wǎng)絡(luò)服務(wù)之一,它擁有不受時間、不受空間等等因素的限制的優(yōu)點,為遠(yuǎn)程教學(xué)的開展提供了極大的便利。但其因為不同于傳統(tǒng)的教學(xué)方式,無法實時獲得教學(xué)效果的反饋也成為了遠(yuǎn)程線上教學(xué)的一大弊端。教師也無法及時根據(jù)相關(guān)反饋對教學(xué)內(nèi)容和教學(xué)方法進行持續(xù)改進。
課堂教學(xué)的實時反饋是教學(xué)過程中的一個重要組成部分,可以針對當(dāng)今線上教學(xué)的需求,結(jié)合現(xiàn)有的智能監(jiān)控設(shè)備,設(shè)計基于學(xué)生面部表情分析的線上課堂反饋機制和評價方法。通過這種方法,不僅可以實時智能地檢測學(xué)生的面部表情,進行采樣分析,推算出學(xué)生上課的幾種狀態(tài)(困惑、驚訝、開心、一般、傷心、生氣),并且可以進一步評估學(xué)生的參與程度和專注程度以及他們的活躍時間;此方法不但可以監(jiān)測和分析線上課堂中學(xué)生的學(xué)習(xí)狀態(tài),還能有效地掌握課堂教學(xué)節(jié)奏。該方法還可以跟蹤特定地學(xué)生對象,對某個學(xué)生個體進行個性化的學(xué)習(xí)狀態(tài)評估從而及時調(diào)整學(xué)習(xí)內(nèi)容并解決學(xué)習(xí)中的問題。也方便老師及時對自己的教學(xué)內(nèi)容和教學(xué)方法進行持續(xù)改進。
本在線學(xué)習(xí)系統(tǒng)通過表情識別來達(dá)到教與學(xué)持續(xù)改進的目的。當(dāng)用戶登錄系統(tǒng)進行課程視頻學(xué)習(xí)的時候,學(xué)習(xí)設(shè)備的攝像頭會自動打開并捕捉用戶的實時表情數(shù)據(jù)。在視頻觀看的過程當(dāng)中,學(xué)習(xí)系統(tǒng)會新打開一個線程,將表情圖片數(shù)據(jù)傳送給表情分析服務(wù)器,表情分析服務(wù)器會分析用戶的每一張表情圖片,并將相關(guān)的表情信息存入到后臺的數(shù)據(jù)庫中。系統(tǒng)主要包括:表情圖像的獲取、表情圖像的預(yù)處理、表情特征的提取和表情分類及最終展示。本系統(tǒng)主要分為下面四個模塊:
(1)登錄注冊模塊:用戶想使用系統(tǒng)需先登錄,因而包含用戶注冊和登錄驗證模塊,用戶需要通過網(wǎng)頁來進行帳號登錄或者進行新帳號的注冊,因此只有用戶的帳號和密碼驗證通過后才能成功進入系統(tǒng)主界面。
(2)課程模塊:此模塊主要有兩部分,一部分是課程的在線學(xué)習(xí),另一部分是視頻的上傳和刪除,且系統(tǒng)中課程模塊是按照用戶區(qū)分的,用戶擁有查看課程、上傳課程、課程管理等功能。用戶點擊課程會進入到視頻播放頁,來播放此課程的視頻,用戶也可以通過搜索相應(yīng)課程資源來獲得課程列表。
(3)人臉表情識別模塊:系統(tǒng)運行時,表情識別模塊啟動,自動檢測人臉來分析人臉表情;人臉表情符號的識別主要在以下四個階段進行:接收表情符號,檢查人臉,提取人臉特征,對人臉進行分類。如圖1所示。
圖1 人臉表情識別流程圖
完整的表情包識別包括靜態(tài)表情包識別和動態(tài)表情包識別序列。靜態(tài)人臉表情包識別就是通常所說的表情識別,動態(tài)表情包識別序列是基于PHN等視頻片段的。
①獲取人臉圖片:首先需要在前端開發(fā)中使用OpenCv實現(xiàn)實時的讀取攝像頭,用攝像頭檢測出來的信息檢測人臉,再使用Haar算法把每一張中的每一幀找出人臉,并且將人臉的圖片切出來,去除不需要檢測的部分。這樣就獲取到需要的人臉圖片。
②進行網(wǎng)絡(luò)訓(xùn)練:創(chuàng)建CNN網(wǎng)絡(luò),用多個模式識別進行網(wǎng)絡(luò)訓(xùn)練。用獲取得到的大量人臉圖片放進CNN網(wǎng)絡(luò)中,通過訓(xùn)練,得到需要的識別分類模式,調(diào)節(jié)完畢就可以使用了。
③表情識別:把前面獲取到重要部分的人臉圖片提交到訓(xùn)練好的CNN網(wǎng)絡(luò)中去預(yù)測并判斷表情,通過人類的表情分類,主要分為7種類型,高興、生氣、驚呀、恐懼、正常、厭惡和悲傷等。
④評價:通過表情識別的結(jié)果,輸出人類的7中表情類別,得到結(jié)果,及時反饋給用戶。評價具有時效性,不及時反饋會直接影響評價的效果,所以要實時反饋教學(xué)評價,實現(xiàn)教師能力和教學(xué)效果的提升。
(4)個人中心模塊:包括用戶個人信息展示,個人信息修改。用戶可通過點擊自己的頭像,進入到個人信息查詢和修改的界面,用戶可根據(jù)自身的特定需求去修改登錄密碼以及個人信息從而提升系統(tǒng)使用的舒適度。
本系統(tǒng)用戶通過登錄授權(quán),進入系統(tǒng),對課程進行觀看學(xué)習(xí),同時客戶端人臉表情識別窗口開啟,能夠采集到人臉信息并進行表情分類。執(zhí)行的流程如圖2所示:
圖2 系統(tǒng)執(zhí)行時序圖
系統(tǒng)內(nèi)部總共分為交互層、核心業(yè)務(wù)層、數(shù)據(jù)層三層結(jié)構(gòu),組合和關(guān)聯(lián)內(nèi)容如下:
(1)交互層包括了用戶界面,用戶通過用戶界面或者命令行界面選擇編程的代碼地址,通過代碼指令出現(xiàn)界面,在交互層中選擇需要識別的圖片。
(2)核心業(yè)務(wù)層包括了人臉采集模塊、模型創(chuàng)建與訓(xùn)練模塊、表情識別模塊、評價模塊,在核心業(yè)務(wù)層中把交互層中傳入的圖片通過人臉采集模塊進行人臉的采集,對人臉進行檢測和定位;模型創(chuàng)建與訓(xùn)練模塊中定義相應(yīng)的CNN完成對傳入圖片的進一步識別,選出適當(dāng)大小的人臉區(qū)域;把在模型中的人臉區(qū)域放入表情識別模塊中,將識別的結(jié)果映射出學(xué)生的狀態(tài)表情分類中;最后輸出的結(jié)果顯示到評價模塊中,分析學(xué)生的課堂情況。
(3)數(shù)據(jù)層包括了數(shù)據(jù)庫,把數(shù)據(jù)通過表情識別模塊計算處理之后將會自動存入數(shù)據(jù)庫之中。
整個系統(tǒng)的關(guān)鍵在于核心業(yè)余層中的模型創(chuàng)建與訓(xùn)練模塊,對于可以識別人臉表情的系統(tǒng)最主要的就是對表情的創(chuàng)建和訓(xùn)練,才能判別出多種表情,但是一個模塊并不能完全完成一個系統(tǒng),這都需要靠各個層的分析處理才能逐步完成本系統(tǒng)此環(huán)節(jié)需要的結(jié)果。
(1)運用OpenCV庫的Haar算法,把圖片中的人臉特征量化,檢測到人臉,把人臉和非人臉區(qū)分開來,并且把圖片中人臉的位置切出來,切出來的圖片尺寸改成設(shè)定好的尺寸,為了方便輸入CNN模型中方便識別,此Haar算法的實現(xiàn)代碼如下:
faces=face_detection.detectMultiScale(gray_image,1.3,5) # 獲取到人臉
for face_coordinates in faces:
x1, x2, y1, y2 = apply_offsets(face_coordinates,emotion_offsets) ## 獲取人臉位置
gray_face = gray_image[y1:y2, x1:x2] # 將人臉位置從原始灰度圖中切出
try:
gray_face=cv2.resize(gray_face, (emotion_target_size)) # 將人臉圖片轉(zhuǎn)換尺寸為 64*64
(2)通過已經(jīng)預(yù)處理過的圖像獲得人臉數(shù)據(jù),運用已經(jīng)訓(xùn)練過的模型,卷積神經(jīng)網(wǎng)絡(luò)CNN模型進行表情的預(yù)測,識別圖像中學(xué)生的表情,其中主要的代碼如下:
emotion_model_path = ‘./XCEPTION.hdf5’ # 表情預(yù)測模型,卷積神經(jīng)網(wǎng)絡(luò)CNN的模型
emotion_labels ={0:’angry’,1:’disgust’,2:’fear’,3:’happy’,
4:’sad’,5:’surprise’,6:’neutral’} # 設(shè) 置對表情的分類
gray_face = preprocess_input(gray_face, True) ##整理頭像數(shù)據(jù)
gray_face = np.expand_dims(gray_face, 0)
gray_face = np.expand_dims(gray_face, -1)
emotion_prediction = emotion_classifier.predict(gray_face)# 表情預(yù)測器進行預(yù)測表情
emotion_probability = np.max(emotion_prediction)
emotion_label_arg = np.argmax(emotion_prediction)
emotion_text = emotion_labels[emotion_label_arg]## 獲取表情
emotion_window.append(emotion_text)
(3)把需要識別的視頻和實時識別的攝像頭讀取視頻幀數(shù),把視頻也進行灰度化處理,把視頻幀轉(zhuǎn)換成可處理的圖像,對它們進行預(yù)處理,實現(xiàn)的代碼如下:
emotion_target_size = emotion_classifier.input_shape[1:3] ## 獲取卷積神經(jīng)網(wǎng)絡(luò)的輸入大小
# 設(shè)置獲取視頻流
cv2.namedWindow(‘window_frame’) ## 創(chuàng)建一個顯示窗口
video_capture = cv2.VideoCapture(“1.webm”) #這里傳入”1.webm” 就是播放1.webm視頻 如果傳入整數(shù)0 就是打開攝像頭
while True:
bgr_image=video_capture.read()[1] ## 讀取視頻幀
gray_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2GRAY) # 轉(zhuǎn)換視頻幀為灰度圖像
rgb_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2RGB) # 轉(zhuǎn)換視頻幀為RGB圖像
(4)通過識別后的圖片、視頻和實時攝像頭進行評價模塊,將CNN檢測出來的表情聚合計算起來,得到的結(jié)果標(biāo)出人臉框并且不同的表情類別用不同的顏色顯示出來,實現(xiàn)代碼如下所示:
if len(emotion_window) > frame_window:
emotion_window.pop(0)
try:
emotion_mode=mode(emotion_window)##聚合計算表情
except:
continue
# 下面可以設(shè)置不同表情使用不同顏色的框
if emotion_text ==‘a(chǎn)ngry’:
emotion_text =“XX”(XX代表相關(guān)表情)
本文針對目前在線學(xué)習(xí)系統(tǒng)中存在的無反饋的問題,提出了使用人的面部特征進行分析獲得學(xué)習(xí)反饋,實現(xiàn)基于表情識別的在線學(xué)習(xí)系統(tǒng),從而指導(dǎo)教與學(xué)的持續(xù)改進。面部表情的識別分析,不僅僅是對傳統(tǒng)反饋模式的打破和革新,突破了其主觀性和自我性,同時它也更加及時,有利于教師根據(jù)線上課堂情況對教學(xué)安排進行調(diào)整。相信在不久的將來,基于表情識別和持續(xù)改進的各項應(yīng)用必定能發(fā)揮很大的作用。