人工智能綜合項(xiàng)目開發(fā)- 課件 項(xiàng)目七 人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)模擬實(shí)驗(yàn)_第1頁
人工智能綜合項(xiàng)目開發(fā)- 課件 項(xiàng)目七 人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)模擬實(shí)驗(yàn)_第2頁
人工智能綜合項(xiàng)目開發(fā)- 課件 項(xiàng)目七 人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)模擬實(shí)驗(yàn)_第3頁
人工智能綜合項(xiàng)目開發(fā)- 課件 項(xiàng)目七 人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)模擬實(shí)驗(yàn)_第4頁
人工智能綜合項(xiàng)目開發(fā)- 課件 項(xiàng)目七 人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)模擬實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

人工智能綜合項(xiàng)目開發(fā)項(xiàng)目七人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)模擬實(shí)驗(yàn)成都職業(yè)技術(shù)學(xué)院項(xiàng)目分析01任務(wù)一人體姿態(tài)檢測(cè)模型部署02任務(wù)二人體姿態(tài)動(dòng)作識(shí)別算法實(shí)現(xiàn)03項(xiàng)目七

人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)模擬實(shí)驗(yàn)項(xiàng)目分析人體關(guān)鍵點(diǎn)檢測(cè)算法原理,實(shí)現(xiàn)人體姿態(tài)檢測(cè),構(gòu)建跌倒預(yù)警系統(tǒng)實(shí)現(xiàn)人體姿態(tài)識(shí)

別預(yù)警系統(tǒng),然后構(gòu)建

web

顯示界面對(duì)人體姿態(tài)識(shí)別結(jié)果進(jìn)行可視化。1.學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)數(shù)學(xué)模型基本概念。

2.了解人體姿態(tài)行為動(dòng)作檢測(cè)算法與模型部署。

3.了解人體姿態(tài)行為動(dòng)作的動(dòng)作識(shí)別算法實(shí)現(xiàn)。4.掌握利用人體姿態(tài)行為動(dòng)作的動(dòng)作識(shí)別模型進(jìn)行基于姿態(tài)檢測(cè)的危險(xiǎn)行為識(shí)別系

統(tǒng)項(xiàng)目開發(fā)。人體姿態(tài)識(shí)別的應(yīng)用范圍十分廣泛,可用于人機(jī)交互、影視制作、運(yùn)動(dòng)分析、游戲

娛樂等各種領(lǐng)域。人們可以利用人體姿態(tài)識(shí)別定位人體關(guān)節(jié)點(diǎn)運(yùn)動(dòng)軌跡并記錄其運(yùn)動(dòng)數(shù)據(jù),

實(shí)現(xiàn)

3D

動(dòng)畫模擬人體運(yùn)動(dòng)來制作電影電視;也可以通過記錄的軌道和數(shù)據(jù)對(duì)運(yùn)動(dòng)進(jìn)

行分析;例如體育健身:根據(jù)人體關(guān)鍵點(diǎn)信息,分析人體姿態(tài)、運(yùn)動(dòng)軌跡、動(dòng)作角度等,

輔助運(yùn)動(dòng)員進(jìn)行體育訓(xùn)練,分析健身鍛煉效果,提升教學(xué)效率;娛樂互動(dòng):視頻直播平

臺(tái)、線下互動(dòng)屏幕等場(chǎng)景,可基于人體檢測(cè)和關(guān)鍵點(diǎn)分析,增加身體道具、體感游戲等

互動(dòng)形式,豐富娛樂體驗(yàn);安防監(jiān)控:實(shí)時(shí)監(jiān)測(cè)定位人體,判斷特殊時(shí)段、核心區(qū)域是

否有人員入侵;基于人體關(guān)鍵點(diǎn)信息,進(jìn)行二次開發(fā),識(shí)別特定的異常行為,及時(shí)預(yù)警

管控等功能。人體姿態(tài)識(shí)別目前最為廣泛的應(yīng)用是在于智能監(jiān)控中。智能監(jiān)控與一般普通監(jiān)控的

