
隨著人口老齡化問題的加重,獨(dú)居老人、空巢老人數(shù)量在不斷上升,因此如何保障獨(dú)居老人、空巢老人健康生活和人身安全至關(guān)重要。而對于獨(dú)居老人、空巢老人,如果出現(xiàn)摔倒等情況而不會及時(shí)發(fā)現(xiàn),將會對其健康安全造成重大影響。本項(xiàng)目主要研究為開發(fā)一套摔倒自動識別報(bào)警平臺,使用視頻監(jiān)控其采集多路視頻流數(shù)據(jù),使用行人檢測算法、關(guān)鍵點(diǎn)檢測算法以及摔倒檢測算法實(shí)現(xiàn)對行人摔倒自動識別,并根據(jù)檢測情況,對相關(guān)人員發(fā)送警報(bào),實(shí)現(xiàn)對老人的及時(shí)看護(hù)。該裝置可以布置在養(yǎng)老院等場所,通過算法自動判別,可以大大降低人力成本以及保護(hù)老人的隱私。該項(xiàng)目應(yīng)用場景不知可以用到空巢老人,還可以用到家庭中的孕婦兒童、幼兒園等場景,實(shí)現(xiàn)對兒童的摔倒檢測。
項(xiàng)目中采用 OpenVINO 部署行人檢測算法、關(guān)鍵點(diǎn)檢測算法以及摔倒檢測算法實(shí)現(xiàn)對行人摔倒自動識別算法,并在英特爾開發(fā)套件 AlxBoard 使用 OpenVINO C# API 結(jié)合應(yīng)用場景部署多模型。
項(xiàng)目中所使用的代碼全部在 GitHub 上開源,項(xiàng)目鏈接為:
https://github.com/guojin-yan/OpenVINO-CSharp-API/tree/csharp3.0/tutorial_examples/PP-Human_Fall_Detection
(復(fù)制鏈接到瀏覽器打開)
Part1
英特爾開發(fā)套件
OpenVINO 工具套件
1.1
英特爾發(fā)行版 OpenVINO工具套件基于oneAPI 而開發(fā),可以加快高性能計(jì)算機(jī)視覺和深度學(xué)習(xí)視覺應(yīng)用開發(fā)速度工具套件,適用于從邊緣到云的各種英特爾平臺上,幫助用戶更快地將更準(zhǔn)確的真實(shí)世界結(jié)果部署到生產(chǎn)系統(tǒng)中。通過簡化的開發(fā)工作流程,OpenVINO 可賦能開發(fā)者在現(xiàn)實(shí)世界中部署高性能應(yīng)用程序和算法。

OpenVINO 2023.1 于 2023 年 9 月 18 日發(fā)布,該工具包帶來了挖掘生成人工智能全部潛力的新功能。生成人工智能的覆蓋范圍得到了擴(kuò)展,通過 PyTorch* 等框架增強(qiáng)了體驗(yàn),您可以在其中自動導(dǎo)入和轉(zhuǎn)換模型。大型語言模型(LLM)在運(yùn)行時(shí)性能和內(nèi)存優(yōu)化方面得到了提升。聊天機(jī)器人、代碼生成等的模型已啟用。OpenVINO 更便攜,性能更高,可以在任何需要的地方運(yùn)行:在邊緣、云中或本地。
英特爾開發(fā)套件 AlxBoard 介紹
1.2

