鄭楚偉,林 輝
(韶關學院智能工程學院,廣東 韶關 512005)
工廠安全問題是工業(yè)界極為關注的一個問題。如何從源頭上預防重大安全事故的發(fā)生、杜絕各種不文明施工,是工廠安全生產的重中之重。在工廠的施工現場,正確佩戴安全帽能有效地防止和減輕工人在作業(yè)過程中安全事故對頭部的傷害。目前在施工現場對安全帽佩戴情況的監(jiān)管主要依賴人工,該方式效率較低且耗費人力。
鑒于此,國內很多學者采用圖像識別技術進行了安全帽佩戴檢測研究。石永恒等[1]采用YOLO算法訓練來獲取一個最優(yōu)檢測模型,通過對模型測試,得到YOLO相較于其他單階段檢測算法來說有著更好的檢測效果的結論。張錦等[2]提出一種基于改進YOLOv5的安全帽檢測新方法,使用K-means++算法重新設計先驗框尺寸,在特征提取網絡中引入多光譜通道注意力模塊,提升了模型的平均準確率。吳衛(wèi)紅[3]在YOLO算法的基礎上,用ResNet網絡替代原來的網絡,并修改該網絡結構,添加注意力機制,有效提高安全帽檢測準確率。徐傳運等[4]提出一種基于場景增強的樣本擴充算法擴充安全帽佩戴數據集,將新數據集用于訓練YOLOv4的安全帽佩戴檢測模型,提升安全帽佩戴檢測的精度。孫國棟等[5]提出了一種通過融合自注意力機制來改進Faster R-CNN的目標檢測算法,通過自注意力層來捕獲多個尺度上的全局信息,然后在區(qū)域建議網絡的訓練中通過錨框補選增強的方法讓小目標信息得到更多的訓練,強化了網絡對于小尺度目標的表達能力,具有較好的檢測效果。李天宇等[6]建立了一種基于注意力機制的雙向特征金字塔的安全帽檢測卷積神經網絡,將跳躍連接和注意力機制CBAM技術引入雙向特征融合的特征金字塔網絡PANet模塊中,采用了CIoU來代替IoU進行優(yōu)化錨框回歸預測,實現了對安全帽佩戴實時高精度檢測。張乾等[7]針對隨機蕨算法中二元測試的對數和蕨的數量難以確定問題,采用了網格搜索與交叉驗證法改進并應用于安全帽檢測應用。孫世丹等[8]通過使用加權核K-means聚類算法對YOLOv3網絡模型中的聚類算法進行優(yōu)化,選取更適合小目標檢測的Anchor Box,以及優(yōu)化YOLO網絡內部的Darknet特征網絡層,提高了安全帽佩戴檢測的準確率。錢昱成等[9]設計了一種與特征圖深度融合的改進YOLOv3算法,它能夠捕捉到原圖像中更多中小型目標物體的圖像信息,使得系統(tǒng)模型更加關注于圖像信息,實現了對安全帽佩戴檢測的任務。張勇等[10]提出了一種基于目標算法YOLOV3的安全帽檢測方法,采用DenseNet方法處理低分辨率的特征層,并使用K-means聚類算法對數據集中的目標邊框重新進行聚類,使得模型更加適應安全帽領域的應用場景。王成龍等[11]提出了一種采用面部特征與神經網絡相結合的算法,以多任務級聯(lián)卷積神經網絡提取臉部特征與VGG深度卷積神經網絡相結合進行安全帽檢測,能有效監(jiān)督安全帽佩戴情況。岳詩琴等[12]以SSD網絡作為基礎,采用ResNet-50代替?zhèn)鹘y(tǒng)的VGG-16作為SSD的主干網絡提取特征,并在附加層中引入BN層,加快網絡的收斂速度,提高檢測精確度。Guobing Yan等[13]提出了一種改進傳統(tǒng)圖像處理方法的雙通道卷積神經網絡(DCNN)模型,在AlexNet模型的基礎上,利用兩個獨立的CNN對工人的圖像特征進行提取,將傳統(tǒng)的機器學習方法與隨機森林(RF)相結合,提出了一種基于DCNN和RF的工人頭盔智能識別算法。
上述方法都取得了較好的檢測效果,但具體實施時,應用部署不便??紤]到近年來百度AI智能云平臺的快速發(fā)展,鑒于此,本文基于百度AI智能云平臺設計一個安全帽佩戴檢測系統(tǒng),用于智慧工廠、智慧工地、智慧礦山和智慧城市的安全生產智能化管理。運用人工智能技術進行智能視頻分析,實時檢測施工人員是否正確佩戴安全帽,為施工人員的人身安全提供有力保障。
本文所設計的基于百度AI智能云平臺進行安全帽佩戴檢測的智能監(jiān)控系統(tǒng),在QT環(huán)境下調用OpenCV庫讀取網絡攝像頭數據,將監(jiān)控視頻實時上傳到QT人機界面中,并將抽幀圖像進行base64編碼和URL編碼后,調用百度AI智能云平臺的人體檢測與屬性識別API接口,將返回的JSON數據格式的安全帽佩戴檢測結果和人體框坐標信息進行解析,設計QT人機界面并實時顯示安全帽檢測結果和繪制人體位置框。系統(tǒng)會自動抽幀保留未正確佩戴安全帽的人體圖像,便于后續(xù)查證處罰,同時顯示該監(jiān)控的IP地址,提供違規(guī)工人所在位置,供管理人員及時警告處理,統(tǒng)計違規(guī)行為歷史數據并展示出來,供管理人員查看。本系統(tǒng)工作流程如圖1所示。
圖1 系統(tǒng)流程
攝像頭抽幀的圖像是本系統(tǒng)的輸入數據。本系統(tǒng)根據??低暰W絡攝像頭官方SDK提供的應用程序編程接口,開發(fā)基于QT環(huán)境調用OpenCV庫顯示網絡攝像頭獲取的實時視頻。首先初始化網絡攝像頭SDK,注冊設備并啟動預覽后,開始捕獲實時視頻流,并調用Opencv庫將圖像從YUV格式解碼成RGB格式,然后將視頻流實時顯示在QT人機界面中。在QT工程文件中添加QT+=multimedia和QT+=multimediawidgets后,按 照圖2所示流 程進行操作,讀取攝像頭數據。當檢測到有人未佩戴安全帽的時候,就抓取監(jiān)控區(qū)域內未佩戴安全帽的人體區(qū)域放大并顯示到QT界面中,向管理者展示細節(jié)信息,步驟如圖3所示。
圖2 視頻采集流程
圖3 抓拍違規(guī)人員流程
百度AI智能云平臺提供在線的人體檢測與屬性識別API接口,擁有毫秒級識別響應能力及99.9%的可靠性保障。用戶只需在百度AI智能云平臺注冊成為開發(fā)者后,就可以調用官方SDK提供的API,根據實際任務需求進行二次開發(fā)。
2.2.1 鑒權認證機制
在百度AI智能云平臺注冊賬號后,首先在云控制臺創(chuàng)建人體檢測與屬性識別功能的應用,獲取API Key和Secret Key。隨后,將API Key和Secret Key作為網絡請求的參數,在QT調用libcurl庫,以Post請求的方式向授權服務器地址發(fā)送請求來獲取Access Token。然后對服務器返回的JSON格式的數據進行解析,即可獲取有效期為30天的Access Token。
獲取Access Token后,就可以將其作為URL的附加參數,來調用百度AI智能云平臺提供的人體檢測與屬性識別API進行安全帽佩戴檢測。
2.2.2 圖片Base64和URL編碼轉換
由于通過Http網絡請求在網絡上交換數據時,不同的設備對字符的處理方式有所不同,導致某些特殊字符可能被數據接收方錯誤處理,這是不利于信息傳輸的。所以在圖像上傳到百度AI智能云平臺之前,需要將圖像數據進行Base64編碼,降低傳輸過程中的出錯率。圖片的base64編碼指將一副圖片數據編碼成一串字符串,使用該字符串代替圖像地址。進行Base64編碼之后,要將一些不符合URL規(guī)范的中文字符和其他不允許出現的字符轉換為符合URL規(guī)范的字符,使得在客戶端與服務器的交互過程中不會出現亂碼錯誤[14]。
本系統(tǒng)在客戶端對監(jiān)控視頻的抽幀圖片進行Base64編碼,將圖片轉換為字符串格式,再進行URL編碼,然后通過POST網絡請求的方式將其發(fā)送到百度AI智能云平臺的服務器端。在QT中編碼轉換的實現代碼如下:
2.2.3 百度AI JSON數據的解析
獲得圖片的Base64和URL編碼結果后,就可以向百度AI智能云平臺發(fā)送服務請求了。本文使用QT的網絡模塊向百度AI智能云平臺發(fā)送網絡請求。使用QT網絡模塊進行網絡請求的流程如下。
(1)實 例 化QNetworkAccessManager、QNetworkRequest、QNetworkReply類對象;
(2)設置百度AI智能云平臺網絡請求的的URL;(3)設置網絡請求所需的Header參數信息;
(4)發(fā)送HTTP POST請求到百度AI智能云平臺服務器端,并返回一個QNetworkReply對象,該對象包含服務器返回的應答數據;
(5)啟動定時器,等待請求完成;
(6)獲取響應結果的JSON格式數據。
返回的JSON數據格式例如以下所示:
以上的JSON數據表明當前圖像在坐標(754,176)處有大小為(219,826)的人體被檢測到了,且score參數表示置信度為0.9693506360054。headwear的name表示安全帽檢測結果,有安全帽、普通帽、無帽3種情況,此處表示有0.7862206697464的置信度認為是無帽。
在得到百度AI智能云平臺返回的JSON格式數據后,將使用QT的QJsonDocument、QJsonObject、QJsonArray、QJsonValue模塊對數據進行解析。QJsonDocument提供了一類讀取和寫入JSON數據的方法。對網絡請求返回的JSON數據先用QJsonDocument::fromJson()將其從文本的表示方式轉換為QJsonObject對象。QJsonObject類封裝了一個JSON對象。一個JSON對象是一個鍵值對的列表,通過JSON對象的值類型將數據解析出來即可得到百度AI智能云平臺返回的安全帽佩戴檢測結果。解析步驟如圖4所示。
圖4 解析JSON數據流程
(1)使用函數QJsonDocument::fromJson(),將JSON數據轉換為QJsonDocument類對象;
(2)使用函數QJsonDocument::object()將QJsonDocument類轉換為具體的對象QJsonObject;
(3)用函數QJsonObject.value()進行取值操作,則可獲取第一級的鍵-值對,至此可得到"person_num"的值(人體數量);對安全帽信息的解析需轉入(4);
(4)用函數QJsonObject.value()獲取“person_info”鍵的值,并用函數QJsonValue.toArray()將其轉化為JSON數組QJsonArray類型;
(5)用函數QJsonArray::at(i)來獲取該數組的第i個元素,并使用函數QJsonObject.value()函數轉化為具體的對象QJsonObject,即是檢測結果中第i個人的信息;
(6)用函數QJsonObject.value()取出"attributes"的值,用QJsonValue.toObject()轉換為對象;使用QJsonObject.value()取出“headwear”鍵的值,再用QJsonValue.toObject()轉換為目標對象,使用QJsonObject().value()取出“name”鍵的值,即為佩戴帽子的類型(安全帽/無帽/普通帽);
(7)用函數QJsonObject.value()取出"location"鍵的值,使用QJsonValue.toObject()轉換為對象;使用QJsonObject.value()依 次 取 出“top”、“l(fā)eft”、“width”、“height”鍵的值,即為人體位置的坐標。
QT是一個跨平臺的C++圖形用戶界面庫,其具有C++面向對象的特性,封裝大量的功能模塊可以使得開發(fā)人員快速開發(fā)人機界面。QT自帶消息機制,它利用了信號和槽函數一一對應的機制來完成各個控件之間的信息傳遞,這種機制使得各個模塊之間的交互更加簡潔,同時還可以保證信息發(fā)送的正確性[15]。
本系統(tǒng)在QT Creator軟件中使用C++編寫程序調用QT的庫函數來設計安全帽佩戴檢測系統(tǒng)的人機界面。主界面為視頻監(jiān)控界面,開啟網絡攝像頭之后對視頻流區(qū)域進行抽幀截圖,將圖像進行編碼后上傳至百度AI智能云平臺,借用百度AI智能云平臺的智慧算法能力對上傳的照片進行安全帽佩戴檢測,判斷監(jiān)控下的施工人員是否正確佩戴安全帽。安全帽必須是正確佩戴在頭部才視為正常,如果只是拿在手上的話將視為未佩戴安全帽。
將百度AI智能云平臺的安全帽檢測結果解析出來后,就可以使用QT的QPainter類進行繪圖操作。QPainter提供了高度優(yōu)化的功能來完成大多數圖形用戶界面程序需要的繪圖。通過重載父部件的QWidget::paintEvent()函數,實現在子類窗口部件中進行繪制的事件,然后在程序需要更新繪圖的地方調用repaint()函數來更新窗口部件。根據JSON數據解析結果獲得人體坐標位置,繪制跟蹤框到視頻窗口中,同時,將安全帽佩戴檢測結果數據繪制到視頻區(qū)域。
本系統(tǒng)所設計QT人機界面如圖5所示。人機界面中,用按鍵來作為信號的發(fā)生器,每次點擊按鍵引起信號發(fā)生后,會自動執(zhí)行相應的槽函數,在槽函數里面可以實現我們需要的功能[16]。圖中,按下“分析”按鍵就開始連接網絡攝像頭來獲取實時視頻流,然后抽幀來識別安全帽并將識別結果繪制在視頻流區(qū)域;按下“打開圖片”和“打開視頻”按鍵可以自主選擇電腦路徑下的單張圖像或視頻文件進行識別;“記錄”按鍵內保留未正確佩戴安全帽的人體圖像,提供違規(guī)工人所在位置;“統(tǒng)計”按鍵內展示違規(guī)行為的歷史數據統(tǒng)計結果;“設備管理”可以同時管理多臺網絡攝像頭設備。圖5中,右下角顯示實時監(jiān)控視頻流,當檢測到未佩戴安全帽的時候,就將違規(guī)人員的人體細節(jié)信息展示在大窗口中,供管理者查看。
圖5 QT人機界面展示
系統(tǒng)測試在韶關學院智能工程學院機器人實驗室,將攝像機擺在垂直離地面2.1 m的位置,以模擬施工現場的視頻監(jiān)控。同時,在白天光亮、夜晚黑暗情況進行測試,檢測效果如圖6~7所示。同時,對檢測速度做了測試,統(tǒng)計數據如表1所示。
圖6 白天光亮情況的安全帽佩戴檢測效果
圖7 夜晚黑暗情況的安全帽佩戴檢測效果
表1 安全帽佩戴檢測速度測試數據
測試結果表明,本系統(tǒng)安全帽佩戴檢測識別在白天和夜晚場景下的平均檢測速度可達5幀/s,準確率為95%,系統(tǒng)穩(wěn)定可靠。
本文設計了基于百度AI智能云平臺進行安全帽佩戴檢測的智能監(jiān)控系統(tǒng)。該系統(tǒng)基于QT應用程序開發(fā)框架,調用監(jiān)控攝像頭API獲得視頻流,抽幀后上傳百度AI智能云平臺進行圖像解析,檢測圖像中所有人體并返回人體位置信息,識別人體是否佩戴安全帽。實驗結果表明,本系統(tǒng)在安全帽佩戴檢測的準確率和實時性方面均達到了實際應用的需求,能用于智慧工廠、智慧工地、智慧礦山和智慧城市的安全生產智能化管理,為施工人員的人身安全提供有力保障。