區(qū)別主要在于將人體姿態(tài)識(shí)別技術(shù)嵌入視頻服務(wù)器中,

運(yùn)用算法,

識(shí)別、判斷監(jiān)控畫

面場(chǎng)景中的動(dòng)態(tài)物體——行人、車輛的行為,

提取其中關(guān)鍵信息,

當(dāng)出現(xiàn)異常行為時(shí),

及時(shí)向用戶發(fā)出警報(bào)。世界衛(wèi)生組織報(bào)告指出,全球每年有

30

余萬人死于跌倒,其中一半是

60

歲以上老人。在我國(guó),跌倒已成為

65

歲以上老人傷害死亡的“頭號(hào)殺手”。

對(duì)于老人來說,摔倒

無疑是對(duì)健康的一大威脅。據(jù)北京市疾控中心公布的抽樣調(diào)查結(jié)果顯示:60

69

歲老年

人每年跌倒發(fā)生率為

9.8%,70

79

歲為

15.7%,80

歲以上為

22.7%,每增長(zhǎng)

10

歲,跌

倒發(fā)生率會(huì)升高

0.5

倍左右。隨著目前中國(guó)人口老齡化日漸嚴(yán)重,所以在固定場(chǎng)景下的人體姿態(tài)識(shí)別技術(shù)可以應(yīng)

用于家庭監(jiān)控,

如為了預(yù)防獨(dú)居老人摔倒情況的發(fā)生,

可以通過在家中安裝識(shí)別摔倒

姿態(tài)的智能監(jiān)控設(shè)備,

對(duì)獨(dú)居老年人摔倒情況的識(shí)別,

當(dāng)出現(xiàn)緊急情況時(shí)及時(shí)作出響

應(yīng)。人類社會(huì)的不斷發(fā)展與生活質(zhì)量的不斷提升,

視頻監(jiān)控已經(jīng)被非常廣泛地應(yīng)用到各

個(gè)領(lǐng)域,

人們生活空間的不斷擴(kuò)大和延展,

公共及私人場(chǎng)所的領(lǐng)域也在隨之發(fā)展,

到各種突發(fā)情況的概率在不斷增加,

尤其是在公共場(chǎng)所,

由于其監(jiān)控難度較大,

人口

密集。通過簡(jiǎn)單的監(jiān)控,

已經(jīng)無法滿足當(dāng)今社會(huì)發(fā)展的要求,

簡(jiǎn)單地依靠值班人員的

堅(jiān)守,

想要真正做到人體姿態(tài)預(yù)測(cè)還有較大難度,

對(duì)于社會(huì)資源也是一種潛在的浪費(fèi)。因此,

選用智能監(jiān)控系統(tǒng)已經(jīng)成為當(dāng)前社會(huì)解決這一根本問題的必由之路,

在社交的

過程中,

人類除了語言以外其肢體動(dòng)作也能傳遞一定的信息,

通過較為科學(xué)合理的計(jì)

算機(jī)預(yù)測(cè)能夠?qū)崿F(xiàn)動(dòng)作的含義解讀,

并且更好幫助人們實(shí)現(xiàn)社交。本次項(xiàng)目案例主要應(yīng)用于養(yǎng)老院或者智能家居里面的應(yīng)用場(chǎng)景,其主要功能分為硬

件和軟件兩部分:1)硬件部分:STM32F407

核心控制板、姿態(tài)檢測(cè)傳感器、LCD

顯示屏、蜂鳴報(bào)警器;2)軟件部分:TensorFlow

深度科學(xué)框架

MoveNet

姿態(tài)檢測(cè)模型和

OpenCV

計(jì)算機(jī)視

覺技術(shù)。當(dāng)姿態(tài)檢測(cè)傳感器檢測(cè)到人體姿態(tài)為跌倒時(shí),會(huì)自動(dòng)觸發(fā)報(bào)警系統(tǒng),并將跌倒姿勢(shì)

顯示在

LCD

屏上。實(shí)現(xiàn)人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)分為三個(gè)任務(wù):任務(wù)一主要實(shí)現(xiàn)人體姿態(tài)檢測(cè)模型部署

