馬 睿,周伍光,鄒應全
(1.西南交通大學 信息科技與技術學院,成都 611756;2.都江堰水利發展中心 東風渠管理處,成都 611756)
水是生命之源,水利對社會和經濟發展有著重要意義,水情監控也是國家水利部門關注的重點問題,水位監測在洪澇災害預警、減少經濟損失等方面有著重要意義。目前的水位測量技術分為接觸式測量方式及非接觸式測量方式。
常用的接觸式測量方式有浮子式水位計、壓力式水位計和電容式水位計等。接觸式水位測量傳感器長期與水流接觸,往往損壞速度較快,安裝和維護過程也較為繁瑣,建設運維成本高且自動化程度低,因此逐漸被非接觸式測量方裝置取代。
超聲波水位計、雷達水位計和光纖式水位計是目前常用的非接觸測量裝置。3種水位計通過測量發出和反射的脈沖時間來計算水位,但該類設備價格昂貴,因此在國內的使用并不廣泛[1]。
近幾十年來,數字圖像處理技術的快速發展,基于圖像處理的技術已經廣泛應用在交通、醫學、航天航空的各個方面,同時,隨著機器學習、計算機視覺等技術的興起和快速發展,通過神經網絡對圖像的內容進行學習歸納,由計算機對圖像進行處理并識別水位的方法也成為了水位檢測的重要發展方向[2]。
文獻[3]通過添加運動物體幀圖像及幀平均法降低水位線檢測中的干擾,提高了檢測的準確性。文獻[4]通過霍夫變換檢測對河流表面進行統計跟蹤,產生一個估計的水位線。文獻[5]提出的基于數字圖像處理的水位檢測方法分割水尺和水域圖像,通過多模板匹配算法以及序列驗證算法識別水尺字符,降低了測量誤差。文獻[6]利用水尺刻度對相機進行標定,用圖像差分法提取水位變化區域,計算圖像水位線坐標,根據相機標定結果算得實際水位高度。文獻[7]通過分割水尺后對水尺刻度進行邊緣檢測,對水尺字符進行匹配識別等技術進行水位識別。
傳統的圖像處理方法對于背景、環境、光線、拍攝角度等要求較高,在處理環境復雜情況下的水位檢測時存在誤差較大的問題。因此機器學習的引入,有效的提高了基于圖像處理的水位檢測方法的精度。例如,文獻[8]通過字典學習和卷積神經網絡對水尺進行識別和讀取。文獻[9]基于深度學習算法,結合YOLOv3和ResNet網絡算法檢測水尺對象和識別水尺刻度,大大提高了基于圖像處理的水位檢測的速度和精度。
2020年,Alexey Bochkovskiy提出的YOLOv4算法通過綜合現有的優化算法實現了在單個CPU條件下訓練數據并探測目標,在保證速度的前提下提高了算法的精度。
本文使用海康攝像頭進行數據采集,通過螢石云協議提供的API獲取水尺視頻以及實時水位圖片,通過傳統圖像處理算法對水尺位置進行定位,基于YOLOv4算法識別水尺刻度線并計算當前水位值。從實驗結果看,本文提出的水位識別方法的誤差僅在±2 cm以內,提供了一種高精度、低成本、易維護的水位識別方法。
本文算法采用YOLOv4深度學習算法對圖像進行處理,識別水位,具體步驟分為:①通過海康攝像頭提供的螢石云協議接口采集視頻流,得到水尺圖像幀,日間獲得的水尺圖像為RGB彩色圖像,夜間獲得的水尺圖像為灰度圖像;②判斷圖像是否為三通道彩色圖像,對彩色圖像進行灰度化處理;③使用不同的結構元素分別對日間和夜間的圖像通過開操作增強圖像對比度;④通過閾值分割方法分離水尺與背景,提取水尺區域;⑤對提取出水尺區域進行連通域去噪;⑥將提取出的水尺區域的圖像輸入YOLOv4網絡,檢測出水面以上的刻度線數量;⑦通過水尺總長計算當前水位。水位識別流程如圖1所示。