產(chǎn)品定位
英特爾開發(fā)套件 AlxBoard 是英特爾開發(fā)套件官方序列中的一員,專為入門級人工智能應(yīng)用和邊緣智能設(shè)備而設(shè)計(jì)。英特爾開發(fā)套件 AlxBoard 能完美勝人工智能學(xué)習(xí)、開發(fā)、實(shí)訓(xùn)、應(yīng)用等不同應(yīng)用場景。該套件預(yù)裝了英特爾OpenVINO 工具套件、模型倉庫和演示案例,便于您輕松快捷地開始應(yīng)用開發(fā)。
套件主要接口與 Jetson Nano 載板兼容,GPIO 與樹莓派兼容,能夠最大限度地復(fù)用成熟的生態(tài)資源。這使得套件能夠作為邊緣計(jì)算引擎,為人工智能產(chǎn)品驗(yàn)證和開發(fā)提供強(qiáng)大支持;同時(shí),也可以作為域控核心,為機(jī)器人產(chǎn)品開發(fā)提供技術(shù)支撐。
使用英特爾開發(fā)套件 AlxBoard,您將能夠在短時(shí)間內(nèi)構(gòu)建出一個(gè)出色的人工智能應(yīng)用應(yīng)用程序。無論是用于科研、教育還是商業(yè)領(lǐng)域,英特爾開發(fā)套件 AlxBoard都能為您提供良好的支持。借助 OpenVINO工具套件,CPU、iGPU 都具備強(qiáng)勁的 AI 推理能力,支持在圖像分類、目標(biāo)檢測、分割和語音處理等應(yīng)用中并行運(yùn)行多個(gè)神經(jīng)網(wǎng)絡(luò)。
產(chǎn)品參數(shù)

AI 推理單元
借助 OpenVINO 工具,能夠?qū)崿F(xiàn) CPU+iGPU 異構(gòu)計(jì)算推理,IGPU 算力約為 0.6TOPS

Part2
PaddleDetection
實(shí)時(shí)行人分析工具 PP-Human
飛槳 (PaddlePaddle) 是集深度學(xué)習(xí)核心框架、工具組件和服務(wù)平臺為一體的技術(shù)先進(jìn)、功能完備的開源深度學(xué)習(xí)平臺,已被中國企業(yè)廣泛使用,深度契合企業(yè)應(yīng)用需求,擁有活躍的開發(fā)者社區(qū)生態(tài)。提供豐富的官方支持模型集合,并推出全類型的高性能部署和集成方案供開發(fā)者使用。是中國首個(gè)自主研發(fā)、功能豐富、開源開放的產(chǎn)業(yè)級深度學(xué)習(xí)平臺。
PaddleDetection 是一個(gè)基于 PaddlePaddle 的目標(biāo)檢測端到端開發(fā)套件,內(nèi)置 30+ 模型算法及 250+ 預(yù)訓(xùn)練模型,覆蓋目標(biāo)檢測、實(shí)例分割、跟蹤、關(guān)鍵點(diǎn)檢測等方向,其中包括服務(wù)器端和移動端高精度、輕量級產(chǎn)業(yè)級 SOTA 模型、冠軍方案和學(xué)術(shù)前沿算法,并提供配置化的網(wǎng)絡(luò)模塊組件、十余種數(shù)據(jù)增強(qiáng)策略和損失函數(shù)等高階優(yōu)化支持和多種部署方案。在提供豐富的模型組件和測試基準(zhǔn)的同時(shí),注重端到端的產(chǎn)業(yè)落地應(yīng)用,通過打造產(chǎn)業(yè)級特色模型|工具、建設(shè)產(chǎn)業(yè)應(yīng)用范例等手段,幫助開發(fā)者實(shí)現(xiàn)數(shù)據(jù)準(zhǔn)備、模型選型、模型訓(xùn)練、模型部署的全流程打通,快速進(jìn)行落地應(yīng)用。

在實(shí)際應(yīng)用中,打架、摔倒、異常闖入等異常行為的發(fā)生率高、后果嚴(yán)重,使得其成為了安防領(lǐng)域中重點(diǎn)監(jiān)控的場景。飛槳目標(biāo)檢測套件 PaddleDetection 中開源的行人分析工具 PP-Human 提供了五大異常行為識別、26 種人體屬性分析、人流計(jì)數(shù)、跨鏡 ReID 四大產(chǎn)業(yè)級功能,其中異常行為識別功能覆蓋了對摔倒、打架、打電話、抽煙、闖入等行為的檢測。