功能;任務(wù)二主要實(shí)現(xiàn)人體姿態(tài)動(dòng)作識(shí)別算法功能;任務(wù)三主要實(shí)現(xiàn)人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)完整功能,如圖

7.1

所示:圖

7.1

人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)項(xiàng)目開發(fā)框圖任務(wù)一

人體姿態(tài)檢測(cè)模型部署本次實(shí)驗(yàn)使用

TensorFlow

搭建姿態(tài)檢測(cè)模型

MoveNet

來實(shí)時(shí)識(shí)別人體姿態(tài)動(dòng)作,例

如站立、行走、奔跑、蹲下,跳躍、摔倒等動(dòng)作;并將人體姿態(tài)監(jiān)測(cè)模型進(jìn)行端側(cè)部署。(1)人體姿態(tài)識(shí)別概述人體姿態(tài)主要分為基于計(jì)算機(jī)視角的識(shí)別和基于運(yùn)動(dòng)捕獲技術(shù)的識(shí)別。基于計(jì)算機(jī)

視覺的識(shí)別主要通過各種特征信息來對(duì)人體姿態(tài)動(dòng)作進(jìn)行識(shí)別,

比如視頻圖像序列、人

體輪廓、多視角等。基于計(jì)算機(jī)視覺的識(shí)別可以比較容易獲取人體運(yùn)動(dòng)的軌跡、輪廓等

信息,

但沒有辦法具體實(shí)現(xiàn)表達(dá)人體的運(yùn)動(dòng)細(xì)節(jié),

以及容易存在因遮擋而識(shí)別錯(cuò)誤等

問題。基于運(yùn)動(dòng)捕獲技術(shù)的人體姿態(tài)識(shí)別,

則是通過定位人體的關(guān)節(jié)點(diǎn)、儲(chǔ)存關(guān)節(jié)點(diǎn)運(yùn)

動(dòng)數(shù)據(jù)信息來識(shí)別人體運(yùn)動(dòng)軌道。相較于計(jì)算機(jī)視角的人體姿態(tài)識(shí)別,

基于運(yùn)動(dòng)捕獲技

術(shù)的人體姿態(tài)識(shí)別可以更好地反映人體姿態(tài)信息,

也可以更好地處理和記錄運(yùn)動(dòng)細(xì)節(jié),

不會(huì)因?yàn)槲矬w顏色或被遮擋而影響運(yùn)動(dòng)軌道的識(shí)別,如圖

7.2

為人體姿態(tài)關(guān)鍵點(diǎn)檢測(cè)示

例圖。圖

7.2

人體姿態(tài)關(guān)鍵點(diǎn)檢測(cè)(2)人體姿態(tài)識(shí)別實(shí)現(xiàn)原理谷歌研究院推出了最新的姿態(tài)檢測(cè)模型

MoveNet,并在

TensorFlow.js

中推出了新

的姿態(tài)檢測(cè)

API,該模型可以非常快速、準(zhǔn)確地檢測(cè)人體的

17

個(gè)關(guān)鍵節(jié)點(diǎn),能夠以

50+fps

的速度在筆記本電腦和手機(jī)上運(yùn)行。目前,MoveNet

有兩個(gè)版本以提供性能的權(quán)衡。Lightning

版本時(shí)效性更快,但是

產(chǎn)生的結(jié)果可能準(zhǔn)確率不高;Thunder

版本時(shí)效性稍微慢一點(diǎn),但準(zhǔn)確率更高;因此,

可以看到

Thunder

模型的關(guān)鍵點(diǎn)得分通常會(huì)比

Lightning

略高。人體姿態(tài)關(guān)鍵點(diǎn)檢測(cè),是指在圖像中把人身體的各個(gè)關(guān)鍵點(diǎn)預(yù)測(cè)出來。而人體姿態(tài)

估計(jì),是指將圖片中已檢測(cè)到的人體關(guān)鍵點(diǎn)正確地聯(lián)系起來,從而估計(jì)人體姿態(tài)。人體