圖1 水位識別流程圖
1.2.1 圖像灰度化和增強
??禂z像頭拍攝到的水尺日間圖片為RGB彩色圖像,夜間圖片為灰度圖像,無須灰度化處理。日間圖片通過將水尺圖像灰度化處理的方式一方面能夠去除日間彩色圖像中所包含的不必要的顏色信息,提高圖像處理速度,另一方面能夠減少日間和夜間圖像的差異,提高算法的通用性。
為了將水尺與背景分離,通過形態學方法增強圖像對比度。采用開操作對圖像進行背景提取,將原始圖像與背景圖像相減,以達到增強水尺圖像的效果?;叶然蟮娜臻g彩色圖像與夜間灰度圖像仍然存在較大的差別,因此需要分別采用不同的結構元素對灰度化后的彩色圖像及夜間原始灰度圖像進行處理。
結構元素的選取對圖像處理的結果有至關重要的作用,如果結構元素選取過大,會導致水尺與背景區分度不明顯;如果結構元素過小,會導致水尺結構被破壞,二者均會導致無法準確分離水尺與背景。經過多次試驗,使用半徑為15 px的圓盤作為結構元素對灰度化后的日間彩色圖像進行處理時效果最佳,處理后的圖像如圖2所示,使用半徑為70 px的圓盤作為結構元素對夜間原始灰度圖像進行處理時效果最佳,處理后的圖像如圖3所示。

圖2 圖像增強后的日間圖像 圖3 圖像增強后的夜間圖像
1.2.2 圖像分割
圖像分割的目的是將水尺與背景分離,去除雜亂無用的背景信息。目前傳統的圖像分割方法有區域分割、邊緣分割和閾值分割等[10],其中閾值分割是最常用的方法,通過一個確定的閾值作為分割線,將目標與背景分離。閾值分割法根據應用范圍是否為整張圖像可分為局部閾值法和全局閾值法。
局部閾值法將整張圖片均分為若干子圖像,針對子圖像范圍內的灰度值確定子圖像的閾值,對子圖像進行閾值分割后再將子圖像拼接成完整圖像。但局部閾值要切割圖像并對每張圖像單獨進行閾值分割處理,處理時間長且圖像拼接邊緣往往存在突變的現象,在分離水尺與背景的試驗中,背景占據較大的空間,采用局部閾值法會導致對背景的大量無效計算。
全局閾值法通過統計整幅圖像的灰度級,選取一個閾值對整張圖像進行分割[11]。OTSU閾值分割法是一種常見的自適應閾值分割法,其中心思想是選取能使圖像分割產生的區域類內方差最小、類間方差最大的閾值。OTSU算法的具體內容如下:
假設存在閾值k將圖像所有像素按照灰度級大于k和小于k分割為C1和C2兩個部分,C1、C2可分別表示背景區域和目標區域。灰度級為i的像素點個數在整幅圖像中的概率為pi:
pi=ni/N
(1)
其中:ni表示圖像中灰度級為i的像素個數,N表示整幅圖像的像素總數。灰度級i的范圍為0~255。
則C1和C2的所含像素占整幅圖像像素的概率分別為:

(2)
(3)
pi的和應為1,則有:
P1+P2=1
(4)
圖像全局均值:
(5)
C1和C2的均值分別為:
(6)
(7)
根據方差的概念,可推類間方差表達式:
σ2=P1(avg1-avg)2+P2(avg2-avg)2
(8)
化簡后可得:
σ2=P1P2(avg1-avg2)2
(9)
求得使使式(9)的類間方差最大的閾值k即為OTSU算法的最佳閾值。
對圖2~3采用OTSU算法二值化后的結果如圖4~5所示。水尺區域與背景區域灰度級相差很大,通過OTSU算法能夠很好地分離水尺區域與背景區域。

圖4 二值化后的日間圖像 圖5 二值化后的夜間圖像
1.2.3 噪聲處理
圖4~5中二值化處理后的水尺圖片仍然存在許多噪聲物體,為了去除噪聲,對水尺圖像分別進行連通域去噪和形態學去噪。對圖4~5的圖像先采用連通域去噪,將圖像中連通域面積小于給定值的噪聲過濾。由于圖像中水尺所占連通域面積最大,所以連通域去噪的閾值面積可設置較大值,能有效濾除圖片中的噪聲而不影響水尺區域。連通域去噪后圖像中僅保留了水尺所在區域。
連通域去噪后,選擇半徑為10 px的圓盤作為結構元素再對圖像進行閉合、開啟的形態學處理,平滑水尺的邊緣,通過閉-開操作后的圖像效果如圖6~7示。