如圖所示,PP-Human 支持單張圖片、圖片文件夾單鏡頭視頻和多鏡頭視頻輸入,經(jīng)目標(biāo)檢測以及特征關(guān)聯(lián),實(shí)現(xiàn)屬性識別、關(guān)鍵點(diǎn)檢測、軌跡/流量計(jì)數(shù)以及行為識別等功能。此處基于 OpenVINO 模型部署套件,進(jìn)行多種模型聯(lián)合部署,實(shí)現(xiàn)實(shí)時(shí)行人行為識別,此處主要實(shí)現(xiàn)行人摔倒識別。

Part3
預(yù)測模型獲取與轉(zhuǎn)換
PP-YOLOE 行人跟蹤
3.1
模型介紹
PP-YOLOE 是基于 PP-YOLOv2 的卓越的單階段 Anchor-free 模型,超越了多種流行的 YOLO 模型,可以通過 width multiplier 和 depth multiplier 配置。PP-YOLOE 避免了使用諸如 Deformable Convolution 或者 Matrix NMS 之類的特殊算子,以使其能輕松地部署在多種多樣的硬件上。此處主要利用 PP-Yoloe 模型進(jìn)行行人跟蹤。

表2 PP-Yoloe Paddle 格式模型信息
表 2 為 Paddle 格式下 PP-YOLOE 模型的輸入與輸出相關(guān)信息,該模型包括兩個(gè)輸入與兩個(gè)輸出,可以實(shí)現(xiàn)行人識別,該模型可以直接在飛槳平臺下載。但由于 PP-Yoloe 模型無法在 OpenVINO 平臺直接部署,需要進(jìn)行節(jié)點(diǎn)裁剪,即裁剪掉 scale_factor 輸入節(jié)點(diǎn),裁剪后模型結(jié)構(gòu)如表 3 所示,具體如何裁剪后續(xù)講解。

表3 PP-YOLOE Paddle 格式模型信息
模型下載與轉(zhuǎn)換
(1) PaddlePaddle 模型下載與裁剪:
PP-Human 提供了訓(xùn)練好的行人跟蹤模型,此處只需要下載,并將其解壓到指定文件夾中:
weget https://bj.bcebos.com/v1/paddledet/models/pipeline/mot_ppyoloe_l_36e_pipeline.zip
此處模型裁剪主要是在 Paddle 模型格式下進(jìn)行裁剪,裁剪方式參考的jiangjiajun [1]提供的模型裁剪方式,為了方便使用,當(dāng)前項(xiàng)目提供了模型裁剪工具包,在 “./paddle_model_process/” 文件夾下,利用命令進(jìn)行模型裁剪:
python prune_paddle_model.py --model_dir mot_ppyoloe_l_36e_pipeline --model_filename model.pdmodel --params_filename model.pdiparams --output_names tmp_16 concat_14.tmp_0 --save_dir export_model
如表 4 所示,提供了模型裁剪命令說明,大家可以根據(jù)自己設(shè)置進(jìn)行模型裁剪,當(dāng)前命令裁剪的模型目前已經(jīng)進(jìn)行測試,完全符合當(dāng)前階段的要求。