關(guān)鍵點(diǎn)通常是指人體上有一定自由度的關(guān)節(jié),如頸部、肩部、腕部、手部等,如圖

7.3

所示:圖

7.3

人體姿態(tài)

17

個(gè)關(guān)鍵點(diǎn)17

個(gè)關(guān)鍵點(diǎn)所對(duì)應(yīng)的人體部位包括:0:

鼻子、1:

左眼、2:

右眼、3:

左耳、4:

耳、5:

左肩、6:

右肩、7:

左肘、8:

右肘、9:

左腕、10:

右腕、11:

左胯、12:

右胯、

13:

左膝、14:

右膝、15:

左踝、16:

右踝。通過人體關(guān)鍵點(diǎn)在三維空間中的相對(duì)位置隨時(shí)間序的變化,來估計(jì)當(dāng)前人體的姿態(tài)

動(dòng)作。通過一段連續(xù)時(shí)間范圍內(nèi)人體關(guān)鍵點(diǎn)的位置變化,可以抽象分析出人體的行為意

圖,例如判斷人的肢體動(dòng)作,如圖

7.4

所示。圖

7.4

人體姿態(tài)動(dòng)作(3)人體姿態(tài)識(shí)別模型部署流程人體姿態(tài)識(shí)別的模型部署流程先進(jìn)行圖片輸入,使用

MoveNet

姿態(tài)檢測(cè)模型提取人

體姿態(tài)關(guān)鍵點(diǎn),再將人體姿態(tài)骨骼圖數(shù)據(jù)集進(jìn)行模型訓(xùn)練,最后將訓(xùn)練的模型進(jìn)行部署

與測(cè)試,如圖

7.0-1

所示。圖

7.0-1

人體姿態(tài)識(shí)別模型部署流程1)MoveNet

模型框架MoveNet

是自下而上的估計(jì)模型,使用熱圖來精確定位人體關(guān)鍵點(diǎn)。該架構(gòu)由兩個(gè)

部分組成:特征提取器和一組預(yù)測(cè)頭。預(yù)測(cè)方案大致遵循

CenterNet,但相較該架構(gòu)而

言大幅提升了速度和準(zhǔn)確性。所有模型均使用

TensorFlow

對(duì)象檢測(cè)

API

進(jìn)行訓(xùn)練。

MoveNet

中的特征提取器是

MobileNetV2,帶有附加的特征金字塔網(wǎng)絡(luò)

(FPN),可以實(shí)現(xiàn)

高分辨率(輸出步長(zhǎng)為

4)且語義豐富的特征圖輸出,如圖

7.0-2

所示。特征提取器上附

帶四個(gè)預(yù)測(cè)頭,負(fù)責(zé)密集預(yù)測(cè):a.人體中心熱圖:預(yù)測(cè)人體實(shí)例的幾何中心;b.關(guān)鍵點(diǎn)回歸場(chǎng):預(yù)測(cè)人體的完整關(guān)鍵點(diǎn)集,用于將關(guān)鍵點(diǎn)分組到實(shí)例中;

c.人體關(guān)鍵點(diǎn)熱圖:獨(dú)立于人體實(shí)例,預(yù)測(cè)所有關(guān)鍵點(diǎn)的位置;d.每個(gè)關(guān)鍵點(diǎn)的

2D

偏移場(chǎng):預(yù)測(cè)從每個(gè)輸出特征圖像素到每個(gè)關(guān)鍵點(diǎn)的精確子像

素位置的局部偏移量。圖

7.0-2

MoveNet

框架2)模型操作步驟一:人體中心熱圖用于識(shí)別框架中所有個(gè)人的中心,定義為屬于個(gè)人的所有關(guān)鍵點(diǎn)的算術(shù)平均值。選擇得分最高的位置(通過與框架中心的反距離加權(quán))。步驟二:通過對(duì)象中心對(duì)應(yīng)的像素分割關(guān)鍵點(diǎn)回歸輸出來生成該人體的初始關(guān)鍵點(diǎn)