圖6 形態學處理后的日間圖像 圖7 形態學處理后的夜間圖像
根據水尺區域的邊緣選取包含水尺部分的邊長最小的矩形,最終提取出的水尺部分圖片如圖8所示。

圖8 提取出的水尺圖像日間(左)夜間(右)
1.3.1 YOLO概述
目標檢測的步驟可以分為兩步:
1)檢測目標位置,生成候選框;
2)對檢測到的目標進行分類。
比較流行的算法按照是否將兩個步驟合并,可以分為兩大類[12]。一類是兩階段算法,需要先對圖片選定可能存在圖像的若干候選區,再對候選框進行分類和回歸,比較典型的算法是基于Region Proposal的R-CNN算法,以及在其基礎上改進的Fast-RCNN、Faster-RCNN等。另一類則是以YOLO系列算法為典型代表的單階段算法,在檢測目標位置的同時對其進行分類。
YOLOv1的核心思想是將兩個步驟合二為一[13],先將整張圖片劃分成N*N個網格,對每個網格生成兩個大小不同的候選框,即預定義候選框,再進行邊框回歸, YOLO具有RCNN算法無法比擬的速度優勢且背景誤檢率遠低于Fast-RCNN算法。YOLOv2通過引入批歸一化和先驗框等方法,從預測更準確、檢測速度更快、識別對象更多的3個方面對YOLOv1進行了優化和改進。YOLOv3引入多尺度預測對YOLOv2的先驗框進行了進一步改進,很好地改善了YOLOv2對小目標檢測效果差的問題。
1.3.2 YOLOv4算法
YOLOv4算法在YOLOv3的基礎上,結合了眾多目標檢測算法的訓練技巧,從數據增強、網絡結構、激活函數和損失函數等幾個方面分別對YOLOv3進行了優化和改進[14]。
在圖像預處理階段引入Mosaic數據增強方法,將4張經過隨意旋轉或翻轉等處理的四張訓練圖像合并成一張,豐富檢測物體的背景。
在網絡結構上改用CSP-Darknet53有效緩解梯度消失問題,在保證推理速度和準確度的同時,減小了模型尺寸。YOLOv4 網絡結構主要由主干網絡(Backbone)、頸部(Neck)和頭部(Head)組成。Darknet-53殘差網絡結構包括不同大小的Resnet殘差模塊組成,CSP-Darknet53 主干網絡將CSPNet網絡結構應用于 Darknet-53中的Resnet殘差模塊,CSPNet將上層特征圖二等分,一部分進行殘差運算后與另一部分相結合。SPP網絡分別使用不同大小的最大池化層對上層特征圖進行處理后拼接,提高感受野,PANet則通過融合高層和底層的特征實現多尺度的檢測,提高小目標的識別精度。
在卷積層后的激活函數處,YOLOv4采用Mish激活函數替代YOLOv3中的Leaky ReLU激活函數。公式(10)是Mish激活函數的公式,Mish激活函數相比LeakyReLU激活函數能夠使神經網絡具有更好的準確性和泛化性。
y=x×tanh(ln(1+ex))
(10)
YOLOv4檢測算法采用CIoU評價預測框和真實框間的交并比,損失函數計算公式如式(11)所示:
(11)
公式(11)中IoU是指交并比,即預測框(A)和真實框(B)的交集與二者的并集的比值,ρ2(A,B)是真實框和預測框的中心點的歐氏距離;c為是包住它們的最小方框的對角線距離,α是權重函數,v是度量寬高比的一致性的參數,α和v的計算公式如式(12)~(13)所示。
(12)
(13)
其中:w代表框的寬度,h代表框的長度。
將獲得的水尺區域的圖像使用LableImage對水面上的刻度進行標注,輸入YOLOv4算法進行訓練,得到檢測水尺刻度的模型。將實時獲取的水尺圖像進行預處理后作為YOLOv4檢測模型的輸入。
系統通過螢石云協議提供的API接口,每五分鐘發出截圖指令抓取圖像,通過螢石云提供的圖像URL將水尺圖像下載至服務器,將圖像經過預處理后送入基于YOLOv4算法設計的刻度線識別算法統計水面上的刻度線條數,根據該水尺的總量程計算當前水位。
系統主要由4個部分組成。
1)前端設備:包括??禂z像頭、RTU、太陽能電池板、12 V蓄電池、水尺等。攝像頭使用??蹈咔寰W絡攝像頭,支持4G電話卡,監控視頻流為H264編碼格式,使用TCP/IP協議傳輸。攝像頭支持螢石云協議,通過協議提供的API接口可對攝像頭進行圖片截取和視頻截取。海康攝像頭可提供日間的彩色圖像,并配備紅外功能提供夜間的灰度圖像。RTU用于采集當前的流量、流速信息。太陽能電池板和12 V蓄電池可提供夜間攝像頭供電。
2)傳輸網絡方案:RTU利用中國移動的通用分組無線電業務(GPRS)網絡與服務器通信。海康攝像頭則采用4G網絡進行視頻即圖像的傳輸,圖像轉存在螢石云服務器,系統可根據螢石云服務提供的URL下載螢石云服務器上存儲的圖片。
3)服務器:包括阿里云服務器和螢石云服務器,阿里云服務器用于部署數據采集管理平臺和水位監測管理平臺,螢石云服務器用于提供視頻圖片截取和短期存儲功能。
按照螢石云協議提供的規定,截取后的圖片和視頻上傳至螢石云服務器并存儲1小時,用戶可通過協議返回的URL地址下載圖片和視頻。
通過水位識別算法處理獲得的水位數據信息會上傳至阿里云服務器上所部署的MySQL數據庫中,數據庫中還存有RTU采集的其他實時水情數據及歷史水情數據等。
項目部署的服務器為阿里云服務器,用于存儲下載的圖片和視頻流,以及RTU和網頁平臺之間的數據交換中心。
4)顯示終端:用戶可以通過PC端的web網頁或手機端訪問水位監測管理平臺查看水位監測結果。
系統的主要架構如圖9所示。

