摘" 要: 通過搭建硬件環境、安裝軟件環境、數據預處理、訓練模型、實時識別人臉表情等步驟,實現基于樹莓派4B的人臉表情實時識別系統。以樹莓派4B作為載體,所需軟件為Python3.7、OpenCV、Tensorflow和Keras。采用MiniVGG13卷積神經網絡模型訓練模型,在樹莓派上實時識別人臉表情,以實現人臉表情的分類并通過顯示器展示。該系統可以應用于人機交互、智能家居等多個領域。
關鍵詞: 樹莓派4B; MiniVGG13; TensorFlow
中圖分類號:TP273.4" " " " " 文獻標識碼:A" " " "文章編號:1006-8228(2023)12-171-03
Real time facial expression recognition system based on Raspberry Pi 4B
Wang Lei, Si Shengjie, Du Zhijie, Wu Hui, Xu Jin
(Computer and Information Engineering College of the Xinjiang Agricultural University, Urumqi, Xinjiang 830052, China)
Abstract: A real time facial expression recognition system based on Raspberry Pi 4B is realized through steps such as building hardware environment, installing software environment, data preprocessing, training models, and recognizing facial expressions in real time. Raspberry Pi 4B is used as the carrier, the required software is Python3.7, OpenCV, Tensorflow and Keras, and MiniVGG13 convolutional neural network model is used to train the model. Facial expressions are recognized and classified in real time on Raspberry Pi and displayed on the monitor. This system can be applied in multiple fields such as human-computer interaction and smart home.
Key words: Raspberry Pi 4B; MiniVGG13; TensorFlow
0 引言
心理學家研究發現,人們在表達信息時,僅有8%的信息會通過語言來展現,有35%的信息會通過語音語調等輔助語言表達,而人的面部表情所表達的信息會占到總信息量的57%[1]。早在二十世紀Ekman等專家就通過跨文化調研提出了七類基礎的表情[2]。直到1997年,我國才將人臉表情識別的研究成果引入[3]。近些年來,中國在表情識別技術上的發展突飛猛進,有多所知名大學和研究機構都參與了人臉表情識別相關課題的研究[4]。
樹莓派是一個價格低、體積小的微型電腦,將深度學習框架應用于樹莓派上,用來實現實時人臉表情識別系統,使應用場景更加靈活[5]。2014年牛津大學克倫·西莫尼揚和他的導師安德魯·齊塞爾曼提出VGG網絡模型結構,并在圖像網絡大規模視覺識別大賽的圖像分類任務中獲得第二名[6]。本案例我們采用FER2013數據集和MiniVGG13網絡模型訓練,在樹莓派4B上實現人臉表情實時識別,在人臉區域上方輸出概率值最大的人臉表情標簽。
1 人臉表情識別過程
Kaggle表情識別數據集(FER2013)是公開的數據集,該數據集包含訓練樣本圖像28709幅,校驗樣本圖像3589幅,測試樣本圖像3589幅。每一幅樣本為48×48像素的人臉灰度圖像,并且經過處理,確保人臉位于圖像的中部并占據圖像的主要面積。該數據集包含有7個面部表情類別(0=憤怒,1=厭惡,2=恐懼,3=快樂,4=悲傷,5=驚訝,6=中性)[7]。
⑴ 訓練模型:采用MiniVGG13網絡和Kaggle表情識別數據集FER2013訓練模型,MiniVGG13共有四個卷積塊、三個全連接。第一卷積塊有兩個卷積層卷積核為64核,第二卷積塊有兩個卷積層卷積核為128核,第三卷積塊有三個卷積層卷積核為256核,第四卷積塊有三個卷積層卷積核為512核,每個卷積塊后接一個最大化池,核為(2×2)、步長為(2×2),從而實現降維采樣。在卷積塊訓練完參數(每個核有一個偏置需要訓練)后有三個全連接層,每個全連接層使用了隨機失活進行正則化,以免模型過擬合。如表1所示。
⑵ 獲取圖像:圖像的獲取可以采用兩種方式,一種是平面照片,另一種是用攝像頭實時捕捉畫面,本系統主要采用外置攝像頭進行實時人臉表情檢測。代碼實現主要通過語句cv2.VideoCapture(0)獲取視頻幀,通過獲取的視頻幀圖像形成視頻流,從而達到實時檢測的目的。
⑶ 人臉檢測:該系統調用 OpenCV的人臉檢測模型對當前幀圖像進行檢測,對人臉區域進行標注,把檢測到的人臉特征傳入Faces變量,完成人臉檢測部分的功能。
⑷ 特征提取:該階段通過MiniVGG卷積神經網絡訓練人臉表情分類器提取模型提取人臉表情特征。使用Load_model()語句加載事先訓練好的模型,將檢測到的人臉特征導入人臉表情分類器模型。
⑸ 輸出結果:將識別結果在原圖像中進行標注。在人臉區域上方輸出概率值最大的人臉表情標簽。
2 環境搭建
在官網下載樹莓派系統Raspbian鏡像,借助燒錄輔助工具BalenaEtcher(燒錄成功率高)和格式化后的SD卡或U盤即可完成系統燒錄。在樹莓派上搭建虛擬環境(Recognition)需要安裝Python、Tensorflow2.0.0框架[10]、Keras2.3.1、OpenCV3.4.6等,搭建命令如下。
⑴ 搭建Python3.7
① 下載源碼并解壓
wgethttps://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
tar zxvf Python-3.7.1.tgz
② 編譯安裝Python
cd python-3.7.1
sudo ./configure
sudo make install
③ 檢測Python版本是否安裝成功
ls -al /usr/local/bin/python*
⑵ 搭建虛擬環境
virtualenv -p /usr/bin/python3.7 Recognition
source /home/pi/Recognition/bin/activate
⑶ 搭建Tensorflow2.0.0
pip install
tensorflow-2.0.0-cp37-none-linux_armv7l.whl
⑷ 搭建Keras2.3.1
pip install keras==2.3.1 -i
https://pypi.douban.com/simple
⑸ 搭建OpenCV3.4.6
pip install opencv-python==3.4.6.27 -i
https://pypi.douban.com/simple
3 樹莓派實現人臉表情識別
將訓練好的Model.h5模型以及Emotion.py文件拷貝到樹莓派上的Home/pi路徑下,使用命令:source /home/pi/Recognition/bin/activate開啟Recognition虛擬環境后,使用命令:python Emotion.py加載運行,進行實時人臉檢測。(Emotion.py主要內容為加載Model.h5模型,加載攝像頭后進行內部灰度化,檢測等操作)。
樹莓派左邊界面為七種表情概率顯示,右邊為實時人臉表情畫面捕捉以及表情標簽顯示,如圖1所示,此表情為Surprise的概率為85.09%,故在人臉區域上方輸出概率值最大的Surprise人臉表情標簽。同時在實時識別過程中,可以在命令行里輸入:htop觀察樹莓派的四個CPU內核的占用率和內存使用率,觀察各個進程的詳細參數,如圖2所示,左上區域為CPU、內存、Swap的使用情況,CPU負載適中,內存占用不到1G;右上區域為任務、線程、平均負載及系統運行時間的信息。平均負載部分提供了三個數字,這表示的是過去的5分鐘、10分鐘和15分鐘系統的平均負載。uptime標示的數字是從系統啟動到當前運行總時間。下方區域表示當前系統中的所有進程,故樹莓派4B實現人臉表情實時識別是切實可行的。
樹莓派人臉表情實時識別核心代碼Emotion.py:
import tensorflow as tf
face_detector=
cv2.CascadeClassifier('home/pi/opencv3.4.6/data/
haarcascades/haarcascade_frontalface_default.xml')
model=tf.keras.models.load_model(\"home/pi/model.h5\")
#加載model的方法
EMOTIONS=['Angry', 'Disgust', 'Scared', 'Happy',
'Sad', 'Surprise', 'Neutral']
capture=cv2.VideoCapture(0)
while True:
ret, frame=capture.read()
frame=imutils.resize(frame, width=300)
gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
canvas=np.zeros((240, 300, 3), dtype=\"uint8\")
frameClone=frame.copy()
rects=face_detector.detectMultiScale(
gray, scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
flags=cv2.CASCADE_SCALE_IMAGE)
if len(rects)gt;0:
rect=sorted(rects,
reverse=True,key=lambda x:(x[2]-x[0])*(x[3]-x[1]))[0]
(fX, fY, fW, fH)=rect
roi=gray[fY:fY+fH, fX:fX+fW]
roi=cv2.resize(roi,(48,48))
roi=roi.astype(\"float\")/255.0
roi=img_to_array(roi)
roi=np.expand_dims(roi, axis=0)
predicts=model.predict(roi)[0]
label=EMOTIONS[predicts.argmax()]
cv2.putText(frameClone, label, (fX, fY - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255),
1, cv2.LINE_AA)
cv2.rectangle(frameClone, (fX, fY), (fX + fW, fY + fH),
(0, 0, 255), 1, cv2.LINE_AA)
for (i, (emotion, prob)) in
enumerate(zip(EMOTIONS, predicts)):
text=\"{}:
{:.2f}%\".format(emotion, prob*100)
w=int(prob*300)
cv2.rectangle(canvas, (5, (i*32)+5),(5+w, (i*32)
+32), (0, 0, 255), -1)
cv2.putText(canvas,text, (10, (i*32)+23),
cv2.FONT_HERSHEY_SIMPLEX, 0.5,
(255, 255, 255), 1, cv2.LINE_AA )
cv2.imshow('Emotion Detection', frameClone)
cv2.imshow(\"Result\", canvas)
if cv2.waitKey(1)==27:
break
capture.release()
cv2.destroyAllWindows()
4 結束語
本設計是一種基于樹莓派的實時人臉表情識別系統,將深度學習框架應用于智能硬件樹莓派上,最終實現了基于樹莓派的七種人臉表情實時識別,包括高興、生氣、厭惡、害怕、傷心、驚奇、中性。與傳統的人臉表情識別算法相比, 采用深度學習框架的人臉表情識別能夠達到更高的識別精度。
此系統還有待提升之處,如厭惡表情識別不理想,原因在于厭惡表情數據量過少,要想提高其識別準確率還需進一步提高數據集的數據量。
隨著技術進一步成熟,基于樹莓派的人臉表情識別系統在算法層面也需不斷地優化和改進,提高系統的準確度、速度和性能。還可以探討將基于樹莓派的人臉表情識別系統與語音識別、動作捕捉和語義分析等技術結合在一起,實現多模態信息的融合,提高識別的準確性和應用廣度,如公共安全、交通、醫療等,市場需求會不斷增長,將促進行業和產品的發展。
參考文獻(References):
[1] Mpiperis I, Malassiotis S, Strintzis M G. Bilinear Models for
3-D Face and Facial Expression Recognition[J].IEEE Transactions on Information Forensics and Security,2008,3(3):498-511.
[2] 陳超,黃佳.基于深度學習的樹莓派人臉與表情識別系統
研究與設計[J].網絡安全技術與應用,2019(12):50-52.
[3] 牛犇,滕運江.基于樹莓派的實時人臉表情識別[J].電子技術
與軟件工程,2021(1):135-136.
[4] 郭釗汝,徐金,郭恒言,等.采用樹莓派4B識別新疆蘋果品種的
人工智能案例[J].計算機時代,2022(3):32-35.
[5] 朱明旱,李樹濤,葉華.基于稀疏表示的遮擋人臉表情識別
方法[J].模式識別與人工智能,2014,27(8):708-712.
[6] 史浩.基于卷積神經網絡的人臉表情識別研究[D].南昌:
南昌大學,2022.
[7] 程村.微表情識別綜述[J].計算機時代,2020(9):17-19,23.