集。由于這是中心向外的預(yù)測(cè)(必須在不同的尺度上操作),所以回歸關(guān)鍵點(diǎn)的質(zhì)量不

會(huì)特別準(zhǔn)確。步驟三:關(guān)鍵點(diǎn)熱圖中的每個(gè)像素都乘以一個(gè)權(quán)重,該權(quán)重與相應(yīng)回歸關(guān)鍵點(diǎn)的距

離成反比。這可以確保我們不接受來自背景人物的關(guān)鍵點(diǎn),因?yàn)樗麄兺ǔ2粫?huì)靠近回歸

的關(guān)鍵點(diǎn),因此得分較低。步驟四:通過檢索每個(gè)關(guān)鍵點(diǎn)通道中最大熱圖值的坐標(biāo)來選擇關(guān)鍵點(diǎn)預(yù)測(cè)的最終集

合。然后將局部

2D

偏移量預(yù)測(cè)添加到這些坐標(biāo)以給出精確的估計(jì);如下圖

7.0-3

所示:圖

7.0-3

MoveNet

模型操作3)模型訓(xùn)練準(zhǔn)備好姿勢(shì)檢測(cè)模型

MoveNet,使用

MoveNet

對(duì)人體的

RGB

圖片數(shù)據(jù)集進(jìn)行識(shí)別得

到人體姿態(tài)骨骼數(shù)據(jù)集,輸出的

17

個(gè)人體關(guān)節(jié)點(diǎn)畫出骨骼圖,如下圖示。圖

7.0-4

MoveNet

17

個(gè)人體關(guān)節(jié)骨骼如下圖所示,將骨骼數(shù)據(jù)集分為訓(xùn)練集與測(cè)試集。圖

7.0-5

MoveNet

骨骼數(shù)據(jù)集將準(zhǔn)備數(shù)據(jù)集在

TensorFlow

深度學(xué)習(xí)框架下訓(xùn)練,構(gòu)建全連接神經(jīng)網(wǎng)絡(luò)層,生成測(cè)

試模型。4)模型部署加載

tflite

模型,讀取模型,分配張量,獲取輸入層和輸出層維度和輸入數(shù)據(jù)的形

狀:

erpreter

=

tflite.Interpreter(model_path=model_path)self.interpreter.allocate_tensors()self.model_name

=

model_nameself.input_details

=

erpreter.get_input_details()self.output_details

=

erpreter.get_output_details()

print(self.model_name

+

"_input_shape",

self.input_details[0]['shape'])

print(self.model_name

+

"_input_details",

self.input_details)

print(self.model_name

+

"_output_datalis",

self.output_details)獲取輸出層數(shù)據(jù)進(jìn)行模型推理: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'])

#

獲取輸出層數(shù)據(jù)

return

output_data1任務(wù)二

人體姿態(tài)動(dòng)作識(shí)別算法實(shí)現(xiàn)(1)人體姿態(tài)檢測(cè)模型輸出數(shù)據(jù)解析將部署完成的模型調(diào)用,解析模型輸出結(jié)果,對(duì)原圖像進(jìn)行關(guān)鍵點(diǎn)繪制,將繪制的關(guān)鍵點(diǎn)進(jìn)行連線,模型測(cè)試效果如圖

7.0-1

所示:keypoints_xy,

edges_xy,

edge_colors

=

_keypoints_and_edges_for_display(predictions[0],ai_cfg.CAM_HEIGHT,ai_cfg.CAM_WIDTH)drawLine(edges_xy,

img,

edge_colors)img,

human_action

=

humanAction(img,

keypoints_xy)圖

7.0-1

模型測(cè)試效果(2)基本動(dòng)作判別算法實(shí)現(xiàn)

1)站立動(dòng)作識(shí)別站立動(dòng)作的識(shí)別當(dāng)人體關(guān)鍵點(diǎn)成為一條直線,且關(guān)鍵點(diǎn)之間的連線斜率為

0

時(shí),就

判斷該動(dòng)作為站立:2action_index

=