圖9 系統架構圖
服務器上搭建的數據采集管理平臺將獲取的水尺圖片送入基于傳統圖像處理算法與YOLOV4算法相結合的水位識別算法模塊中進行檢測,得到水面上水尺刻度線數量,通過水尺的總長與水面上水尺刻度線數量之間的關系計算當前實際水位,并將水位寫入服務器的數據庫中,在顯示終端顯示。
2.2.1 總體架構
硬件系統基于STM32F103開發,該系統安裝在閘門上,主要功能為通過無線通信實現水位數據傳輸,該水位信息由雷達水位計提供,用以與水位識別算法獲得的水位數據進行對比,通過對閘門的啟閉控制,可以獲取不同水位情況下的水尺圖片數據。
硬件系統單片機采用STM32F103,通過串口連接GPRS模塊Air202,由GPRS模塊通過接入GSM網絡實現監控系統遠端服務器的數據通信,完成水位數據的獲取、攝像頭的啟閉控制以及閘門的啟閉控制[15-17]。
硬件系統總體結構框圖如圖10所示。

圖10 硬件系統總體框圖
硬件系統的重要組成部分包括電源模塊、GPRS模塊、閘門控制及外部RTC。
2.2.2 電源模塊
系統中穩定的供電電源是一個系統穩定有效、穩定運行的前提條件,監控系統采用12 V直流電池供電。系統電源架構圖如圖11所示。

圖11 系統電源架構圖
系統采用12 V電池供電,閘門電機、攝像頭直接由12 V電源供電,由單片機控制電源的開斷;GPRS芯片的供電采用開關電源芯片SGM6132將12 V降至4.2 V;STM32芯片的供電采用線性降壓芯片將4.2 V降為3.3 V。
2.2.3 GPRS模塊
Air202模塊是支持四頻段GSM/GPRS的模塊,支持GPRS多時隙等級10和GPRS編碼格式;具有17.7 mm×14.8 mm×2.3 mm的超小尺寸,可以完美集成到尺寸較小的電路板中,Air202功能框圖如圖12所示。

圖12 Air202功能框圖
Air202模塊在射頻發射時可能會產生電源電壓跌落的現象,這是由于射頻發射時需要大電流,若走線路徑上的阻抗較大,就會導致電壓跌落,一般難以避免。因此在設計上要特別注意模塊的電源設計,盡量減少供電線路阻抗,當電壓跌落在3.0 V以下時會有可能導致模塊掉電關機或重啟。為了防止VBAT電壓跌落到3.0 V以下,可以在VBAT輸入端并聯多個100 μF的鉭電容進行儲能,以及3個100 nF、33 pF、10 pF的濾波電容,減少電壓波動的影響,保證電源的穩定輸出,提高系統的穩定性。通過單片機控制模塊的開機和復位,使GPRS模塊掉線時可以自動重連。
2.2.4 閘門控制
閘門電機通過兩個引腳控制,通過三極管拉低相應引腳即可實現電機的開、關閘,硬件電路圖如圖13所示。

