人工智能綜合項目開發- 課件 項目五 情緒識別氛圍交互系統_第1頁
人工智能綜合項目開發- 課件 項目五 情緒識別氛圍交互系統_第2頁
人工智能綜合項目開發- 課件 項目五 情緒識別氛圍交互系統_第3頁
人工智能綜合項目開發- 課件 項目五 情緒識別氛圍交互系統_第4頁
人工智能綜合項目開發- 課件 項目五 情緒識別氛圍交互系統_第5頁
已閱讀5頁,還剩22頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

人工智能綜合項目開發項目五情緒識別氛圍交互系統成都職業技術學院項目分析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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論