0)行走動(dòng)作識(shí)別行走動(dòng)作的識(shí)別主要是基于左膝蓋與左腳踝或者右膝蓋與右腳踝關(guān)鍵點(diǎn)之間的連線

斜率大于

0.3

時(shí),就判斷該動(dòng)作為行走:elif

(math.fabs((keypoints_xy[13][0]

-

keypoints_xy[15][0])

/

(keypoints_xy[13][1]

-

keypoints_xy[15][1]))

>

0.3or

math.fabs(

(keypoints_xy[14][0]

-

keypoints_xy[16][0])

/

(keypoints_xy[14][1]

-keypoints_xy[16][1]))

>

0.3):if

action_index

==

0:action_index

=

9img

=

putText(img,

"行走",

(0,

110))3)蹲下動(dòng)作識(shí)別蹲下動(dòng)作的識(shí)別主要基于左臀與左腳踝或者右臀與右腳踝關(guān)鍵點(diǎn)之間的連線斜率大于

0.5

小于

2

時(shí),就判斷該動(dòng)作為蹲下:elif

(0.5

<

math.fabs((keypoints_xy[11][1]

-

keypoints_xy[15][1])

/

(keypoints_xy[11][0]

-

keypoints_xy[15][0]))

<

2or

0.5

<

math.fabs((keypoints_xy[12][1]

-

keypoints_xy[16][1])

/

(keypoints_xy[12][0]

-

keypoints_xy[16][0]))

<

2):if

action_index

==

0:action_index

=

8#

cv2.putText(img,

'Squat',

(0,

110),

cv2.FONT_HERSHEY_SIMPLEX,

0.7,#(0,

0,

255),

2)img

=

putText(img,

"蹲下",

(0,

110))4)摔倒動(dòng)作識(shí)別摔倒動(dòng)作的識(shí)別主要基于左臀與左腳踝或者右臀與右腳踝關(guān)鍵點(diǎn)之間的連線斜率小于

0.5

時(shí),就判斷該動(dòng)作為摔倒:elif

(math.fabs((keypoints_xy[11][1]

-

keypoints_xy[15][1])

/

(keypoints_xy[11][0]

-

keypoints_xy[15][0]))

<

0.5or

math.fabs((keypoints_xy[12][1]

-

keypoints_xy[16][1])

/

(keypoints_xy[12][0]

-

keypoints_xy[16][0]))

<

0.5):1if

action_index

==

0:action_index

=

5#

cv2.putText(img,

'WARNING:

Someone

is

falling

down!',

(0,

110),

cv2.FONT_HERSHEY_SIMPLEX,

0.7,#(0,

0,

255),

2)img

=

putText(img,

"警告:有人摔倒!!",

(0,

110))人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)項(xiàng)目開發(fā)(1)系統(tǒng)框架結(jié)構(gòu)分析系統(tǒng)框架結(jié)構(gòu)分為硬件和軟件兩部分,充分體現(xiàn)出嵌入式人工智能理念,硬件與軟件的完美結(jié)合,實(shí)現(xiàn)人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)。1)硬件部分硬件部分實(shí)現(xiàn)的過程整體框架分析圖如圖

7.11

所示,姿態(tài)檢測(cè)傳感器對(duì)人體姿態(tài)的動(dòng)作進(jìn)行數(shù)據(jù)采集與識(shí)別,并將識(shí)別結(jié)果顯示在

LCD

顯示屏,

7

核心控制板通過

WiFi

通信將采集識(shí)別到的數(shù)據(jù)上傳給軟件部分,軟件部分在接收完數(shù)據(jù)之后,識(shí)別為跌倒動(dòng)作

時(shí),立即下行數(shù)據(jù)給核心控制板,控制

RGB

燈閃爍,發(fā)出警報(bào)聲。圖

7.0-2

硬件部分框架分析圖2)軟件部分軟件部分實(shí)現(xiàn)的過程整體框架分析圖如圖

7.0-3

所示,通過

OpenCV

計(jì)算機(jī)技術(shù),對(duì)

圖像進(jìn)行獲取,軟件部分通過

WiFi

接收硬件部分傳來的數(shù)據(jù),使用

