一依疼、人員越界識(shí)別背景描述
實(shí)際生活中某些場(chǎng)景下需要配合攝像頭自動(dòng)識(shí)別危險(xiǎn)區(qū)域痰腮,并在發(fā)現(xiàn)有人員闖入危險(xiǎn)區(qū)域(禁止進(jìn)入?yún)^(qū)域)時(shí)進(jìn)行報(bào)警,確保員工的人身安全律罢。
二膀值、算法目標(biāo)
識(shí)別指定區(qū)域是否有有人越過(guò)改區(qū)域棍丐,并進(jìn)行生成相應(yīng)報(bào)警邏輯。
三沧踏、Aidlux與yolov5簡(jiǎn)介
3.1?Aidlux平臺(tái)——一個(gè)跨平臺(tái)應(yīng)用的系統(tǒng)
Aidlux是基于ARM架構(gòu)的跨生態(tài)(Android/鴻蒙+Linux)一站式AIoT應(yīng)用開(kāi)發(fā)和部署平臺(tái)歌逢。
Aidlux可以進(jìn)行Python版本的AI模型開(kāi)發(fā)和移植,使得開(kāi)發(fā)者可以基于一臺(tái)安卓手機(jī)或者基于一臺(tái)AidBox邊緣設(shè)備進(jìn)行開(kāi)發(fā)翘狱,并且無(wú)縫銜接秘案,在此基礎(chǔ)上同時(shí)帶來(lái)原生Android和原生Linux使用體驗(yàn)。
即Linux上開(kāi)發(fā)的Python代碼潦匈,可以在安卓手機(jī)阱高、邊緣設(shè)備上轉(zhuǎn)換后使用。
一定程度上說(shuō)茬缩,Aidlux簡(jiǎn)化了Android系統(tǒng)設(shè)備上的算法應(yīng)用開(kāi)發(fā)赤惊。
常規(guī)的方式,應(yīng)用在手機(jī)Android時(shí)凰锡,需要將PC上編寫(xiě)的代碼荐捻,封裝成Android SO庫(kù)(C++)。經(jīng)過(guò)測(cè)試后寡夹,封裝JNI調(diào)用SO庫(kù)处面,最終在Android上使用Java調(diào)用JNI,最終再進(jìn)行測(cè)試發(fā)布菩掏』杲牵可以看到,這樣的流程需要一系列的工作人員參與智绸,比如C++野揪、Java、Python的工程師瞧栗。但是大多數(shù)算法人員可能會(huì)用Python更多一些斯稳,比如上面編寫(xiě)的整套算法。而Aidlux將其中的整個(gè)開(kāi)發(fā)流程迹恐,全部打通挣惰,通過(guò)Aidlux平臺(tái),可以將PC端編寫(xiě)的代碼殴边,快速應(yīng)用到Android系統(tǒng)上憎茂。
Aidlux內(nèi)部一方面內(nèi)置了多種深度學(xué)習(xí)框架,便于快速開(kāi)發(fā)锤岸。另外還對(duì)于多種算子進(jìn)行了優(yōu)化加速竖幔,很多算法的性能,也都能達(dá)到實(shí)時(shí)使用是偷。
目前使用Aidlux主要有兩種方式:
(1)邊緣設(shè)備的方式:阿加犀用高通芯片的S855拳氢,和S865制作了兩款邊緣設(shè)備募逞,一款提供7T算力,一款提供15T算力馋评。
(2)手機(jī)設(shè)備的方式:沒(méi)有邊緣設(shè)備的情況下凡辱,可以使用手機(jī)版本的Aidlux,嘗試邊緣設(shè)備的所有功能栗恩。
這里使用的是手機(jī)設(shè)備的方式透乾,通過(guò)下載安裝手機(jī)Aidlux的APP軟件即可。然后將開(kāi)發(fā)的算法通過(guò)Aidlux即可部署到手機(jī)段磕秤。(因?yàn)橹苯釉谑謾C(jī)上操作編程乳乌,較為麻煩,市咆,因此可以通過(guò)IP的方式汉操,直接映射到電腦上操作。具體操作方式將在后面文章另做詳述蒙兰,在此不做贅述)磷瘤。
3.2 yolov5
關(guān)于yolov5方面,江大白老師有做過(guò)yolo系列的相關(guān)內(nèi)容搜变,強(qiáng)烈推薦參考:
深入淺出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基礎(chǔ)知識(shí)完整講解
深入淺出Yolo系列之Yolov5核心基礎(chǔ)知識(shí)完整講解
四采缚、業(yè)務(wù)邏輯分析及算法實(shí)現(xiàn)
越界識(shí)別的功能實(shí)現(xiàn),主要包括人體目標(biāo)檢測(cè)挠他、人體追蹤及越界識(shí)別判斷三部分
4.1 行人目標(biāo)檢測(cè)
這一部分主要利用YOLOv5算法實(shí)現(xiàn)扳抽。
首先基于YOLOv5目標(biāo)檢測(cè)算法訓(xùn)練一個(gè)檢測(cè)行人(person)的權(quán)重person.pt。
訓(xùn)練得到的pt權(quán)重可用于在PC端進(jìn)行推理測(cè)試殖侵,但是要是在邊緣端Aidlux上進(jìn)行使用贸呢,需要將pt模型轉(zhuǎn)為tflite模型,再將tflite模型移植到Aidlux上使用拢军,并適當(dāng)修改對(duì)應(yīng)推理代碼楞陷,實(shí)現(xiàn)在Aidlux的推理。
(1)利用export.py文件實(shí)現(xiàn)模型轉(zhuǎn)化茉唉,主要修改其中的三個(gè)地方固蛾,如下所示:
(2)Aidlux視頻推理代碼
要將PC段yolov5的推理代碼應(yīng)用到Aidlux上,需要結(jié)合Aidlux平臺(tái)自身的一些專屬函數(shù)接口對(duì)代碼做適當(dāng)調(diào)整赌渣,主要包括三個(gè)部分:
a魏铅、加載相關(guān)的函數(shù)庫(kù)
b、模型初始化及加載
c坚芜、視頻讀取&模型推理代碼
效果圖示:
4.2 目標(biāo)追蹤
目標(biāo)追蹤的實(shí)現(xiàn)主要是在實(shí)現(xiàn)目標(biāo)檢測(cè)的前提下,補(bǔ)充目標(biāo)追蹤功能斜姥,即通過(guò)追蹤并繪制每個(gè)目標(biāo)的track_id信息實(shí)現(xiàn)鸿竖。主要實(shí)現(xiàn)代碼部分如下:
4.3 越界識(shí)別判斷
(1)越界監(jiān)測(cè)區(qū)域繪制
實(shí)現(xiàn)越界識(shí)別沧竟,即檢測(cè)某個(gè)感興趣區(qū)域,是否有人違規(guī)進(jìn)入缚忧。所以首先需要設(shè)置一個(gè)感興趣區(qū)域(監(jiān)測(cè)區(qū)域)悟泵,然后結(jié)合目標(biāo)追蹤判斷是否有人員闖入檢測(cè)區(qū)域內(nèi)。
代碼如下:
(2) 人體檢測(cè)監(jiān)測(cè)點(diǎn)調(diào)整
繪制好監(jiān)測(cè)區(qū)域后闪水,結(jié)合前面目標(biāo)檢測(cè)追蹤部分糕非,便可進(jìn)行越界識(shí)別判斷。這里需要注意的是在實(shí)際業(yè)務(wù)場(chǎng)景中球榆,通常判斷人體越界的點(diǎn)朽肥,主要用的是人體腳部的點(diǎn)。使用yolov5算法得到的是人物檢測(cè)框的四個(gè)點(diǎn)信息[x持钉,y衡招,w,h]每强,即目標(biāo)框的左上角點(diǎn)的x始腾,y坐標(biāo)和寬w、高h(yuǎn)空执,因此需要通過(guò)代碼浪箭,轉(zhuǎn)換成人體下方的點(diǎn),即[左上角點(diǎn)x+1/2*寬w辨绊,左上角點(diǎn)y+高h(yuǎn)]山林。轉(zhuǎn)換代碼如下:
(3) 人體狀態(tài)追蹤判斷
獲取了人體的坐標(biāo)信息,需要結(jié)合繪制的檢測(cè)區(qū)坐標(biāo)邢羔,判斷人體是否在監(jiān)測(cè)區(qū)域內(nèi)驼抹,并將將人體的狀態(tài)進(jìn)行區(qū)分。比如將人體在監(jiān)測(cè)區(qū)域內(nèi)設(shè)置為1拜鹤,不在監(jiān)測(cè)區(qū)域內(nèi)設(shè)置為-1框冀。所以代碼中需要判斷每個(gè)人的運(yùn)動(dòng)狀態(tài),將每個(gè)人運(yùn)動(dòng)軌跡中敏簿,每一幀在圖片上的狀態(tài)統(tǒng)計(jì)下來(lái)明也。
(4)越界行為判斷
基于上面對(duì)行人在視頻中每一幀的移動(dòng)軌跡中狀態(tài)的記錄,便可進(jìn)一步判斷行人是否越界惯裕。比如某個(gè)人當(dāng)前一幀的狀態(tài)是-1温数,后一幀的狀態(tài)變成1時(shí),說(shuō)明剛剛進(jìn)入越界區(qū)域蜻势,此時(shí)就將當(dāng)前的圖片進(jìn)行保存撑刺,留作告警記錄。代碼如下:
4.4 越界識(shí)別&系統(tǒng)告警
一般在實(shí)際應(yīng)用的項(xiàng)目業(yè)務(wù)系統(tǒng)中握玛,需要對(duì)最后檢測(cè)的報(bào)警信息進(jìn)行通知警告够傍,因此可進(jìn)一步將記錄的報(bào)警信息進(jìn)行相應(yīng)處理甫菠。