




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
人工智能綜合項目開發項目五情緒識別氛圍交互系統成都職業技術學院項目分析01任務一模型部署02任務二氛圍燈控制系統構建03任務三人臉表情識別氛圍燈控制系統開發04項目五
情緒識別氛圍交互系統項目分析人臉表情識別氛圍燈控制系統首先通過攝像頭采集人臉圖像數據,然后利用深度學
習神經網絡算法實現人臉檢測及人臉表情識別,再根據人臉表情識別結果控制家居設備。1.學習神經網絡數學模型基本概念。
2.了解人臉表情識別算法模型部署。3.了解氛圍燈控制系統的構建。
項目背景及功能分析隨著以人工智能為代表的新一代信息技術的不斷進步,新技術融入加速智能家居產
業生態發展,推動智能家居進入發展新階段,場景、渠道、技術、產品、平臺的創新賦
予智能家居發展新契機。人工智能讓智能家居系統更具智慧;5G
搭建基礎連接設施,讓智能家居系統實現實時智能化在線管理。智能家居系統的產生將推動空間智能化的邏輯
預判力提升,給予更加精準、舒適、安全與人性化的反饋和升級,實現家居生活的數字
化、智能化、便捷化。智能家居場景的構建圍繞環境安全、娛樂、辦公等應用場景展開,如圖
5.1
所示。
智能家居安全需求首當其沖,智能門鎖、智能攝像機、智能傳感器等將成為智能家居的
關鍵支撐點,尤其是疫情期間,門禁管理、遠程監控等成為智能家居系統的熱點技術應
用場景。圖
5.1
智能家居系統結構智能家居平臺生態建設的目的是將人工智能、物聯網、云計算、大數據等新一代信
息技術能力下沉,通過頂層設計,賦能智能家居產品,提升用戶的體驗感,解決各智能終端之間,跨品牌、跨品類互聯互通、云端一體化、AI
交互賦能、數據交互等問題。智能家居場景中的數據通常涉及大量的用戶隱私信息,基于云端的智能家居系統往
往有泄露隱私以及穩定性不高的問題。因此考慮使用嵌入式
AI
端側推理平臺實現人工智
能技術本地部署,使得家居生活更加智能、安全、便利。本次人臉表情識別氛圍燈控制系統建設主要利用深度學習神經網絡算法實現人臉檢
測及人臉表情識別,然后根據識別結果控制氛圍燈、語音交互、LCD
顯示。實現人臉表情識別氛圍燈控制系統任務拆解如圖
5.2
所示,任務一人臉表情識別模
型部署,主要實現人臉表情識別模型訓練及模型部署;任務二氛圍燈控制系統構建,實
現了
RGB
氛圍燈控制;任務三人臉表情識別氛圍燈控制系統開發,實現了整個項目的設
計和開發。圖
5.0-1
人臉表情識別氛圍燈控制系統任務拆解任務一
模型部署(1)表情識別概述隨著深度學習領域的飛速發展以及智能設備的普及,人臉識別技術正在經歷前所未有的發展,人們對于人臉識別技術的討論也從未停歇。現如今,人臉識別精度已經超過
人類肉眼,同時大規模普及的軟硬件基礎條件也已經具備,人臉識別技術的應用市場和
領域需求龐大,基于這項技術的市場發展和具體應用正呈現蓬勃發展態勢。人臉表情識
別(facialexpression
recognition,
FER)作為人臉識別技術中的一個重要組成部分,
近年來在人機交互、安全、機器人制造、自動化、醫療、通信和駕駛領域得到了廣泛的
關注,成為學術界和工業界的研究熱點。“表情”是與我們日常生活密切相關的一個詞語,人臉表情是最直接、最有效的情
感識別模式。在人際溝通中,人們通過控制自己的面部表情,可以加強溝通效果。人臉
表情是傳播人類情感信息與協調人際關系的重要方式,據心理學家
A.Mehrabia
的研究表
明,在人類的日常交流中,通過語言傳遞的信息僅占信息總量的
7%,而通過人臉表情傳
遞的信息卻達到信息總量的
55%,可以這么說,我們每天都在對外展示自己的表情信息同
時也在接收別人的表情信息,那么表情是什么呢?早在
20
世紀
Ekman
等專家就通過跨文化調研提出了七類基礎表情,分別是生氣,害
怕,厭惡,開心,悲傷,驚訝以及中立。然而不斷地研究發現這七類基本表情并不能完
全涵蓋人們在日常生活中所表露的情感。針對該問題,2014
年在
PNAS
上發表的一篇文章
研究提出了符合表情的概念,并且指出多個離散的基礎表情能結合在一起從而形成復合
表情。例如:驚喜(高興+吃驚)、悲憤(悲傷+憤怒)等
15
種可被區分的復合表情。圖
5.3
人臉表情將人臉表情識別應用于智能家居場景中,可實現通過人臉表情控制氛燈或者音樂播
放等其他家居娛樂場景。基于深度卷積神經網絡的表情識別算法獲取表情信息,并將識別到的信息通過氛圍燈的方式,實時反映,增強用戶沉浸感。人臉表情識別常用方法包括利用人為設計特征和深度學習方法實現。1)人為設計特征各種人為設計的特征已經被用于
FER
提取圖像的外觀特征,包括
Gabor、LBP、LGBP、
HOG
和
SIFT。這些人為設計的方法在特定的小樣本集中往往更有效,但難以用于識別新
的人臉圖像,這給
FER
在不受控制的環境中帶來了挑戰。但其存在的問題也十分明顯,
首先,人為設計的特征太受制于設計的算法,設計太耗費人力。其次,特征提取與分類
是兩個分開的過程,不能將其融合到一個
end-to-end
的模型中。2)深度學習深度學習(DL,
Deep
Learning)是機器學習(ML,
Machine
Learning)領域中一個新的
研究方向,其中以基于卷積運算的神經網絡系統,即卷積神經網絡(CNN)應用最為廣泛。
下圖為
CNN
的網絡結構,CNN
可以有效地降低反饋神經網絡(傳統神經網絡)的復雜性,常見的
CNN
結構有
LeNet-5、AlexNet、ZFNet、VGGNet、GoogleNet、ResNet
等等,從這些
結構來講
CNN
發展的一個方向就是層次的增加,通過這種方式可以利用增加的非線性得
出目標函數的近似結構,同時得出更好的特征表達,但是這種方式入致了網絡整體復雜
性的增加,使網絡更加難以優化,很容易過擬合。圖
5.0-1
CNN
網絡結構(2)基于深度卷積神經網絡的表情識別實現人臉表情識別項目開發流程如圖所示,首先利用
OpenCV
人臉檢測級聯分類器實
現人臉檢測;然后調用表情識別模型實現人臉表情識別。本次案例能識別:“憤怒”,
“厭惡”,“恐懼”,“高興的”,“悲哀的”,“驚訝的”,“正常的”共
7
種人臉表情。圖
5.0-2
人臉表情識別開發流程1)模型設計采用深度卷積神經網絡來將人臉表情特征提取與表情分類融合到一個
end-to-end
的
網絡中。采用了兩個卷積層模塊加三層全連接層的結構來完成表情的識別與分類。卷積層模塊的每一個小塊是由一個卷積層,一個
Relu
層和一個最大池化層來構成。
而且每個模塊輸出端還加入了
LRN
局部響應歸一化函數,防止過擬合,增加了模型魯棒
性。損失函數使用了交叉熵損失函數,模型在全連接層之后,得到了每一類的輸出概率,
但此時概率是沒有經過歸一化的,通過一個
softmax
層,將概率歸一化到
1,更加易于數據處理。cross_entropy
=
tf.reduce_mean(tf.nn,softmax_cross_entropy_with_logits(labels=y_,
logits=y_conv))2)模型加載提前訓練好的模型文件儲存在項目路徑./resource/model_zoo
下。然后加載該模型實現人臉表情識別。本次使用.tflite
模型文件。#
加載
tflite
模型
,model_name:
模型名稱,model_path:
模型路徑class
TfliteRun:def
init
(self,
model_name="facial_model",
model_path=POSENET_MODEL):erpreter
=
tflite.Interpreter(model_path=model_path)
#
讀取模型self.interpreter.allocate_tensors()
self.model_name
=
model_name
#
獲取輸入層和輸出層維度#
分配張量self.input_details
=
erpreter.get_input_details()
self.output_details
=
erpreter.get_output_details()#
模型推理
def
inference(self,
img):input_data
=
img
self.interpreter.set_tensor(self.input_details[0]['index'],
input_data)
erpreter.invoke()
#
模型推理output_data1
=
erpreter.get_tensor(self.output_details[0]['index'])
#
獲取輸出層數據3)模型推理在模型訓練與加載完成后,只需將待預測數據輸入實現模型推理。這里輸入的數據
為待識別圖像中的人臉面部區域,轉換大小為
48*48
的圖像并轉換為形狀為
[1,
2304]的
張量數據。首先使用
OpenCV
的人臉檢測級聯分類器實現人臉檢測,然后調用.tflite
人臉表情
識別模型實現人臉表情識別,最后返回人臉位置信息及表情類別。
return
output_data1class
FacialExpression(object):def
init
(self,
fruit_model_path=FACIAL_DETECT_PATH,
\face_detect_path=
FACE_DETECT_PATH):#
OpenCV
人臉檢測級聯分類器self.classifier
=
cv2.CascadeClassifier(face_detect_path)#
人臉表情識別模型self.tflite_run
=
TfliteRun(model_path=fruit_model_path)
#
模型推理self.predictions
=
[]#
輸入數據預處理def
imgPreprocessing(self,
img):input_data
=
cv2.resize(img,
(48,
48))input_data
=
np.float32(input_data.copy())input_data
=
cv2.cvtColor(input_data,
cv2.COLOR_BGR2GRAY)
input_data
=
input_data[np.newaxis,
...,
np.newaxis]return
input_data
#
模型推理
def
inference(self,
img):predictions
=
Nonegray
=
cv2.cvtColor(img,
cv2.COLOR_BGR2GRAY)
#
圖像灰度化
#
調用人臉檢測級聯分類器檢測人臉faceRects
=
self.classifier.detectMultiScale(gray,
scaleFactor=1.2,\
minNeighbors=3,
minSize=(32,
32))if
len(faceRects)
>
0:x,
y,
w,
h
=
faceRects[0]face_roi
=
img[y:y
+
w,
x:x
+
h]#
人臉
ROI
提取input_data
=
self.imgPreprocessing(face_roi)
#
獲取測試圖像prediction
=
self.tflite_run.inference(input_data)
#
模型推理,識別人臉表情predictions
=
[(x,
y,
w,
h),
prediction]#
返回人臉表情識別結果,包括人臉位置和人臉表情類別return
predictions輸入待識別的人臉數據到表情識別模型中,即可得到所有表情類別的置信度,也即是不同表情的概率,概率最大的表情類別即為當前輸入人臉圖像的識別結果。最后利用人臉檢測模型返回的人臉位置及人臉表情類別繪制出矩形框及人臉表情類型。#
檢測結果繪制def
recImgDis(img,
predictions):
label
=
""color
=
(0,
255,
0)
#
定義繪制顏色
if
not
predictions
is
None:x,
y,
w,
h
=
predictions[0]cv2.rectangle(img,
(x,
y),
(x
+
h,
y
+
w),
color,
2)
#
繪制矩形框
label
=
ai_cfg.LABELS_LIST[np.argmax(predictions[1])]
img
=
putText(img,
label,
org=(50,
50))
#
繪制表情識別結果return
img,
label任務二
氛圍燈控制系統構建(1)系統概述本次氛圍燈控制系統主要使用智能節點核心控制板,LCD
顯示屏,全彩
RGB
燈,語音
交互模塊等硬件。核心控制板接收到人臉表情識別結果指令,再通過串口控制其他節點
做出響應。(2)系統硬件模塊氛圍燈控制系統硬件模塊主要包括:核心控制模塊、智能語音交互模塊、全彩
RGB
燈、
LCD
顯示屏。(3)系統實現原理氛圍燈控制系統開發流程如圖
5.6
所示,主要實現嵌入式硬件部分開發,根據軟件
部分下發的指令實現硬件設備控制。軟件部分調用攝像頭檢測人臉,將檢測到的人臉進
行表情識別;例如識別到的是開心的表情,軟件部分則會通過
WiFi
協議下發快樂的指令
給智能節點核心控制板,智能節點核心控制板通過串口控制全彩
RGB
燈顯示綠色的燈光,
并通過串口控制智能語音交互模塊播放快樂的音樂,在
LCD
顯示屏上顯示一個笑臉的表
情。圖
5.6
人臉表情識別氛圍燈控制開發詳細流程任務三
人臉表情識別氛圍燈控制系統開發(1)人臉表情識別氛圍燈控制系統開發概述人臉表情識別氛圍燈控制系統開發流程如圖
5.7
所示,首先通過攝像頭采集人臉圖
像數據,然后利用深度學習神經網絡算法實現人臉檢測及人臉表情識別,再根據人臉表
情識別結果控制家居設備。圖
5.7
人臉表情識別氛圍燈控制開發詳細流程實現人臉表情識別氛圍燈控制系統開發分別實現圖像獲取插件、模型推理插件、可
視化交互界面插件、嵌入式系統數據交互插件。如圖
5.8
所示,其中圖像獲取插件主要實現攝像頭獲取人臉視頻,人臉圖像消息隊列傳遞等功能;模型推理插件主要實現人臉
圖像數據預處理,人臉表情識別模型推理,解析表情識別結果控制氛圍燈,以及傳遞人
臉表情識別結果并開啟氛圍燈控制執行線程;嵌入式系統數據交互插件主要根據人臉表
情識別結果下發控制指令至嵌入式設備端。圖
5.8
人臉表情識別氛圍燈控制系統開發功能插件(2)人臉表情識別模型推理功能插件構建人臉表情識別模型推理功能插件主要實現人臉圖像獲取功能插件、人臉表情識別模
型推理插件。1)人臉圖像獲取插件實現首先實現第一個功能插件,人臉圖像獲取插件。調用攝像頭獲取人臉圖像數據,獲
取人臉表情識別結果消息隊列,并調用結果繪制函數實現人臉表情結果繪制到原圖像中。class
VideoThread():def
init
(self,
camera='/dev/video10',
q_flask:Queue=None,
q_img:Queue=None,
q_rec:Queue=None,
full_dict=None):log.info(camera)self.cap
=
setCamera(camera)
#
網絡攝像頭self.full_dict
=
full_dict
def
run(self):pricet
=
Nonewhile
True:
if
self.cap
!=
"":self.q_flask
=
q_flask
self.q_img
=
q_img
self.q_rec
=
q_rec#
消息隊列傳遞#
消息隊列傳遞原始圖像到識別插件
#
消息隊列傳遞
AI
模型的推理結果ret,
frame
=
self.cap.read()
#
獲取攝像頭圖像frame
=
cv2.resize(frame,
(ai_cfg.CAM_WIDTH,
ai_cfg.CAM_HEIGHT))#
原始圖像傳遞if
not
self.q_img.full()
and
not
frame
is
None:self.q_img.put(bytearray(frame))if
not
self.q_rec.empty():pricet
=
self.q_rec.get()
#
獲取人臉表情識別結果#
繪圖識別結果frame,
label
=
recImgDis(frame,
pricet)#
將表情識別結果寫入全局共享數據中self.full_dict[config.FACIAL_STATIC]
=
label#
傳遞繪制后的圖像if
not
self.q_flask.full()
and
not
frame
is
None:self.q_flask.put(bytearray(frame))2)人臉表情識別模型推理插件實現然后實現人臉表情識別模型推理插件。在任務一中已經實現了人臉表情識別模型部署,下面就可以直接創建人臉表情識別模型推理插件,調用表情識別方法實現人臉表情識別,并將識別結果進行傳遞。class
ModelRecThread():def
init
(self,
q_img:Queue=None,
q_rec:Queue=None):self.q_img
=
q_img#
消息隊列傳遞原始圖像到識別插件self.q_rec
=
q_rec#
消息隊列傳遞
AI
模型的推理結果self.facial_expression_rec
=
FacialExpression(fruit_model_path=ai_cfg.FACIAL_DETECT_PATH,face_detect_path=ai_cfg.FACE_DETECT_PATH,)
#
實例化表情識別對象def
run(self):while
True:if
self.q_img.empty():continueelse:image
=
self.q_img.get()
#
待檢測人臉圖像獲取if
image:image
=
np.array(image).reshape(ai_cfg.CAM_HEIGHT,
ai_cfg.CAM_WIDTH,
3)else:breakfacial_expression_pricet
=
self.facial_expression_rec.inference(image)
#
模型推理if
self.q_rec.full():continueelse:self.q_rec.put(facial_expression_pricet)
#
識別結果傳遞(3)氛圍燈控制系統功能插件構建氛圍燈控制系統主要根據人臉表情識別結果控制
RGB
燈。首先根據識別結果判斷是否需要打開
RGB
燈,若需要打開則根據不同的表情開啟不同的顏色燈光,否則不打開
RGB燈。將人臉表情識別結果發送至嵌入式端控制
RGB
燈參考代碼如下:
def
embeddedDataThreadRun(client,
q_send=None,
full_data=None):"""嵌入式系統數據發送與接收線程啟動:param
client:
wifi/usart
的對象:param
q_send:
發送數據的消息隊列:param
full_data:
全局共享數據
dict:return:"""try:read_thread
=
DataReadThread(client,
full_data)send_thread
=
DataSendThread(client,
q_send)#
read_thread.start()send_thread.start()log.info("嵌入式系統數據接收和發送線程啟動成功!!")except:log.error("嵌入式系統數據接收和發送線程啟動失敗!!")class
DataSendThread(threading.Thread):def
init
(self,
client,
q_send:
mp.Queue):"""嵌入式系統控制指令發送線程:param
client:
wifi/usart
的對象
用于獲取
send
函數
log.info(dat)
根據不同的人臉表情識別結果向嵌入式控制端發送氛圍燈控制指令。嵌入式系統控
制指令包括:數據包頭、表情識別標志位、音樂控制標志位、包尾。表情識別標志位類
型包括:01:紅色燈光(生氣)、02:綠色燈光(驚訝)、05:橙色燈光(害怕)、03:
藍色燈光(開心)、04:黑色燈光(自然)、06:黃色燈光(傷心)、07:靛青燈光"""threading.Thread.
init
(self)self.q_send
=
q_sendself.client
=
clientself.flag
=
Truedef
setFlag(self,
flag:
bool):self.flag
=
flagdef
run(self):#
獲取消息隊列并發送while
self.flag:if
self.q_send.empt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省啟東市2025年高三下北師大版英語試題期末考試試題含解析
- 四川省宜賓市興文縣高級中學2025屆高三下第二次月考試題含解析
- 南通市崇川區啟秀中學2024-2025學年初三第三次聯考(四川版)英語試題試卷含答案
- 內蒙古鄂爾多斯一中2024-2025學年高三年級下學期第一次診斷考試語文試題含解析
- 長沙二手房交易合同示范文本
- 業績合作協議范本
- 花園洋房買賣合同書
- 變電站防雷接地安裝工程合同
- 山東省聊城市2024-2025學年高一下學期期中考試歷史試題(含答案)
- 廣東省中山市小欖鎮2024-2025學年七年級下學期期中地理試題(含答案)
- (三診)綿陽市高中2022級高三第三次診斷性考試 歷史試卷A卷(含答案)
- 麻醉專業考試試題及答案
- 湖南省長沙市長郡教育集團2024-2025學年七年級下學期期中生物試題
- JJF 2221-2025導熱系數瞬態測定儀校準規范
- 山東省高中名校2025屆高三4月校際聯合檢測大聯考生物試題及答案
- 公司兩班倒管理制度
- 汽車漆面保護膜安裝協議
- 2025年武漢數學四調試題及答案
- 綠化養護服務投標方案(技術標)
- 中國紡織文化智慧樹知到期末考試答案2024年
- (正式版)HGT 6313-2024 化工園區智慧化評價導則
評論
0/150
提交評論