TensorFlow

深度學(xué)習(xí)

框架

MoveNet

模型進(jìn)行數(shù)據(jù)預(yù)處理,模型推理,訓(xùn)練,對(duì)生成的模型進(jìn)行動(dòng)作判斷識(shí)別,

并通過

WiFi,將識(shí)別的動(dòng)作與可視化交互界面聯(lián)動(dòng)起來,可實(shí)現(xiàn)站立、行走、奔跑、蹲

下、跳躍、跌倒等動(dòng)畫圖像。當(dāng)識(shí)別為跌倒動(dòng)作時(shí),通過

WiFi

立即發(fā)送下行控制指令發(fā)送給

STM32F407

核心控制板,控制蜂鳴器發(fā)出報(bào)警聲。圖

7.0-3

軟件部分框架分析圖(2)人體姿態(tài)動(dòng)作識(shí)別功能插件構(gòu)建1)本次人體姿態(tài)動(dòng)作識(shí)別系統(tǒng)開發(fā)采用

python

多進(jìn)程實(shí)現(xiàn)圖像獲取,圖像識(shí)別,

嵌入式系統(tǒng)數(shù)據(jù)交互,結(jié)果可視化等任務(wù)。首先構(gòu)建人體姿態(tài)圖像獲取、人體姿態(tài)動(dòng)作

圖像識(shí)別、網(wǎng)頁端圖像傳遞、跌倒檢測(cè)預(yù)警系統(tǒng)數(shù)據(jù)接收與發(fā)送共四個(gè)功能插件:

q_flask

=

mp.Manager().Queue(5)

#

傳遞識(shí)別結(jié)果到網(wǎng)頁q_img

=

mp.Manager().Queue(1)

#

獲取攝像頭圖像q_rec

=

mp.Manager().Queue(1)

#

識(shí)別結(jié)果q_send

=

mp.Manager().Queue(2)

#

發(fā)送控制指令消息隊(duì)列full_dict

=

mp.Manager().dict({cfg.POSEN_STATIC:

4})

#

全局?jǐn)?shù)據(jù)共享

mapOpenPlugin

=

dict()mapClosePlugin

=

dict()mapOpenPlugin[TaskType.IMAGE_GET_TASK]

=

(imgGetPluginRegist,

#

人體圖像獲取插件

(q_flask,

q_img,

q_rec,

q_send,

full_dict))mapOpenPlugin[TaskType.IMAGE_REC_TASK]

=

(imgRecPluginRegist,

#

人體姿態(tài)動(dòng)作圖像識(shí)別插件

(q_img,

q_rec))(q_send,

full_dict))

for

plugin

in

mapOpenPlugin:

(str(plugin)

+

"啟動(dòng)成功~")taskFunc,

taskArgs

=

mapOpenPlugin[plugin]

taskFunc(*taskArgs)

#

提交任務(wù)

workFlow.busStart()2)人體姿態(tài)圖像獲取功能插件實(shí)現(xiàn)實(shí)現(xiàn)第一個(gè)功能插件,人體姿態(tài)圖像獲取功能插件。調(diào)用攝像頭獲取人體姿態(tài)圖像,

獲取人體姿態(tài)結(jié)果消息隊(duì)列,并調(diào)用函數(shù)實(shí)現(xiàn)識(shí)別結(jié)果繪制,以及將結(jié)果傳遞到

web

網(wǎng)

頁端:mapOpenPlugin[TaskType.FLASK_TASK]

=

(flaskPluginRegist,#

網(wǎng)頁端

GUI

界面插件(htop,

port,

q_flask,

full_dict))mapOpenPlugin[TaskType.EMD_READ_SEND]

=