表4模型裁剪命令說明
(2)轉(zhuǎn)換為 ONNX 格式:
該方式需要安裝 paddle2onnx和onnxruntime 模塊。導(dǎo)出方式比較簡單,可以進(jìn)行模型輸入固定,此處使用的都為 bath_size=1,在命令行中輸入以下指令進(jìn)行轉(zhuǎn)換:
paddle2onnx --model_dir mot_ppyoloe_l_36e_pipeline --model_filename model.pdmodel --params_filename model.pdiparams --input_shape_dict "{'image':[1,3,640,640]}" --opset_version 11 --save_file mot_ppyoloe_l_36e_pipeline.onnx
(3)轉(zhuǎn)成 IR 格式
IR 格式為 OpenVINO 原生支持的模型格式,此處主要通過 OpenVINO 工具進(jìn)行轉(zhuǎn)換,直接在命令行輸入以下指令即可:
mo --input_model mot_ppyoloe_l_36e_pipeline.onnx
PP-TinyPose 人體姿態(tài)識別
3.2
模型介紹
PP-TinyPose 是 PaddlePaddle 提供了關(guān)鍵點(diǎn)識別模型,PP-TinyPose 在單人和多人場景均達(dá)到性能 SOTA,同時(shí)對檢測人數(shù)無上限,并且在微小目標(biāo)場景有卓越效果,助力開發(fā)者高性能實(shí)現(xiàn)異常行為識別、智能健身、體感互動游戲、人機(jī)交互等任務(wù)。同時(shí)擴(kuò)大數(shù)據(jù)集,減小輸入尺寸,預(yù)處理與后處理加入 AID、UDP 和 DARK 等策略,保證模型的高性能。實(shí)現(xiàn)速度在 FP16 下 122FPS 的情況下,精度也可達(dá)到 51.8%AP,不僅比其他類似實(shí)現(xiàn)速度更快,精度更是提升了 130%。此處使用的是 dark_hrnet_w32_256x192 模型,該模型輸入與輸出如下表所示。

表5 dark_hrnet_w32_256x192 Paddle模型信息
表 5 為 Paddle 格式下 dark_hrnet_w32_256x192 模型的輸入與輸出相關(guān)信息,除此以外,飛槳還提供了輸入大小為 128×96 的模型,這兩類模型在部署時(shí)所有操作基本一致,主要差別就是輸入與輸出的形狀不同。分析模型的輸入和輸出可以獲取以下幾個(gè)點(diǎn):
第一模型的輸入與 conv2d_585.tmp_1 節(jié)點(diǎn)輸出形狀,呈現(xiàn)倍數(shù)關(guān)系,具體是輸入的長寬是輸出的四倍,因此我們可以通過輸入形狀來推算輸出的大小。
第二模型 argmax_0.tmp_00 節(jié)點(diǎn)輸出為預(yù)測出的 17 個(gè)點(diǎn)的灰度圖,因此后續(xù)在進(jìn)行數(shù)據(jù)處理是,只需要尋找到最大值所在位置,就可以找到近似的位置。
模型下載與轉(zhuǎn)換
(1)PaddlePaddle 模型下載方式:
命令行直接輸入以下代碼,或者瀏覽器輸入后面的網(wǎng)址即可。
wget https://bj.bcebos.com/v1/paddledet/models/pipeline/dark_hrnet_w32_256x192.zip
下載好后將其解壓到文件夾中,便可以獲得 Paddle 格式的推理模型。
(2)轉(zhuǎn)換為 ONNX 格式:
該方式需要安裝 paddle2onnx 和 onnxruntime 模塊。在命令行中輸入以下指令進(jìn)行轉(zhuǎn)換,其中轉(zhuǎn)換時(shí)需要指定 input_shape,否者推理時(shí)間會很長:
paddle2onnx --model_dir dark_hrnet_w32_256x192 --model_filename model.pdmodel --params_filename model.pdiparams --input_shape_dict "{'image':[1,3,256,192]}" --opset_version 11 --save_file dark_hrnet_w32_256x192.onnx
(3)轉(zhuǎn)換為 IR 格式
利用 OpenVINO 模型優(yōu)化器,可以實(shí)現(xiàn)將 ONNX 模型轉(zhuǎn)為 IR 格式。在 OpenVINO 環(huán)境下,切換到模型優(yōu)化器文件夾,直接使用下面指令便可以進(jìn)行轉(zhuǎn)換。
cd .openvino ools
mo --input_model paddle/model.pdmodel --input_shape [1,3,256,192]
經(jīng)過上述指令模型轉(zhuǎn)換后,可以在當(dāng)前文件夾下找到轉(zhuǎn)換后的三個(gè)文件。
由于 OpenVINO TM 支持 FP16 推理,此處為了對比推理時(shí)間,也已并將模型轉(zhuǎn)為 FP16 格式:
mo --input_model paddle/model.pdmodel --data_type FP16 --input_shape [1,3,256,192]
ST-GCN 基于關(guān)鍵點(diǎn)的行為識別
3.3
模型介紹
摔倒行為識別模型使用了 ST-GCN,并基于 PaddleVideo 套件完成模型訓(xùn)練,此處可以直接下載飛槳提供的訓(xùn)練好的模型。

