鄭 曉, 王淑琴, 張文聰, 鄭京瑞, 周 游
1(天津師范大學 軟件學院, 天津 300387)
2(天津師范大學 計算機與信息工程學院, 天津 300387)
安全帽能夠有效減少頭部和頂部受到的壓力, 保護人的頭部免受侵害[1], 是不可替代的防護工具.不佩戴安全帽等不安全行為是導致工程現(xiàn)場事故發(fā)生的主要原因.因此, 長期以來工人不安全行為管理一直被認為是預防和控制工程現(xiàn)場生產事故的根本途徑[2].由于工程現(xiàn)場范圍較大、工作時間長, 使用人工方法對安全帽的佩戴情況進行監(jiān)管, 不僅耗費大量人力物力, 而且容易出現(xiàn)漏檢情況.
隨著計算機視覺技術的快速發(fā)展, 基于深度學習的目標檢測算法取得了巨大的成功.基于深度學習的目標檢測算法可劃分為兩個類別, 一類是two stage檢測器, 主要包括R-CNN[3], Fast R-CNN[4], Faster R-CNN[5]等, 首先產生多個可能包含待測物體候選框(proposal),再對這些候選框進行位置的修定和目標的分類, 得到最后的檢測結果.另一類是one stage檢測器, 以YOLO系列, SSD[6], RetinaNet[7]為代表, 不產生候選框, 直接在CNN網絡中提取特征完成目標的分類與定位, 整個過程只需要一步, 檢測速度更快.2020年4月, Bochkovskiy等人[8]提出YOLOv4目標檢測算法, 在YOLOv3[9]的基礎上加入了各種可以提升精度的tricks, 速度保持不下降的情況下, 在MS COCO數(shù)據(jù)集上達到了43.5% AP,實現(xiàn)了精度和速度的最優(yōu)平衡.
采用基于深度學習的目標檢測方法對安全帽佩戴情況進行檢測已成為趨勢.施輝等人[10]改進YOLOv3目標檢測方法, 使用圖像金字塔結構來獲取多尺度的特征圖, 進行位置和類別的預測, 從而提高安全帽的識別精度; 徐先峰等人[11]使用輕量級網絡 MobileNet替換SSD中的特征提取網絡VGG, 來提高安全帽檢測的速度, 在安全帽檢測模型上進行改進.但潘存瑞等人[12]指出: 工地現(xiàn)場人員組成復雜, 流動性強, 管理難度大, 僅進行安全帽佩戴檢測無法實現(xiàn)對違規(guī)人員的管理, 因此一些研究人員開始致力于安全帽佩戴監(jiān)管系統(tǒng)的研究, 如樊鈺[13]設計的安全帽檢測系統(tǒng)可以對報警區(qū)域出現(xiàn)行人未佩戴安全帽進行報警, 但無法進行有效的違規(guī)圖片抓取、違規(guī)人數(shù)統(tǒng)計以及解決重復警告問題, 仍無法滿足當前工程現(xiàn)場的實際需求.
本文設計并開發(fā)了一套安全帽智能監(jiān)管系統(tǒng).首先根據(jù)實際應用場景對安全帽數(shù)據(jù)集進行了擴充, 對當前主流的目標檢測模型進行實驗對比, 最終選用速度和精度均具優(yōu)勢的YOLOv4目標檢測模型, 使用K-means算法針對安全帽目標較小的特點對數(shù)據(jù)集進行聚類分析生成新的先驗框, 并進行訓練得到檢測模型, 提高安全帽的識別精度, 實現(xiàn)對監(jiān)控中工人是否佩戴安全帽的精確實時檢測, 并在YOLOv4檢測模型的基礎上結合跟蹤模型DeepSORT, 為每個檢測目標標記一個唯一的ID, 有效解決違規(guī)人員重復警告和無法進行違規(guī)數(shù)據(jù)統(tǒng)計, 違規(guī)圖片抓取的問題; 并結合視頻推拉流,OpenCV圖像處理, ECharts數(shù)據(jù)可視化等技術, 最終制作成具有安全帽檢測、檢測視頻實時直播、違規(guī)人員實時警告、違規(guī)圖片抓取并展示、違規(guī)數(shù)據(jù)可視化監(jiān)測、查看違規(guī)歷史圖片等多功能的跨平臺移動APP,可同時兼容IOS和安卓設備, 方便管理人員隨時隨地使用, 真正實現(xiàn)對工程現(xiàn)場工人不佩戴安全帽行為的有效監(jiān)管.
系統(tǒng)功能模塊如圖1所示.(1)用戶管理.用戶初次使用系統(tǒng)時, 可以使用個人信息進行注冊, 注冊并登錄成功后方可使用該系統(tǒng); 若用戶忘記密碼, 可以通過修改找回密碼繼續(xù)使用系統(tǒng).(2)安全帽檢測跟蹤.對監(jiān)控視頻流中的工人進行安全帽佩戴檢測和跟蹤.(3)狀態(tài)管理.用戶可以在APP端實時查看經過安全帽檢測跟蹤后的監(jiān)控視頻, 若視頻中出現(xiàn)違規(guī)人員, 則自動進行違規(guī)圖片抓取, 并觸發(fā)彈窗警告提醒用戶, 同時可以點擊“歷史違規(guī)”按鈕, 查看歷史違規(guī)圖片, 將違規(guī)數(shù)據(jù)通過柱狀圖、折線圖等多種格式進行展示, 同時可以下載導出違規(guī)數(shù)據(jù), 更加方便用戶監(jiān)管工程現(xiàn)場安全帽佩戴情況.
圖1 安全帽監(jiān)管系統(tǒng)功能模塊圖
基于深度學習的安全帽監(jiān)管系統(tǒng)的架構如圖2所示.通過監(jiān)控攝像頭, 對工程現(xiàn)場監(jiān)控視頻進行采集,在本地服務器對視頻進行安全帽檢測跟蹤處理, 并將處理中的視頻進行實時推流以及違規(guī)數(shù)據(jù)和圖片發(fā)送至云端, 在云端進行大數(shù)據(jù)的分析、統(tǒng)計和存儲, 最后在跨平臺APP終端進行展示.
圖2 安全帽監(jiān)管系統(tǒng)架構圖
借助FFmpeg和本地服務器Nginx可以將視頻數(shù)據(jù)轉換成視頻流實時上傳至云端服務器, 在客戶端進行拉流展示從而實現(xiàn)直播的效果, 推拉流過程如圖3所示.其中, 推流過程見圖3左側日志, 拉流過程如圖3右側視頻所示.為了在移動APP端實時展示經過安全帽檢測和跟蹤后的監(jiān)控視頻, 方便管理人員實時查看工程現(xiàn)場的狀況.本系統(tǒng)在視頻推拉流的基礎上, 使用OpenCV函數(shù)將監(jiān)控視頻流截取成一幀一幀的圖片放入隊列中, 調用安全帽檢測跟蹤模型, 再將檢測后的圖片以流的形式經過FFmpeg進行推流.
圖3 FFmpeg推流和VLC拉流過程圖
由于手機瀏覽器無Flash插件, 無法直接在移動APP上使用video.js拉取FFmpeg推送的rtmp圖片流, 本系統(tǒng)使用開源Smart-rtmpd服務器將rtmp協(xié)議的圖片流轉換成hls協(xié)議的m3u8格式圖片流, 最終在移動APP端成功拉流顯示, 從而實現(xiàn)監(jiān)控視頻的邊檢測邊展示.
對監(jiān)控視頻中的安全帽進行檢測跟蹤過程中, 使用track.people_id記錄檢測結果為“person”的ID號,track.track_id為當前畫面中檢測到新目標的ID號, 如果track.track_id大于track.people_id并且當前畫面中新目標的標簽class_names[0]為“person”時, 則認為畫面出現(xiàn)新的未佩戴安全帽的工人, 更新記錄違規(guī)人數(shù)unsafety_count的值, 調用OpenCV函數(shù)對當前畫面進行截取, 并連接數(shù)據(jù)庫將圖片保存至數(shù)據(jù)庫的違規(guī)圖片數(shù)據(jù)表中并更新數(shù)據(jù)庫中的違規(guī)數(shù)據(jù)信息.
通過編譯一組完成特定功能的SQL語句完成數(shù)據(jù)的存儲過程.本系統(tǒng)將數(shù)據(jù)存儲在云端MySQL數(shù)據(jù)庫中, 保證系統(tǒng)數(shù)據(jù)信息的安全.后端采用PHP語言進行數(shù)據(jù)存取, 完成前后端的交互.存儲數(shù)據(jù)包括移動APP的用戶信息表app_user_data, 包含用戶名和密碼,手機號以及性別等字段; 違規(guī)數(shù)據(jù)表app_illegal_data,包含未佩戴安全帽的總人數(shù), 以及違規(guī)日期等字段; 違規(guī)圖片數(shù)據(jù)表app_illegal_image, 主要包括違規(guī)圖片的ID號, 存入時間, 名稱以及存放的路徑等字段.
用戶使用移動APP時, 應用與服務器建立全雙工通道.當服務器數(shù)據(jù)庫中違規(guī)圖片數(shù)據(jù)表發(fā)生更新時,違規(guī)圖片數(shù)據(jù)表的觸發(fā)器會啟動外部PHP函數(shù), 提取對應的圖片數(shù)據(jù), 并使用ws.broadcast函數(shù)廣播到與服務器相連的多個用戶, 用戶端ws.onmessage函數(shù)對接收到的圖片信息進行解析顯示, 從而實現(xiàn)違規(guī)圖片在移動APP端的展示.
用戶查看違規(guī)數(shù)據(jù)時, 移動APP發(fā)送Ajax請求,服務器接收到Ajax請求后, 服務器啟動PHP函數(shù)讀取數(shù)據(jù)庫中的違規(guī)數(shù)據(jù), 并將數(shù)據(jù)以JSON格式發(fā)送給用戶, 用戶端解析接收到的JSON串, 使用ECharts內部函數(shù)將數(shù)據(jù)添加到對應的ECharts表格函數(shù)中生成表格, 并以多種圖形形式展示違規(guī)數(shù)據(jù)分別如圖4和圖5所示, 從而實現(xiàn)違規(guī)數(shù)據(jù)可視化, 使用戶更加方便的分析工程現(xiàn)場近期未佩戴安全帽的數(shù)據(jù).
圖4 柱狀圖數(shù)據(jù)展示
圖5 折線圖數(shù)據(jù)展示
如圖6所示, YOLOv4使用的主干提取網絡CSPDarknet53是在Darknet53 (YOLOv3主干網絡)的基礎上使用CSPnet結構[14]產生的, 在降低計算復雜度的同時還可以保證準確率.同時為了更好地提取融合特征, YOLOv4引入SPP (空間金字塔池化層)結構和PAN (路徑聚合網絡)結構.其中在SPP模塊中, 使用1×1, 5×5, 9×9, 13×13 的池化核進行最大池化, 使得空間尺寸大小得以保留, 然后將不同尺度的特征圖進行連接作為輸出, 可以更有效的增加主干特征的接收范圍, 顯著的分離上下文特征.PAN結構則借鑒了應用于圖像分割領域的PANet[15], 可以自底向上傳達強定位特征, 進一步提高特征提取的能力.
圖6 YOLOv4網絡結構
針對開源安全帽數(shù)據(jù)集[16]缺乏實際應用場景數(shù)據(jù)這一問題, 在原數(shù)據(jù)集的基礎上進行擴充.采集了多個工程現(xiàn)場的監(jiān)控視頻, 并將視頻中符合場景需要的圖片進行裁剪和截取, 然后使用labelImg進行數(shù)據(jù)標注如圖7所示.最終選取8805張圖片作為數(shù)據(jù)集, 并隨機選取其中7924張作為訓練數(shù)據(jù)集, 881張作為測試數(shù)據(jù)集.
圖7 安全帽數(shù)據(jù)集標注
在安全帽數(shù)據(jù)集上使用K-means算法進行聚類分析, 生成新的先驗框.YOLOv4模型使用的9個先驗框是在VOC數(shù)據(jù)集上計算得出的, 目標大小差距很大,而安全帽數(shù)據(jù)集以小目標為主, 原先驗框的尺寸和數(shù)據(jù)集中目標的尺寸差異較大, 會導致檢測模型的精度不高, 因此使用K-means算法對數(shù)據(jù)集進行聚類分析,得到9個新的先驗框分別為(7, 15), (9, 19), (11,23),(14, 29), (20, 36), (28, 49), (41, 70), (64, 110), (120, 207).并分別使用原先驗框和新先驗框對YOLOv4檢測模型進行訓練, 對比檢測效果如圖8所示, 檢測圖片中的藍色框為數(shù)據(jù)集的標注框, 紅色框和綠色框為模型的檢測結果, 其中綠色框為正確檢測的目標框, 反之紅色框則為錯誤檢測的目標框.檢測結果表明, 在安全帽數(shù)據(jù)集上使用K-means算法進行聚類分析生成新的先驗框, 并進行訓練得到的YOLOv4檢測模型對安全帽的檢測更加精準.
圖8 使用原、新先驗框訓練模型后檢測效果對比
為了進一步驗證在YOLOv4模型使用K-means算法生成的新先驗框的有效性, 檢測訓練模型的性能,在相同的實驗環(huán)境下分別使用YOLOv3、SSD、Faster R-CNN對數(shù)據(jù)集進行訓練, 再使用得到的訓練模型進行測試, 實驗結果如圖9所示.使用經過K-means算法聚類分析得到的新先驗框進行訓練的YOLOv4檢測模型比使用原先驗框進行訓練的YOLOv4模型MAP(AP表示單個檢測類別的平均精度, MAP則是多個類別AP的平均值, 即檢測的準確率)提高0.81%, 且高于YOLOv3的85.08%, SSD的77.11%, 以及Faster RCNN的88.66%, FPS (每秒能檢測的幀數(shù), 即模型的檢測速度)高達24, 性能最優(yōu), 完全滿足工業(yè)需求.
圖9 各模型實驗結果對比
目標跟蹤SORT算法[17]使用卡爾曼濾波算法預測當前位置, 使用匈牙利算法進行逐幀關聯(lián), 在高幀速率下能夠取得良好的性能, 但是對于物體遮擋情況幾乎沒有處理, 容易導致ID切換.相比于SORT, DeepSORT算法[18]使用了更加可靠的度量來代替關聯(lián)度量, 還加入了級聯(lián)匹配以解決目標較長時間被遮擋的情況.因此本文采用DeepSORT算法對檢測目標進行跟蹤, 為每個人標記一個唯一的ID, 以避免重復警告, 并能實現(xiàn)對違規(guī)人員的正確統(tǒng)計.
(1) 狀態(tài)估計
DeepSORT使用一個8 維參數(shù) (u,v,r,h,x˙,y˙,r˙,h˙)來描述目標在某時刻的運動狀態(tài), 前4個參數(shù)分別表示目標檢測框的中心點坐標、長寬比、高度, 后4個參數(shù)為對應在圖像坐標系上的相對速度, 并使用具有等速運動和線性觀測模型的標準卡爾曼濾波器預測更新運動狀態(tài)(u,v,r,h).
DeepSORT使用卡爾曼濾波器預測框和目標檢測框之間的馬氏距離來描述運動信息的關聯(lián)程度.計算公式為:
其中,dj表示第j個目標檢測框,yi表示第i個跟蹤器,Si表示檢測框位置和跟蹤器預測位置之間的協(xié)方差, 如果計算得到的馬氏距離小于閥值, 則表示運動信息關聯(lián)成功.
如果僅使用運動信息進行關聯(lián)匹配, 當運動的不確定性較高時容易導致ID切換, 因此DeepSORT引入余弦距離對外觀信息的關聯(lián)程度進行度量.計算公式如下:
其中,ri為每個目標檢測框dj的特征向量,表示余弦相似度, 1-余弦相似度表示余弦距離.
DeepSORT使用運動信息和外觀信息兩種度量的加權作為最終度量, 計算公式為:
其中, λ是一個超參數(shù), 默認為0.只有同時滿足兩個度量閾值條件時, 才認為第j個目標檢測和第i個目標跟蹤之間實現(xiàn)了正確的關聯(lián).
(2) 級聯(lián)匹配
如果一個目標被長時間遮擋, 就會大大增加卡爾曼濾波器預測的不確定性.因此為了讓目標優(yōu)先匹配消失時間較短的跟蹤器, 首先為每個檢測器分配一個設有time_since_update 參數(shù)的跟蹤器, 如果跟蹤器順利完成匹配和更新, 則重置參數(shù)為0, 否則對參數(shù)進行更新+1.級聯(lián)匹配就是根據(jù)這個參數(shù)進行匹配, 參數(shù)小、消失時間較短的跟蹤器優(yōu)先匹配, 從而讓當前目標匹配上距離當前時刻較近的跟蹤器.級聯(lián)匹配能夠保證較近出現(xiàn)的目標具有較大的優(yōu)先權, 從而有效解決目標被長時間遮擋的情況.
在YOLOv4目標檢測算法的基礎上, 結合跟蹤算法DeepSORT, 最終實現(xiàn)安全帽的自動檢測跟蹤, 其算法的處理流程如圖10所示, 首先獲取監(jiān)控視頻流的輸入, 對跟蹤器參數(shù)進行初始化; 然后調用YOLOv4算法對當前幀進行安全帽檢測并利用NMS (非極大值抑制)算法對檢測框進行篩選, 以及使用卡爾曼濾波器對上一幀圖片中的目標進行預測, 然而檢測出的目標并不能與上一幀的目標對應起來, 因此需要融合運動信息和外觀信息使用級聯(lián)匹配策略進行數(shù)據(jù)關聯(lián), 并對未匹配的檢測, 未確認狀態(tài)和未匹配的跟蹤器進行IOU匹配, 利用最后的匹配結果對跟蹤器和特征集等進行更新, 繼續(xù)使用新的跟蹤器對視頻流進行預測, 同時將當前跟蹤結果進行輸出.
圖10 安全帽檢測跟蹤算法處理流程
使用上述安全帽檢測跟蹤算法對視頻處理的效果如圖11所示, 左上角顯示當前檢測幀率FPS、當前畫面中目標的個數(shù)Current Object Counter和檢測到目標的總個數(shù)Total Object Counter.
圖11 安全帽檢測和跟蹤后的處理效果
視頻界面如圖12所示, 可以實時展示經過安全帽檢測和跟蹤后的監(jiān)控視頻, 并且視頻下方可以實時展示抓取的違規(guī)圖片, 方便管理人員查看.點擊“查看歷史”按鈕進入違規(guī)歷史圖片如圖13所示, 查看歷史違規(guī)人員圖片.檢測視頻也可橫屏放大觀看, 當畫面中出現(xiàn)未佩戴安全帽的人員時, 就會觸發(fā)警告框進行警告提醒, 如圖14所示.
圖12 檢測視頻直播界面
圖13 違規(guī)歷史圖片界面
圖14 違規(guī)警告界面
系統(tǒng)測試環(huán)境如下:
硬件環(huán)境: Windows 10專業(yè)版操作系統(tǒng), 16 GB內存, 1T硬盤, i5處理器, Android 7.0手機, IOS 13手機.
軟件環(huán)境: HbuilderX編譯器, 夜神模擬器.
使用HbuilderX編譯器打包安卓和IOS應用安裝包, 并分別安裝在Android 7.0和IOS 13設備上進行測試.在聯(lián)網環(huán)境下對軟件進行測試, 初次打開應用耗時1-3 s.注冊登錄后各功能使用正常.可實時查看檢測視頻直播畫面并接收實時違規(guī)警告, 點擊按鈕可查看違規(guī)歷史圖片, 進入違規(guī)數(shù)據(jù)界面可刷新違規(guī)數(shù)據(jù)、查看可視化表格以及導出違規(guī)數(shù)據(jù).經測試, 系統(tǒng)運行良好, 魯棒性強, 各項功能均符合設計要求.
本文介紹了基于深度學習的安全帽智能監(jiān)管系統(tǒng),該安全帽監(jiān)管系統(tǒng)可以準確快速地完成監(jiān)控視頻中安全帽的檢測和跟蹤, 若有未佩戴安全帽的違規(guī)人員出現(xiàn), 在移動APP端可以實時發(fā)送警告信息提醒管理人員, 使管理人員可以盡快對未佩戴安全帽的人員做出提醒和處理, 以有效減少安全事故的發(fā)生; 并對違規(guī)人員進行有效的圖片抓取, 相對于存儲監(jiān)控視頻, 只存儲違規(guī)圖片, 可以大大節(jié)省存儲空間, 并可以作為后期管理人員處理未佩戴安全帽人員的有效證據(jù); 實現(xiàn)違規(guī)數(shù)據(jù)的可視化展示, 可以幫助管理人員了分析工程現(xiàn)場違規(guī)數(shù)據(jù)的變化情況, 為管理人員做出響應的安全決策提供有效依據(jù), 能夠真正實現(xiàn)工程現(xiàn)場的智慧化管理, 具有重要的推廣意義.并希望該系統(tǒng)能進一步推廣至更多工程現(xiàn)場, 協(xié)助管理人員保障工人的人身安全, 將發(fā)生悲劇的概率降低至零點.