(emdPluginRegist,

#

嵌入式系統(tǒng)數(shù)據(jù)交互插件-class

VideoThread(threading.Thread):def

init

(self,

camera="0",

q_flask:

Queue=None,q_img:

Queue=None,

q_rec:

Queue=None,

q_send=None,

full_dict=None):threading.Thread.

init

(self)

self.cap

=

setCamera(0)

#

網(wǎng)絡(luò)攝像頭self.q_flask

=

q_flask

self.q_img

=

q_img

self.q_rec

=

q_rec#

消息隊(duì)列傳遞繪制識(shí)別結(jié)果后的圖像到

web

顯示插件

#

消息隊(duì)列傳遞原始圖像到識(shí)別插件#

消息隊(duì)列傳遞

AI

模型的推理結(jié)果self.embd_drive

=

EmbdDrive(q_send)2

self.full_dict

=

full_dictdef

run(self):

move_pricet

=

[]

while

True:if

self.cap

!=

"":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))#

識(shí)別結(jié)果繪制if

not

self.q_rec.empty():

move_pricet

=

self.q_rec.get()frame,

human_action

=

recImgDis(frame,

move_pricet)

#

賦值識(shí)別到的姿態(tài)動(dòng)作

self.full_dict[config.POSEN_STATIC]

=

human_action

#

根據(jù)識(shí)別結(jié)果控制嵌入式設(shè)備if

human_action

==

5:controlEmbedded(self.embd_drive,

1)else:controlEmbedded(self.embd_drive,

0)#

傳遞圖像到

web

顯示界面中if

not

self.q_flask.full()

and

not

frame

is

None:self.q_flask.put(bytearray(frame))3)人體姿態(tài)識(shí)別模型推理功能插件實(shí)現(xiàn)實(shí)現(xiàn)第二個(gè)功能插件,人體姿態(tài)識(shí)別模型推理插件。在任務(wù)一中已經(jīng)進(jìn)行人體姿態(tài)識(shí)別模型部署,利用深度學(xué)習(xí)

MoveNet

算法實(shí)現(xiàn)了人體姿態(tài)動(dòng)作識(shí)別功能,調(diào)用函數(shù)實(shí)現(xiàn)模型推理,并將模型推理結(jié)果進(jìn)行傳遞:class

FaceMaskRecThread(threading.Thread):def

init

(self,

q_img:Queue=None,

q_rec:Queue=None,

model_path=ai_cfg.MOVE_MODEL_PATH):threading.Thread.

init

(self)self.q_img

=

q_img

self.q_rec

=

q_rec#

消息隊(duì)列傳遞原始圖像到識(shí)別插件

#

消息隊(duì)列傳遞

AI

模型的推理結(jié)果self.move_rec

=

MoveRec(model_path=model_path)

def

run(self):while

True:if

self.q_img.empty():

continue

4)可視化交互界面插件實(shí)現(xiàn)實(shí)現(xiàn)第三個(gè)功能插件,可視化交互界面插件。識(shí)別結(jié)果主要是站立、蹲下、行走、

摔倒等動(dòng)作傳遞到

web

端。web

端獲取到識(shí)別結(jié)果進(jìn)行展示:

else:image

=

self.q_img.get()if

image

!=

False:image

=

np.array(image).reshape(ai_cfg.CAM_HEIGHT,

ai_cfg.CAM_WIDTH,

3)else:breakmove_pricet

=

self.move_rec.inference(image)if

self.q_rec.full():continueelse:self.q_rec.put(move_pricet)class

FlaskTask():def

init

(self):global

appdef

onExit(self):passdef

worker(self,

host="",

port=8082,

q_flask=None,

full_dict=None):setStatus(full_dict)@app.route('/',

methods=['GET',

'POST'])

(3)跌倒檢測(cè)預(yù)警系統(tǒng)功能實(shí)現(xiàn)身體動(dòng)作具有突發(fā)性、劇烈性和短暫性。在變化過程中,人身體傾斜入致角度發(fā)生def

base_layout():return

render_template('index.html')def

camera():while

True:if

q_flask.empty():continueelse:img

=

q_flask.get()if

img

!=

False:img

=

np.array(img).reshape(ai_cfg.CAM_HEIGHT,

ai_cfg.CAM_WIDTH,

3)ret,

buf

=

cv2.imencode(".jpeg",

img)yield

(b"--frame\r\nContent-Type:

image/jpeg\r\n\r\n"

+

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論