表6 ST-GCN Paddle模型信息
表6 為 Paddle 格式下 ST-GCN 模型的輸入與輸出相關(guān)信息,該模型輸入為人體骨骼關(guān)鍵識別,由于摔倒是一個(gè)連續(xù)的過程,因此需要同時(shí)輸入 50 幀的關(guān)鍵點(diǎn)結(jié)果,因此該模型不支持單張圖片的預(yù)測,只支持視頻的推理預(yù)測;其模型輸出為是否摔倒的概率。
模型下載與轉(zhuǎn)換
(1)PaddlePaddle 模型下載方式:
命令行直接輸入以下代碼,或者瀏覽器輸入后面的網(wǎng)址即可。
wget https://bj.bcebos.com/v1/paddledet/models/pipeline/STGCN.zip
下載好后將其解壓到文件夾中,便可以獲得 Paddle 格式的推理模型。
(2)轉(zhuǎn)換為 ONNX 格式:
該方式需要安裝 paddle2onnx和onnxruntime 模塊。在命令行中輸入以下指令進(jìn)行轉(zhuǎn)換:
paddle2onnx --model_dir STGCN --model_filename model.pdmodel --params_filename model.pdiparams --opset_version 11 --save_file STGCN.onnx
(3)轉(zhuǎn)換為IR格式
利用 OpenVINO 模型優(yōu)化器,可以實(shí)現(xiàn)將 ONNX 模型轉(zhuǎn)為 IR 格式。在 OpenVINO 環(huán)境下,切換到模型優(yōu)化器文件夾,直接使用下面指令便可以進(jìn)行轉(zhuǎn)換。
cd .openvino ools
mo --input_model paddle/model.pdmode
經(jīng)過上述指令模型轉(zhuǎn)換后,可以在當(dāng)前文件夾下找到轉(zhuǎn)換后的三個(gè)文件。
由于 OpenVINO 支持 FP16 推理,此處為了對比推理時(shí)間,也已并將模型轉(zhuǎn)為 FP16 格式:
mo --input_model paddle/model.pdmodel --data_type FP16
Part4
配置 PP-Human_Fall_Detection 項(xiàng)目
項(xiàng)目中所使用的代碼已經(jīng)放在 GitHub 倉庫 PP-Human_Fall_Detection[2],大家可以根據(jù)情況自行下載和使用,下面我將會從頭開始一步步構(gòu)建 PP-Human_Fall_Detection 項(xiàng)目。
環(huán)境配置
4.1
在該項(xiàng)目中主要需要配置 .NET 編譯運(yùn)行環(huán)境、OpenVINO Runtime、OpenCvSharp 環(huán)境,其配置流程可以參考上一篇文章:【2023 Intel 有獎?wù)魑摹坑⑻貭栭_發(fā)套件 AlxBoard 使用 OpenVINO C# API 部署 Yolov8 模型 [3]。
創(chuàng)建 PP-Human_Fall_Detection項(xiàng)目
4.2
在該項(xiàng)目中,我們需要使用 OpenCvSharp,該依賴目前在 Ubutun 平臺最高可以支持 .NET Core 3.1,因此我們此處創(chuàng)建一個(gè) .NET Core 3.1 的項(xiàng)目,使用 Terminal 輸入以下指令創(chuàng)建并打開項(xiàng)目文件:
dotnet new console --framework "netcoreapp3.1" -o PP-Human_Fall_Detection
cd PP-Human_Fall_Detection

