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