彭道剛 黃孟俊 戚爾江* 胡 捷 楊曉偉
1(上海電力大學自動化工程學院 上海 200090) 2(寶山鋼鐵股份有限公司能源環(huán)保部電廠 上海 201900) 3(上海寶信軟件股份有限公司 上海 201203)
在火力發(fā)電廠生產過程中,充滿著高溫高壓、煤氣、酸堿、強電等復雜環(huán)境;發(fā)電機組中設備多種多樣,工藝繁雜,管線密布;發(fā)電設備高速運轉時,也時常發(fā)生跑冒滴漏現(xiàn)象;巡檢現(xiàn)場存在著各種安全隱患。當前對火電廠設備的巡檢主要依賴人工巡檢,且具有風險性高、穩(wěn)定性差、追溯性低等缺點。
儀表識別技術是火電廠智能巡檢的關鍵點和難點,同時指針式儀表因為其結構簡單、便于維修、精度高、強抗電磁干擾能力等優(yōu)點,被大量用于火電廠設備中。但因無數(shù)據(jù)輸出接口,無法直接被采集,故傳統(tǒng)的儀表讀數(shù)是通過人工讀取的[1]。針對指針式儀表的智能識別讀數(shù),國內許多研究者從不同方面提出許多識別方法。
劉迪等[2]設計了一種能適應非均勻光照環(huán)境的指針式儀表自動判讀系統(tǒng),實現(xiàn)了在復雜光照條件下能準確地判讀儀表的功能。郁飛等[3]提出一種優(yōu)化的指示儀表機器識別方法,這種算法通過拍攝到的指針式油位儀表,對儀表邊緣進行檢測后再通過二值化操作,獲取比較清晰的儀表圖像再通過Hough變換得到指針的方向,從而完成該儀表的智能讀數(shù)和識別;石偉等[4]提出一種改進的Hough變換提取直線的方法,該算法能有效提升指針式儀表識別的穩(wěn)定性。上述算法對所拍攝圖像的質量有一定的條件,才能準確地將儀表指針和表盤區(qū)分開。但在實際的檢測環(huán)境中,同時滿足以上要求有一定的難度。當前火電廠指針式儀表智能識別讀數(shù)的研究還處于理想狀態(tài)下的實驗數(shù)據(jù),比較少能在火電廠復雜場景中直接智能化識別出指針式儀表讀數(shù)。
針對上述面臨的問題,提出一種基于YOLOv4[5]和改進Hough變換相結合的指針儀表檢測算法,通過搭載攝像頭的巡檢機器人在檢測現(xiàn)場拍攝帶有指針式儀表的圖像并傳輸至服務器,然后服務器通過提出的儀表檢測算法便可完成自主讀取儀表數(shù)據(jù)的操作。該算法有儀表識別和指針檢測兩個關鍵過程。指針式儀表識別主要基于YOLOv4目標檢測算法完成對儀表的識別和定位和提取,即服務器端通過巡檢機器人拍攝的包含儀表的圖像中識別出待檢測儀表的區(qū)域,并提取檢測區(qū)域。指針檢測過程是利用圖像預處理的方法識別出指針輪廓,并用結合改進Hough變換的指針檢測算法得到指針以及相應的偏轉度數(shù),并使用角度法完成儀表讀數(shù)識別。該方法能有效地讀取儀表數(shù)據(jù),減少人力支出,提高火電廠巡檢人員的巡檢效率和安全性,有較大的實際應用前景[6]。
火電廠關鍵區(qū)域設備的指針式儀表的識別流程如圖1所示,火電廠智能巡檢機器人到達巡檢點時,拍攝待檢測儀表圖像并上傳至服務器端,服務器端通過基于YOLOv4目標檢測算法從復雜的環(huán)境中檢測出指針式儀表目標位置,提取出儀表區(qū)域,就此完成目標定位。通過透視變換算法消除儀表因本身位置傾斜或攝像機拍攝時攝像頭視角造成的儀表圖像傾斜,得到儀表的正視角度圖像后[7],通過對儀表圖像進行灰度化處理、去噪聲干擾等預處理后,再利用改進的Hough變換算法檢測表盤指針,計算指針在表盤中與零刻線的夾角后,根據(jù)角度法換算最終得到儀表讀數(shù)數(shù)據(jù)。
圖1 火電廠指針式儀表的識別流程
在進行指針式儀表讀數(shù)之前,首先要對儀表進行定位提取,定位提取方法是基于YOLOv4目標檢測算法實現(xiàn)的。指針式儀表識別定位的過程是通過搭載可見光攝像機的巡檢機器人到達預置巡檢點后對待巡檢儀表進行拍攝,再將拍攝的圖片上傳至服務器進行處理,服務器中運用YOLOv4算法將待檢測儀表從復雜的背景中用標記框標記出來[8],從而提取出含有待檢測儀表的興趣區(qū)域,為下一步的圖像處理做準備。
YOLOv4是在YOLOv3基礎上改進的深度學習回歸方法,該算法能更準確高效地將儀表的位置預測和分類預測結合到網絡中,從輸入圖像直接預測出目標位置、類別和識別率,從而實現(xiàn)實時儀表檢測[9]。YOLOv4的框架結構主要包括CSPDarknet53(Cross-Stage-Parital-connections Darknet53)、SPP(Spatial Pyramid Pooling)、PAN(Path Aggregation Network)和YOLOv3的head部分,其網絡結構如圖2所示,該算法主要用于提取出儀表的特征再對儀表進行多尺度預測。其在三種尺度上進行預測的方法,能有效增強對不同大小的儀表的檢測效果,并通過引入躍層連接來達到強化收斂的效果,該算法采用隨機多尺度訓練的方法也更好地增強了該方法的魯棒性[10]。
圖2 Yolov4網絡結構圖
YOLOv4提出了新的提取圖像特征的網絡CSPDarknet53。作為全卷積網絡,CSPDarknet53主要由卷積層、批量標準化和躍層連接組成[11],激活函數(shù)采用Mish激活函數(shù),其中輸入圖像的尺寸為608×608×3,上方虛線框內容為CSPDarknet53骨架網絡,主要作用是圖像中特征的提取,其余部分為YOLOv3網絡層[10]。
圖中的CBL(CBL由Convolutional、BatchNormalization和Leaky_ReLU構成)結構是YOLOv4的基本組件,由卷積層,批量標準化和激活函數(shù)組成,如圖2所示。在SPP模塊中采用1×1、5×5、9×9、13×13的最大池化的方式[12],再將不同尺度的特征圖進行Concat操作。
YOLOv4在儀表圖像中的每個單元格中預測3個邊框,每個邊框預測出4個基本參數(shù),即待檢測對象邊框的左上角坐標與目標區(qū)域的寬度和高度,記為(tx,ty,tw,th)[13]。同時預測的結果中還會有目標類別以及置信度,若檢測對象中心在單元格里相對于圖像左上部有偏移(cx,cy),而且該邊框也有一定的寬和高,如圖3所示,則經過修正后的邊框為:
圖3 邊框預測信息
(1)
式中:(bx,by)為邊界框的中心坐標,(bw,bh)為邊界框的長和寬。d表示目標類別,pn表示預測目標存在的置信度。
在巡檢機器人采集檢測對象過程中,有些儀表的安裝位置是為了使檢修人員讀取方便,會有一定的高度或傾斜角度,這樣巡檢機器人在采集圖像時就會出現(xiàn)采集到的儀表圖片不是完全正視角的情況,目標儀表具有一定角度傾斜,不能直接用于讀數(shù)識別。為了解決這種現(xiàn)象,用透視變換方法對傾斜的儀表圖像進行校正處理。
1.2.1 儀表傾斜判斷
在進行透視變換之前,首先要判斷儀表是否發(fā)生傾斜。判斷方法如下:
1) 先對提取到儀表圖像進行Canny邊緣檢測,如圖4(a)所示。
圖4 儀表傾斜判斷
2) 對提取到的輪廓進行篩選,去除面積較小和非封閉的輪廓,對篩選后的輪廓進行橢圓擬合,如圖4(b)和圖4(c)所示。
3) 對于擬合出的橢圓,通過比較橢圓長軸長度與短軸長度大小,來判斷是否近似為圓。
4) 若近似為圓形,則表盤不傾斜,無須校正;若非近似圓形,則表盤處于傾斜狀態(tài),需利用透視變換算法進行傾斜校正。
1.2.2 透視變換
透視變換[14]是原理是將原圖片通過投影的方式到一個新的視平面,故也作投影映射。一般所使用的變換公式是:
(2)
u、v是原圖片的坐標,則通過透視變換后的圖片坐標為:
(3)
(4)
(5)
在火電廠實際檢測過程中,由于火電廠設備較多且室內環(huán)境復雜,所以經過傾斜校正處理后的儀表圖像會存在噪聲等現(xiàn)象。故要對待檢測圖像先進行預處理,在研究中的圖像預處理過程主要有儀表圖像的去噪處理、儀表圖像的二值化處理、簡單的形態(tài)學操作,以及邊緣檢測等。
1.3.1 圖像的濾波去噪
為了使計算量減少,使誤差降低,簡化圖像處理的過程,先將提取出的儀表圖像做灰度化操作,隨后再進行濾波處理。本方法采用高斯濾波算法,其基本原理是通過計算圖像中像素坐標點(i,j)處的高斯函數(shù)來定義的,該點的高斯函數(shù)定義為:
(6)
式(6)給出了高斯濾波算法系數(shù)的表達形式,將該模板與待檢測儀表中每個像素點來進行卷積運算,即實現(xiàn)高斯平滑處理。選擇3×3大小的模板能在更好保留細節(jié)信息的情況下實現(xiàn)噪聲的消除。
1.3.2 二值化和形態(tài)學操作
為了便于進一步提取指針式儀表指針輪廓,需對去除噪聲后的儀表灰度圖進行二值化操作。該二值化操作里,首先考慮的是閾值的大小,自適應閾值的選取通常是使用Otsu法。二值化操作的變換函數(shù)公式是:
(7)
式中:g(x,y)為某點(x,y)處的像素值,T為所設定的閾值大小,則經過處理后的二值化儀表圖像為f(x,y)。
二值化處理后需要對圖像進行形態(tài)學操作,通過形態(tài)學操作可以消除指針邊緣小物體干擾,并能在不改變指針面積的情況下對指針邊界進行平滑處理。形態(tài)學操作主要是基于Opencv中morphologyEx函數(shù)完成[16]。
1.3.3 邊緣檢測
進行二值化處理和形態(tài)學操作后的儀表圖像,為突出儀表指針邊緣輪廓,需要使用邊緣增強算法,并指定儀表指針像素點的每個邊緣強度,然后根據(jù)所提取儀表指針的邊緣點集的要求來設定閾值。在實際應用中邊緣檢測算法有許多,有Sobel算法、Roberts算法、Prewitt算法以及Canny算法,這些算法都各有自己的優(yōu)勢,并且具有不同的適用條件。在各類的邊緣檢測算子中,本方法中使用的是Canny邊緣檢測,該算法有檢測精度高、計算時間短的優(yōu)勢,故經常用于指針式儀表的讀數(shù)研究[17]。
Hough變換是能夠檢測特殊邊緣形狀的有效方法,經常被用來檢測目標圖像中的直線及圓。由于火電廠復雜的運行環(huán)境,直接通過Hough圓變換檢測表盤圓心的方法不太理想,本研究中提出一種Hough圓變換和Hough直線變換結合的改進Hough變換方法,用來高效檢測指針。
首先利用Hough圓變換檢測已經進行預處理的儀表盤圖像,檢測到的儀表表盤圓的圓心為指針坐標系的中心用來判斷檢測得到的指針位于指針區(qū)域坐標系的第幾象限,進而為下一步所求指針偏轉角度做準備。
由于指針式儀表具有直線特性,可以先使用Hough線變換檢測出指針邊緣的兩條線段,將線段延長并擬合出指針的兩條邊緣直線,然后求出兩直線的交點(x0,y0),再由該交點做兩條相交直線的角平分線,由Hough圓變換檢測的圓心位置選取合適的長度,得到的該角平分線上的線段即是指針所在位置。
設兩相交直線分別為la和lb,Hough變換檢測到的la線段兩端端點為(x1,y1)和(x2,y2),lb線段兩端端點為(x3,y3)和(x4,y4)。
兩直線的斜率分別為ka、kb則公式為:
(8)
(9)
由此可推導出x0和y0,則公式為:
(10)
(11)
求出交點坐標后,再求出兩條直線上距離該點為d處的兩條垂直平分線的交點(xl,yl),則(x0,y0)與(xl,yl)連線所在的直線偏轉的角度即為儀表指針的偏轉角度。
設直線la上距離為d的點為(xa,ya),則:
(12)
ya=kaxa+y0-kax0
(13)
同理可以得到直線lb上距離為d的點為(xb,yb),由于斜率已知可以根據(jù)式(10)和式(11)可以得到(xl,yl)的坐標值,進而求出la和lb的角平分線,再根據(jù)圓變換檢測圓心選取合適的角平分線的長度即可得到指針。
關于指針式儀表的讀數(shù)識別問題,由于火電廠現(xiàn)場情況的復雜多樣性,解決思路是使用指針角度法獲取指針式儀表表盤的數(shù)據(jù)值。計算過程可以分兩個部分:首先通過1.4節(jié)內容求得的兩相交直線的角平分線獲取偏轉角度即指針的坐標系角度,進而計算得到θ角即確定儀表指針與初始位置的偏轉度數(shù);其次根據(jù)偏轉度數(shù)與儀表類型信息最終確定待檢測儀表指針指向的讀數(shù)。具體計算過程為:
1) 通過Opencv中的MatchTemplate函數(shù)將提前錄入儀表庫的模板與校正后的圖片進行模板匹配,匹配后根據(jù)模板信息獲取該指針式儀表的刻度量程值S以及最小量程L1與最大量程L2之間的夾角φ[18];
2) 指針邊緣直線的角平分線即為指針直線L0;
實驗程序編寫以及儀表讀數(shù)實驗測試主要是在Windows 10系統(tǒng)環(huán)境下進行的,電腦相關配置為CPU 3.60 GHz,CUDA 10.2,cuDNN 7.6.5;儀表識別和讀數(shù)是在VS2015(Microsoft Visual Studio 2015)軟件開發(fā)環(huán)境下使用C++語言調用OpenCV3.4.2編寫了一整套可執(zhí)行程序,完成對巡檢機器人傳送到服務器的儀表圖像進行預處理及儀表的讀數(shù)識別[19]。
2.1.1 模型訓練
文中選取了從某火電廠拍攝的指針式儀表在不同場景、不同視角下的1 000幅儀表圖片作為數(shù)據(jù)集,其中800幅各類儀表圖片作為模型訓練的數(shù)據(jù)集,200幅8種類型不同示數(shù)儀表圖片作為測試的數(shù)據(jù)集。標記樣本之前先將訓練的樣本處理成像素為608×608大小的圖片。然后對每個樣本中儀表進行了標記,并在實驗平臺上進行YOLOv4模型訓練。
訓練過程中迭代次數(shù)與損失函數(shù)之間的關系如圖5所示。訓練過程中,樣本圖片每迭代1 000次會自動生成一個weights文件,訓練的樣本經過16 000次迭代后,由圖5可知,Loss達到最低值即為當前訓練結果的最佳值,故本實驗選取batches=16 000條件下生成的weights文件進行后續(xù)實驗。
圖5 迭代次數(shù)與損失函數(shù)的關系
2.1.2 儀表定位
利用該weights文件通過程序對含有不同類型的指針式儀表的圖像進行了基于YOLOv4目標檢測的算法測試,通過測試可知,如圖6所示,基于YOLOv4算法的指針式儀表識別算法能夠準確識別多儀表(圖6b)、暗光線環(huán)境下的儀表(圖6c)、亮光線環(huán)境下的儀表(圖6d),故該算法能準確地標記出在火電廠較復雜的環(huán)境下的儀表所在的位置,且有較高的識別率。
圖6 儀表定位效果圖
2.2.1 圖像預處理
首先巡檢機器人在巡檢點利用云臺搭載的可見光攝像機從現(xiàn)場拍攝一幅含有待檢測儀表的圖像,通過YOLOv4目標檢測算法標記出儀表表盤的位置。由于檢測對象可能存在一定的傾斜角度,所以需要先利用透視變換進行校正處理,校正結果如圖7所示。
圖7 目標定位和校正
為了更好地提取出儀表指針,首先對校正后的原圖進行灰度化操作,得到的原圖和灰度圖如8(a)和圖8(b)所示。隨后對灰度圖像進行濾波處理,本方法主要利用高斯濾波算法對儀表圖像做濾波處理,如圖8(c)所示。將經濾波后的圖像再經過二值化操作。儀表圖像經過二值化操作后則突顯出儀表的指針與刻度等信息,再使用輪廓檢測算法對儀表進行輪廓提取,本方法中使用的是Canny算法,這種算法的優(yōu)點是對儀表圖像中灰度變化明顯的邊緣特征進行檢測的效果更好。經過二值化操作后的儀表和邊緣檢測后的儀表見圖8(d)和圖8(e),可以看出邊緣檢測后的儀表特征較為顯著,為下面的指針提取與讀數(shù)做準備工作。
圖8 圖像預處理
2.2.2 指針提取與讀數(shù)
圖像經過預處理后,便使用改進Hough變換提取圖像中儀表指針的操作,首先利用Hough變換檢測出指針的邊緣直線的相交點,如圖9(a)所示,進一步求得角平分線。根據(jù)模板匹配的儀表類型的結果,選取合適的閾值從而提取出指針,如圖9(b)所示。提取的指針邊緣直線的角平分線處理后得到的一條符合指針特征的直線,從而完成指針的識別和讀數(shù)。根據(jù)1.5節(jié)中內容及指針角度計算結果確定此儀表盤的參數(shù)值是:S為0.4,θ為178.958 3°,φ為270°,通過角度法運算后,便得出相應的儀表數(shù)值,最終完成儀表的讀數(shù)工作。此表盤條件下,儀表在程序運行后得到的讀數(shù)為:0.165 1 MPa。
圖9 指針的提取
為進一步檢驗該儀表識別讀數(shù)方法的精度與檢測結果的穩(wěn)定性,對200幅測試數(shù)據(jù)集進行了讀數(shù)測試,該測試數(shù)據(jù)集為讀數(shù)不同的8種不同類型的指針儀表組成。通過實驗,改進Hough變換方法的檢測率為99.5%,數(shù)據(jù)集種部分儀表檢測效果如圖10所示??梢钥闯?在指針輪廓明顯的情況下,能準確提取指針,并獲取讀數(shù)。
圖10 部分儀表樣本檢測結果
為了證明該算法的有效性,與儀表檢測中最常用的最小二乘法[20]進行了對比實驗。結果表明,最小二乘法的檢測率為98%,改進Hough變換檢測法的平均誤差為0.017 6,最小二乘法的平均誤差為0.051 3,對比可知,改進Hough變換檢測法的誤差明顯低于最小二乘法。從200組測試集中隨機選取10組測試結果,如表1所示??梢钥闯?本文提出的識別方法的誤差最高值為0.048 7,檢測讀數(shù)結果與人工讀數(shù)結果基本一致,說明本文方法具有較好的識別精度與穩(wěn)定性。
表1 儀表檢測對比實驗結果
對于發(fā)電廠關鍵區(qū)域中指針式儀表識別和讀數(shù)問題,首先巡檢機器人到達巡檢點拍攝圖片后將圖片數(shù)據(jù)上傳至服務器,服務器利用基于YOLOv4的目標檢測算法對儀表進行精準定位,并提取興趣區(qū)域,在提取興趣區(qū)域后使用透視變換對傾斜儀表進行校正處理,達到圖像修正的效果;其次利用模板匹配得到儀表類型獲取儀表量程、刻度等信息。接著對儀表進行預處理操作,通過高斯濾波對興趣區(qū)域中儀表圖像進行濾波處理,并通過二值化處理簡化儀表表盤,隨后通過Canny邊緣檢測對儀表指針進行邊緣獲取。最后運用改進Hough變換檢測指針的算法獲取儀表指針位置及偏轉角度,利用角度法獲得儀表讀數(shù)。通過實驗得到的讀數(shù)結果在正常的誤差范圍,實現(xiàn)了火電廠關鍵區(qū)域指針式儀表智能化讀數(shù)識別的所要求的效果。后續(xù)研究將針對其他類型儀表如數(shù)字式儀表、液位儀表、指示信號燈等的智能識別做進一步研究。