添加項(xiàng)目源碼
4.3
前文中我們已經(jīng)提供了項(xiàng)目源碼鏈接,大家可以直接再在源碼使用,此處由于篇幅限制,因此此處不對源碼做太多的講解,只演示如何使用項(xiàng)目源碼配置當(dāng)前項(xiàng)目。將項(xiàng)目源碼中的 PP-Human 文件夾和 HumanFallDown.cs、Program.cs 文件復(fù)制到當(dāng)前項(xiàng)目中,最后項(xiàng)目的路徑關(guān)系如下所示:
PP-Human_Fall_Detection
├──── PP-Human
| ├──── Common.cs
| ├──── PP-TinyPose.cs
| ├──── PP-YOLOE.cs
| └──── STGCN.cs
├──── HumanFallDown.cs
├──── PP-Human_Fall_Detection.csproj
└──── Program.cs
添加OpenVINO C# API
4.4
OpenVINO C# API 目前只支持克隆源碼的方式實(shí)現(xiàn),首先使用 Git 克隆以下源碼,只需要在 Terminal 輸入以下命令:
git clone https://github.com/guojin-yan/OpenVINO-CSharp-API.git

然后將該項(xiàng)目文件夾下的除了 src 文件夾之外的文件都刪除掉,然后項(xiàng)目的文件路徑入下所示:
PP-Human_Fall_Detection
├──── OpenVINO-CSharp-API
| ├──── src
| └──── CSharpAPI
├──── PP-Human
| ├──── Common.cs
| ├──── PP-TinyPose.cs
| ├──── PP-YOLOE.cs
| └──── STGCN.cs
├──── HumanFallDown.cs
├──── PP-Human_Fall_Detection.csproj
└──── Program.cs
最后在當(dāng)前項(xiàng)目中添加項(xiàng)目引用,只需要在 Terminal 輸入以下命令:
dotnet add reference ./OpenVINO-CSharp-API/src/CSharpAPI/CSharpAPI.csproj

添加OpenCvSharp
4.5
安裝 NuGet Package
OpenCvSharp 可以通過 NuGet Package 安裝,只需要在 Termina l輸入以下命令:
dotnet add package OpenCvSharp4_.runtime.ubuntu.20.04-x64
dotnet add package OpenCvSharp4


添加環(huán)境變量
將以下路徑添加到環(huán)境變量中:
export LD_LIBRARY_PATH=/home/ygj/Program/ OpenVINO-CSharp-API/tutorial_examples/AlxBoard_deploy_yolov8/bin/Debug/netcoreapp3.1/runtimes/ubuntu.20.04-x64/native
/bin/Debug/netcoreapp3.1/runtimes/ubuntu.20.04-x64/native 是項(xiàng)目編譯后生成的路徑,該路徑下存放了 libOpenCvSharpExtern.so 文件,該文件主要是封裝的 OpenCV 中的各種接口。也可以將該文件拷貝到項(xiàng)目運(yùn)行路徑下。
Part5
測試PP-Human_Fall_Detection項(xiàng)目
創(chuàng)建視頻讀取器
5.1
當(dāng)前項(xiàng)目測試內(nèi)容為視頻,此處主要通過 OpenCV的VideoCapture 類進(jìn)行讀取,實(shí)現(xiàn)逐幀讀取測試圖片。
// 視頻路徑
string test_video = @"E:Git_space基于Csharp和OpenVINO部署PP-Humandemo摔倒.mp4";
// string test_video = @"E:Git_space基于Csharp和OpenVINO部署PP-Humandemo摔倒2.mp4";
// 視頻讀取器
VideoCapture video_capture = new VideoCapture(test_video);
// 視頻幀率
double fps = video_capture.Fps;
// 視頻幀數(shù)
int frame_count = video_capture.FrameCount;
Console.WriteLine("video fps: {0}, frame_count: {1}", Math.Round(fps), frame_count);
行人識別
5.2
利用創(chuàng)建好的視頻讀取器逐幀讀取視頻圖片,將其帶入到 yoloe_predictor 預(yù)測器中進(jìn)行預(yù)測,并將預(yù)測結(jié)果繪制到圖片上,期預(yù)測結(jié)果存放到 ResBboxs 類中,方便進(jìn)行數(shù)據(jù)傳輸。
// 讀取視頻幀
if (!video_capture.Read(frame))
{
Console.WriteLine("視頻讀取完畢!!{0}", frame_id);
break;
}
// 復(fù)制可視化圖片
visualize_frame = frame.Clone();
// 行人識別
ResBboxs person_result = yoloe_predictor.predict(frame);
// 判斷是否識別到人
if (person_result.bboxs.Count < 1)
{
continue;
}
// 繪制行人區(qū)域
yoloe_predictor.draw_boxes(person_result, ref visualize_frame);
通過上述代碼,可以實(shí)現(xiàn)視頻所有幀圖片預(yù)測,將預(yù)測結(jié)果保存到本地,如圖所示,經(jīng)過預(yù)測器預(yù)測,可以很好的捕獲到運(yùn)動的行人。

