陸振邦,任傳勝
(中國(guó)科學(xué)技術(shù)大學(xué) 工程科學(xué)學(xué)院,合肥 230027)
在泵站的安全調(diào)度和優(yōu)化運(yùn)行過(guò)程中,上下游水位是一個(gè)重要的水力要素,而隨著泵站智能化建設(shè)的推進(jìn),對(duì)水位的自動(dòng)化檢測(cè)也提出了更高的要求[1]。傳統(tǒng)的水位監(jiān)測(cè)方式主要有:①人工目測(cè)水尺記錄水位,這種方式的實(shí)時(shí)性差,而且費(fèi)時(shí)費(fèi)力;②采用水位傳感器采集水位信息[2]。但是傳統(tǒng)水位計(jì)普遍存在精度低、穩(wěn)定性差等問(wèn)題,而且安裝成本高、維護(hù)困難。例如國(guó)內(nèi)應(yīng)用較廣的浮子式水位計(jì)需要建設(shè)測(cè)井房,超聲波水位計(jì)受外部干擾,容易出現(xiàn)水位漂移現(xiàn)象[3]。而且當(dāng)水位測(cè)量值與實(shí)際水位值存在較大誤差時(shí),仍然需要人工根據(jù)水尺刻度手動(dòng)校正。
綜上所述,本文在實(shí)驗(yàn)研究的基礎(chǔ)上,提出了一種水位測(cè)量的新思路。將數(shù)字圖像處理技術(shù)的高精度和嵌入式設(shè)備的小巧、輕便結(jié)合起來(lái),設(shè)計(jì)了基于嵌入式圖像處理的水位監(jiān)測(cè)系統(tǒng)。目前,在泵站的系統(tǒng)設(shè)計(jì)中大多存在視頻及安防監(jiān)測(cè)單元,因此水尺視頻數(shù)據(jù)的獲取也較為容易,這也成為了通過(guò)機(jī)器視覺(jué)技術(shù)獲取水位值的基礎(chǔ)。因?yàn)檫@種非接觸測(cè)量方式從原理上與傳統(tǒng)水位計(jì)有較大區(qū)別,所以可以有效規(guī)避傳統(tǒng)水位傳感器的一些固有問(wèn)題,使得水位測(cè)量更加直觀,同時(shí)提高了測(cè)量的穩(wěn)定性、可靠性和高實(shí)時(shí)性,具有較高的應(yīng)用前景。
系統(tǒng)采用以ARM920T為核心的S3C2440A為主控芯片,CPU主頻最高可達(dá)400MHz,搭載了256 MB的NAND FLASH,64 MB的 SDRAM(由兩片16 bit寬度的32 MB SDRAM組成),為便于查看中間處理結(jié)果,選用了一塊分辨率為480×272的彩色液晶觸摸屏。此外,基于開發(fā)的需求,還配置了串口、USB HOST接口以及實(shí)現(xiàn)網(wǎng)絡(luò)訪問(wèn)所必須的以太網(wǎng)接口。實(shí)驗(yàn)中所使用的攝像頭為USB接口,支持標(biāo)準(zhǔn)UVC協(xié)議。整體硬件結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)Fig.1 Structure of system hardware
本系統(tǒng)的結(jié)構(gòu)如圖2所示。根據(jù)泵站總體系統(tǒng)結(jié)構(gòu)框架的設(shè)計(jì),整個(gè)系統(tǒng)縱向向上可分為現(xiàn)地設(shè)備層、現(xiàn)地控制層和站控層。
現(xiàn)地設(shè)備層主要包括輔助照明設(shè)備、USB攝像頭和標(biāo)準(zhǔn)化水尺,照明設(shè)備用于在弱光環(huán)境下進(jìn)行補(bǔ)光,USB攝像頭采集水尺圖像,并傳輸給嵌入式終端進(jìn)行圖像處理提取數(shù)據(jù)。
現(xiàn)地控制層主要實(shí)現(xiàn)兩個(gè)功能,一是對(duì)攝像頭采集的水尺圖像進(jìn)行處理解析以獲取水位;二是監(jiān)聽站控層的數(shù)據(jù)請(qǐng)求,響應(yīng)請(qǐng)求并發(fā)送水位值。
站控層主要提供數(shù)據(jù)服務(wù)與應(yīng)用服務(wù)。包括實(shí)時(shí)數(shù)據(jù)交互、歷史數(shù)據(jù)存儲(chǔ)、組態(tài)顯示、趨勢(shì)分析和閾值告警等功能。
圖2 系統(tǒng)整體方案Fig.2 Overall scheme of system
此系統(tǒng)的軟件采用Linux操作系統(tǒng)作為開發(fā)和運(yùn)行環(huán)境,通過(guò)Linux內(nèi)核的移植、根文件系統(tǒng)的構(gòu)建、OpenCV圖像處理庫(kù)的移植,搭建了嵌入式軟件的開發(fā)和運(yùn)行環(huán)境。使用Linux多線程編程技術(shù),將每個(gè)子程序設(shè)計(jì)成一個(gè)線程。軟件流程如圖3所示。
圖3 軟件設(shè)計(jì)流程Fig.3 Flow chart of software design
Video4Linux2(V4L2)是針對(duì) Linux系統(tǒng)的視頻設(shè)備處理架構(gòu),它為視頻設(shè)備的應(yīng)用程序編程提供了豐富的接口函數(shù)[4]。實(shí)驗(yàn)中使用的USB攝像頭是符合UVC(USB Video Class)規(guī)范的設(shè)備,在V4L2的編程框架中,主要的采集流程分為打開設(shè)備、設(shè)置幀格式、分配緩沖區(qū)及物理內(nèi)存、讀取數(shù)據(jù)、處理數(shù)據(jù)和關(guān)閉設(shè)備等步驟[5]。
2.3.1 改進(jìn)的Sobel邊緣檢測(cè)算法
圖像的邊緣檢測(cè)是圖像處理過(guò)程中一項(xiàng)重要的內(nèi)容和步驟。在本系統(tǒng)圖像處理的水尺輪廓的提取、水尺水面分界面的界定都依靠邊緣檢測(cè)技術(shù),所以邊緣檢測(cè)算法的設(shè)計(jì)是水位提取準(zhǔn)確性和精度的關(guān)鍵。傳統(tǒng)邊緣檢測(cè)是利用一階或二階邊緣檢測(cè)算子與圖像直接卷積,根據(jù)一定的標(biāo)準(zhǔn)檢測(cè)邊緣,但是這種方法容易產(chǎn)生較多的偽邊緣。為了剔除虛假邊緣點(diǎn),本文在邊緣檢測(cè)中引入了非極大值抑制的方法。
首先利用Sobel算子對(duì)圖像進(jìn)行水平和垂直方向的梯度計(jì)算,而對(duì)應(yīng)的水平和垂直方向的邊緣檢測(cè)算子可表示為
待處理的圖像8鄰域區(qū)域可以表示為
利用模板的圖像處理相當(dāng)于模板與圖像的卷積。用Gx和Gy分別代表水平和垂直方向的梯度值,則Gx和Gy可由卷積運(yùn)算得出:
將橫向和縱向梯度值通過(guò)式(2)計(jì)算出該點(diǎn)的梯度幅值:
原始的灰度圖像的邊緣屬于漸變區(qū)域,并不是理想的階躍信號(hào),利用Sobel算子直接與圖像進(jìn)行卷積運(yùn)算得到的梯度幅值圖像容易丟失邊緣信息,必須進(jìn)行細(xì)化。采用非極大值抑制的方法,保留圖像目標(biāo)點(diǎn)水平或垂直梯度上的局部最大點(diǎn),可將邊界細(xì)化至一個(gè)像素寬度[6]。 設(shè)定布爾值 b1,b2,b3,b4為目標(biāo)點(diǎn)梯度與水平和垂直梯度值大小進(jìn)行邏輯比較的結(jié)果,如式(3)所示:
最后判斷鄰域梯度是否滿足大于水平或垂直梯度的條件,并根據(jù)自適應(yīng)閾值參數(shù)進(jìn)行二值化,則目標(biāo)點(diǎn)的二值化結(jié)果如式(4)所示:
式中:B(i,j)為生成的二值圖像;thresh 是根據(jù)梯度幅值設(shè)定的自適應(yīng)閾值。
2.3.2 圖像處理流程
由于攝像頭采集的水尺圖像是包含水尺的全域圖像,而提取刻度只關(guān)心水尺輪廓的目標(biāo)區(qū)域,因此需要將拍攝的圖像經(jīng)過(guò)灰度化之后,利用非極大值抑制Sobel邊緣檢測(cè)提取出水尺輪廓,從而將水尺部分截取出來(lái)單獨(dú)進(jìn)行進(jìn)一步處理。這樣可以避免背景的干擾而造成識(shí)別精度低,同時(shí)也可以減小圖像大小,提高嵌入式設(shè)備的圖像處理速度和精度。
對(duì)于截取下的水尺圖像,首先確定水尺在水面上的分界面。由于水尺水面以上和水面以下部分對(duì)比明顯,利用邊緣檢測(cè)技術(shù)可以明確區(qū)分兩者。然后使用OSTU方法(大津法)對(duì)圖像進(jìn)行全局二值化,并把水面分界線以下部分用0(黑色)擦除。由于水尺刻度具有水平方向的延伸性,而刻度數(shù)字通常不是規(guī)則的,利用OpenCV的連通域分析方法[7]去除數(shù)字,提取出刻度線。最后將水尺歸一化,分成左右兩部分,以便于統(tǒng)計(jì)圖像處理結(jié)果。
Modbus/TCP的數(shù)據(jù)幀是由MBAP報(bào)頭和協(xié)議數(shù)據(jù)單元PDU組成,具體格式如表1所示。Modbus/TCP傳輸過(guò)程中使用TCP/IP以太網(wǎng)參考模型的5層,Modbus協(xié)議工作在應(yīng)用層,Modbus/TCP報(bào)文被封裝在以太網(wǎng)TCP/IP數(shù)據(jù)包中[8]。Modbus/TCP由于具有網(wǎng)絡(luò)實(shí)施價(jià)格低廉、網(wǎng)絡(luò)部件通用、易于集成、傳輸量大等特點(diǎn),在工業(yè)領(lǐng)域的應(yīng)用越來(lái)越廣泛。
表1 Modbus/TCP數(shù)據(jù)幀格式Tab.1 Data frame format of Modbus/TCP
本系統(tǒng)將嵌入式設(shè)備設(shè)計(jì)成服務(wù)器端,用于處理上位機(jī)數(shù)據(jù)請(qǐng)求并進(jìn)行相應(yīng)操作,返回響應(yīng)。利用BSD套接字接口函數(shù)編寫通訊程序,主要分為以下7個(gè)步驟:
(1)調(diào)用 socket()函數(shù)創(chuàng)建一個(gè)基于 TCP連接的套接字;
(2)調(diào)用bind()函數(shù)將本地IP地址和端口號(hào)綁定到套接字上;
(3)調(diào)用 listen()函數(shù)使 socket對(duì)象處于監(jiān)聽狀態(tài);
(4)當(dāng)客戶機(jī)發(fā)出連接請(qǐng)求時(shí),服務(wù)器監(jiān)聽到該請(qǐng)求,調(diào)用accept()函數(shù)接受請(qǐng)求,從而確定連接;
(5)調(diào)用 recv()函數(shù)接收客戶機(jī)發(fā)送的請(qǐng)求報(bào)文;
(6)分析報(bào)文各字段,調(diào)用send()函數(shù)發(fā)送響應(yīng)報(bào)文;
(7)調(diào)用 close()函數(shù)關(guān)閉 TCP 連接,使服務(wù)端socket重新進(jìn)入監(jiān)聽狀態(tài),等待下一次連接請(qǐng)求。
本系統(tǒng)以某公司水環(huán)境綜合監(jiān)測(cè)試驗(yàn)場(chǎng)為測(cè)試對(duì)象,圖4(a)是攝像頭采集的一幀圖像,圖4(b)是經(jīng)過(guò)預(yù)處理獲取的水尺圖像。圖5所示為圖像處理的結(jié)果。水尺最頂部刻度線代表的水位可以在軟件中預(yù)先設(shè)定,根據(jù)水面以上水尺的刻度,就能夠推算出當(dāng)前的水位值。
圖4 預(yù)處理分離水尺圖像部分Fig.4 Preprocessing to separate the portion of water gauge image
圖5 圖像處理結(jié)果Fig.5 Result of image processing
為了進(jìn)行通信驗(yàn)證,將嵌入式設(shè)備用雙絞線通過(guò)以太網(wǎng)口與PC機(jī)相連,上位機(jī)軟件采用北京三維力控科技公司的力控組態(tài)軟件,版本為Force Control V6.0。進(jìn)入力控的開發(fā)模式,首先定義設(shè)備名稱、設(shè)備地址、設(shè)備的IP地址以及端口號(hào),完成IO設(shè)備的創(chuàng)建。接下來(lái)創(chuàng)建數(shù)據(jù)庫(kù),用于實(shí)時(shí)數(shù)據(jù)的處理以及歷史數(shù)據(jù)的存儲(chǔ),在配置完數(shù)據(jù)庫(kù)并完成數(shù)據(jù)鏈接之后,便創(chuàng)建了一個(gè)水位值數(shù)據(jù)點(diǎn)(SY)[9]。組態(tài)軟件運(yùn)行后,可以從實(shí)時(shí)數(shù)據(jù)庫(kù)中看到水位值PV的變化,如圖6所示。
圖6 實(shí)時(shí)數(shù)據(jù)庫(kù)中的水位值Fig.6 Water level value in real-time database
通過(guò)動(dòng)畫連接,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)刷新在主界面上,這樣就能將現(xiàn)場(chǎng)真實(shí)的數(shù)據(jù)放映到計(jì)算機(jī)的監(jiān)控畫面中,從而達(dá)到對(duì)水位實(shí)時(shí)監(jiān)測(cè)的目的,如圖7所示。
圖7 水位值在監(jiān)控界面上實(shí)時(shí)顯示Fig.7 Water level value is displayed in real-time on the monitoring interface
本文通過(guò)結(jié)合嵌入式系統(tǒng)技術(shù)、圖像處理技術(shù)和以太網(wǎng)通信技術(shù),設(shè)計(jì)了水位監(jiān)測(cè)系統(tǒng),可以實(shí)現(xiàn)對(duì)泵站前后池水位的實(shí)時(shí)監(jiān)測(cè)。根據(jù)現(xiàn)有的泵站系統(tǒng)結(jié)構(gòu)框架,將本系統(tǒng)進(jìn)行了分層設(shè)計(jì),并詳細(xì)地介紹了每部分的具體實(shí)現(xiàn)。通過(guò)實(shí)驗(yàn)表明,本系統(tǒng)能夠?qū)崿F(xiàn)水位監(jiān)測(cè)的基本功能,有很高的穩(wěn)定性和可靠性,具有廣闊的應(yīng)用前景。