圖13 攝像頭電源控制電路

圖 14 外部RTC電路
2.2.5 外部RTC
實時數據采集系統中時間的準確性非常重要,需要知道數據是在何時進行的采集,并且可以針對事件發生的時間點進行數據分析,使得數據的特征與時間事件更加地匹配。DS3231是Maxim/Dallas公司推出的一款低成本、高精度的I2C實時時鐘芯片,該器件在正常溫度范圍內,計時精度很高,還具有溫補晶體振蕩器(TCXO)和1個32.768 kHz的晶體。通過紐扣電池供電,系統關機時仍可精確計時。
設備與數據終端采集管理平臺之間通過socket進行通信。網絡上的兩個程序為了實現數據的交換與要建立一個雙向的通信連接,連接的一端稱為一個socket,它是支持TCP/IP協議的網絡通信的基本操作單元[18-19]。隨著 TCP/IP 網絡的發展,Socket 成為最為通用的應用程序接口,也是在 Internet 上進行應用開發最為通用的 API。Socket 封裝了 TCP/IP 協議,使用 Socket 可以在服務端程序與客戶端程序之間建立連接通信[20-22]。利用 Socket 通信的好處在于,不用關心數據底層的實現方式,這些都有協議完成,用戶只須在發送/接收數據時按對方約定好的數據格式進行發送,通信雙方按一定的方式處理收到的數據就可以了。
網頁平臺的開發環境是Eclipse,是基于java、css和html5開發的應用,適用于IE、Chorom、火狐等主流瀏覽器。網頁平臺面向用戶,提供實時水位信息、歷史水位信息、實時監控視頻以及水位預警信息。用戶可以通過PC端web網頁或手機端app訪問平臺,可同時對多個水位監測點進行統一管理。網頁平臺水位監測頁面如圖15所示。

圖15 網頁平臺水位監測頁面
本實驗采用水尺的最小刻度為2公分,并用??禂z像頭采集了分辨率為1 920×1 280的水尺圖片,如圖16所示。

圖16 ??禂z像頭采集畫面
由于圖片包含3種不同型號水尺,對圖片進行裁剪處理,保留包含單個水尺分辨率為420*1 080的圖像,包含日出、日間、夜間以及大雨天氣下的夜間4種情況下的圖像,根據圖1的流程得到不同情境下水尺圖片共200 張,對其中140張圖片使用Labelimg軟件對圖片中的待檢測目標進行標注,所有圖片共包含約9 800個檢測目標,典型數據集如圖17所示。

圖17 典型數據集
本實驗在工作站進行數據集的處理及模型的訓練,部署在Windows系統上進行驗證。實驗環境配置信息如表1所示。

表1 實驗環境配置信息
配置文件部分參數值如表2所示。

表2 配置文件部分參數值
樣本總數共140張圖片,共包含約9 800個檢測目標,訓練集、測試集和驗證集數量為8∶1∶1,訓練的最大迭代次數為6 000,訓練耗費時長約為20小時,訓練的平均損失在訓練5 000次后基本達到穩定,最終的平均損失收斂在0.25。
檢測最終各項評價指標如表3所示。

表3 各項評價指標
采集剩余的60張圖片作為測試集輸入訓練好的模型中進行檢測,圖片包含日出、日間、夜間及大雨天氣的夜間等天氣狀況下的水尺。
其中部分實驗結果數據如表4所示。人工提取水位是通過對圖片拍攝的水尺圖片進行人工解讀獲取。

表4 部分實驗結果數據
本文提出了基于YOLOv4的圖像水位識別方法。該方法通過傳統圖像算法對圖像進行預處理,將水尺與背景分割,再通過YOLOv4算法對水尺圖像中的刻度線進行檢測,統計水面上的刻度線總數,通過計算獲得當前水位。
傳統圖像處理有效解決了白天和夜間的圖像色彩差別問題,提高了檢測精度。YOLOv4算法彌補了傳統圖像檢測算法對環境敏感的問題。
實驗結果表明,該方法對夜間降雨天氣下的水位識別依然準確率很高,測量誤差約為2厘米,符合工程水位監測要求,是一種廉價而高效的水位識別方法。