關(guān)鍵點(diǎn)識別
5.3
上一步通過行人跟蹤,捕捉到了行人,由于行人是在不斷運(yùn)動的,因此在進(jìn)行關(guān)鍵點(diǎn)預(yù)測時(shí),需要先進(jìn)行裁剪,將行人區(qū)域按照指定要求裁剪下來,并根據(jù)裁剪結(jié)果對行人關(guān)鍵點(diǎn)進(jìn)行預(yù)測,此處使用的是 bath_size=1 的預(yù)測,適合單人預(yù)測,如果出現(xiàn)多人時(shí),可以采用同時(shí)預(yù)測。
// 裁剪行人區(qū)域
List point_rects;
List person_rois = tinyPose_predictor.get_point_roi(frame, person_result.bboxs, out point_rects);
for (int p = 0; p < person_rois.Count; p++)
{
// 關(guān)鍵點(diǎn)識別
float[,] person_point = tinyPose_predictor.predict(person_rois[p]);
KeyPoints key_point = new KeyPoints(frame_id, person_point, point_rects[p]);
//Console.WriteLine(key_point.bbox);
flag_stgcn = mot_point.add_point(key_point);
tinyPose_predictor.draw_poses(key_point, ref visualize_frame);
}
經(jīng)過模型預(yù)測,第一會將預(yù)測結(jié)果存到結(jié)果容器“mot_point”中,用于后面的摔倒識別;另一點(diǎn)將模型預(yù)測結(jié)果繪制到圖像中,如圖所示。

摔倒識別
5.4
摔倒識別需要同時(shí)輸入 50 幀人體關(guān)鍵點(diǎn)識別結(jié)果,所以在開始階段需要積累 50 幀的關(guān)鍵點(diǎn)識別結(jié)果,此處采用自定義的結(jié)果保存容器 “MotPoint” 實(shí)現(xiàn),該容器可以實(shí)現(xiàn)保存關(guān)鍵點(diǎn)結(jié)果,并將關(guān)鍵點(diǎn)識別結(jié)果與上一幀結(jié)果進(jìn)行匹配,當(dāng)容器已滿會返回推理標(biāo)志,當(dāng)滿足識別條件是,就會進(jìn)行依次模型預(yù)測;同時(shí)會清理前 20 幀數(shù)據(jù),繼續(xù)填充識別結(jié)果等待下一次滿足條件。
if (flag_stgcn)
{
List> predict_points = mot_point.get_points();
for (int p = 0; p < predict_points.Count; p++)
{
Console.WriteLine(predict_points[p].Count);
fall_down_result = stgcn_predictor.predict(predict_points[p]);
}
}
stgcn_predictor.draw_result(ref visualize_frame, fall_down_result, person_result.bboxs[0]);
摔倒識別結(jié)果為是否摔倒以及對應(yīng)的權(quán)重,此處主要是在滿足條件的情況下,進(jìn)行一次行為識別,并將識別結(jié)果繪制到圖像上。
模型聯(lián)合部署實(shí)現(xiàn)行人摔倒識別
5.5
通過行人跟蹤、關(guān)鍵點(diǎn)識別以及行為識別三個(gè)模型聯(lián)合預(yù)測,可以實(shí)現(xiàn)行人的行為識別,其識別效果如圖 14 所示。在該圖中分別包含了三個(gè)模型的識別結(jié)果:行人位置識別與跟蹤是通過 PP-YOLOE 模型實(shí)現(xiàn)的,該模型為下一步關(guān)鍵點(diǎn)識別提供了圖像范圍,保證了關(guān)鍵點(diǎn)識別的結(jié)果;人體骨骼關(guān)鍵點(diǎn)識別時(shí)通過 dark_hrnet 模型實(shí)現(xiàn),為后續(xù)行為識別提供了輸入;最終的行為識別通過 ST-GCN 模型實(shí)現(xiàn),其識別結(jié)果會知道了行人預(yù)測框下部,可以看到預(yù)測結(jié)果與行人是否摔倒一致。

