




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司員工收快遞管理制度
- 2025年山東省濟(jì)南市長(zhǎng)清區(qū)中考三模語文試題(含答案)
- 2025年高考云南卷歷史高考真題(無答案)
- 病理選擇考試題及答案
- 標(biāo)書專員考試題及答案
- 編程校隊(duì)考試題及答案
- 寶馬歷史考試題及答案
- 安順中考試題及答案
- 安工考試題及答案
- plc編程考試題及答案
- 2025年中考物理終極押題猜想(新疆卷)(考試版A4)
- 護(hù)理文化建設(shè)與人文護(hù)理
- 《植物生理學(xué)》章節(jié)復(fù)習(xí)提綱(大學(xué)期末復(fù)習(xí)資料)
- 小學(xué)一年級(jí)數(shù)學(xué)思維訓(xùn)練100題(附答案)
- 七年級(jí)籃球教案
- 國(guó)開2024年秋《教育心理學(xué)》形成性考核1-4答案
- 河南省商丘市梁園區(qū)2023-2024學(xué)年五年級(jí)下學(xué)期期末教學(xué)效果評(píng)估語文試題
- DB11-T 1446-2017 回彈法、超聲回彈綜合法檢測(cè)泵送混凝土抗壓強(qiáng)度技術(shù)規(guī)程
- Unit8Birthdays(Storytime)(教學(xué)設(shè)計(jì))譯林版英語五年級(jí)下冊(cè)
- 合肥市45中2023-2024學(xué)年英語七下期末經(jīng)典模擬試題含答案
- 中考化學(xué)專題:質(zhì)量守恒教學(xué)設(shè)計(jì) 人教版
評(píng)論
0/150
提交評(píng)論