Part6
總結(jié)
在該項(xiàng)目中,基于 C# 和 OpenVINO 聯(lián)合部署 PP-YOLOE 行人檢測模型、dark_hrnet 人體關(guān)鍵點(diǎn)識別模型以及 ST-GCN 行為識別模型,實(shí)現(xiàn)行人摔倒檢測。
在該項(xiàng)目中,主要存在的難點(diǎn)一是 PP-YOLOE 模型無法直接使用 OpenVINO 部署,需要進(jìn)行裁剪,裁剪掉無法使用的節(jié)點(diǎn),并根據(jù)裁剪的節(jié)點(diǎn),處理模型的輸出數(shù)據(jù);難點(diǎn)二是處理好行人預(yù)測與關(guān)鍵點(diǎn)模型識別內(nèi)容的關(guān)系,在進(jìn)行多人識別時(shí),要結(jié)合行人識別模型進(jìn)行對應(yīng)的人體關(guān)鍵點(diǎn)識別,并且要當(dāng)前幀識別結(jié)果要對應(yīng)上一幀行人識別結(jié)果才可以保證識別的連續(xù)性。
-
英特爾
+關(guān)注
關(guān)注
61文章
10285瀏覽量
179800 -
視頻監(jiān)控
+關(guān)注
關(guān)注
17文章
1730瀏覽量
67635 -
語言模型
+關(guān)注
關(guān)注
0文章
570瀏覽量
11288
原文標(biāo)題:行人摔倒檢測 - 在英特爾開發(fā)套件上基于 OpenVINO? C# API 部署 PP-Human | 開發(fā)者實(shí)戰(zhàn)
文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于C#和OpenVINO?在英特爾獨(dú)立顯卡上部署PP-TinyPose模型
將英特爾?獨(dú)立顯卡與OpenVINO?工具套件結(jié)合使用時(shí),無法運(yùn)行推理怎么解決?
為什么無法檢測到OpenVINO?工具套件中的英特爾?集成圖形處理單元?
介紹英特爾?分布式OpenVINO?工具包
英特爾BOOT Loader開發(fā)套件-高級嵌入式開發(fā)基礎(chǔ)
使用英特爾物聯(lián)網(wǎng)商業(yè)開發(fā)套件改變世界
產(chǎn)業(yè)級預(yù)訓(xùn)練模型的實(shí)時(shí)行人分析工具PP-Human
C#調(diào)用OpenVINO工具套件部署Al模型項(xiàng)目開發(fā)項(xiàng)目
基于OpenVINO?工具包部署飛槳PP-Human的全流程
基于OpenVINO在英特爾開發(fā)套件上實(shí)現(xiàn)眼部追蹤
基于英特爾開發(fā)套件的AI字幕生成器設(shè)計(jì)
基于OpenVINO C# API部署RT-DETR模型
基于英特爾哪吒開發(fā)者套件平臺來快速部署OpenVINO Java實(shí)戰(zhàn)
使用英特爾哪吒開發(fā)套件部署YOLOv5完成透明物體目標(biāo)檢測
C#中使用OpenVINO?:輕松集成AI模型!
行人摔倒檢測-在英特爾開發(fā)套件上基于OpenVINO? C# API部署PP-Human
評論