陳銘軒



關鍵詞:計算機視覺;污水渾濁度;圖像檢測
0引言
在自來水廠的污水處理流程中,脫泥裝置是一個非常重要的組成部分。它可以實現固液分離,從而產生可處理的污泥,進而改善出水質量,保護水體生態,以便后續的處理[1]。在常規的自來水廠中,通常由工程師對污水池的狀態進行監控,進而調整控制系統中的藥水供給、污水流量、沉淀時間等參數。如果污水脫泥過程處理不夠徹底,則會給后續的處理步驟帶來困難,同時也有可能會因為污水排放不達標,進而造成環境污染[2]。因此,能夠對自來水廠的污水脫泥裝置中污水的狀態進行及時的檢測與監控具有重要意義。
傳統的污水脫泥裝置中的污水狀態監控通常由經驗豐富的工程師來完成。現代的污水檢測已經可以對PLC中傳感器的數據通過網絡進行監測[3],甚至網絡監控的應用使得將污水監控從現場搬到監控室[4],但污水狀態監控依然依賴于人力。由于脫泥的過程是一個7×24小時的過程,因此,工程師通常面臨夜班的問題。盡管污水狀態并不需要時時刻刻監控,但是長期枯燥的監控依然會使得工程師變得疲憊。
當下,計算機視覺在人工智能的幫助下得以飛速發展,它具有更好的實時性以及更優的精度[5]。這使得利用計算機視覺的相關技術對自來水廠的脫泥裝置中污水的渾濁與否進行檢測成為可能。現階段,已經有多種方法可以采集到現場的圖像[6]。通過調用API,獲取布置在現場監控的圖像,并對其進行預處理、裁剪、特征提取、機器學習,從而完成對污水狀態的實時檢測,從而極大地提升污水處理的響應速度,進而提升污水處理的質量[7]。
基于此,本文引入計算機視覺,對污水狀態識別算法進行深入研究,實現污水狀態的準確識別、快速響應,為提高污水處理效率與質量作出貢獻。
1水廠脫泥罐污水池水面渾濁檢測算法研究
1.1水廠脫泥罐污水池水面的圖像采集
在進行水廠脫泥罐污水池的渾濁檢測之前,圖像的獲取是第一步。水廠本身已經采用第三方的工業攝像頭進行污水監控,并可以在PC端及手機端實時進行查看。但是對于機器學習而言,需要有規律間隔地對污水池的圖像進行采集,因此人工進行采集的方法顯然不適用。
基于Python進行自動化采集的辦法應運而生。通過使用第三方廠家提供的網站API,使用OpenCV對攝像頭的視頻流進行讀取,并從中截取一幀作為當前的圖像。結合Python自動化的特性,每隔一段設置的時間進行一次采集。這樣,程序可以在后臺自動地對污水池的圖像進行采集,既解決了機器學習進行識別的數據源問題,也為之后的自動化定時識別打下基礎。
1.2水廠脫泥罐污水池監控畫面預處理
1.2.1畫面裁剪
在水廠脫泥罐污水池渾濁檢測算法中,畫面裁剪是第一步。由于普通的監控通常有監控的時間在畫面,同時對于脫泥罐而言,污水池上通常會有攪拌裝置。這些內容并不是污水的一部分,它們會對污水的識別造成不良影響,因此需要從畫面中刪去。由于攝像頭的字符位置是固定的,安裝位置也是固定的,因此只需要從實際的圖片中對需要的污水區域進行截取即可。
1.2.2畫面的灰度化
由于水廠脫泥設備是7×24小時運作的,因此晝夜變化會使得監控攝像頭在普通模式與紅外線模式之間進行切換。這種切換反映在如果監控攝像頭開啟了紅外模式,即使采集到的畫面是以RGB形式表現的,但實際圖像也只是一張灰度圖片。因此為了使得消除環境影響,需要統一將圖像進行灰度化。在這里默認使用了OpenCV中的RGB2GRAY函數。這個函數的原理是按照一定比例將RGB三個通道中[0,255]的值混合,形成一個新的值,該值即為灰度圖中灰度通道的值[8]。公式如下:
1.3水廠脫泥罐污水池監控畫面的特征提取
機器學習的原理實質上是對畫面的特征進行區分和學習。當畫面的特征存在明顯差異時,機器學習模型可以有效地進行區分;反之,若畫面特征無法準確區分兩類事物,即使應用了機器學習,效果可能不盡如人意。因此,確定具有顯著差異的畫面特征至關重要。
在污水池水面渾濁與否的檢測中,機器學習模型需要區分渾濁的污水和清澈的污水兩類情況。在實際圖像中,由于污水通常富含泥沙而導致水質變渾濁。這些泥沙在白天往往呈現為黑色,而在夜晚,在監控攝像頭的紅外模式下,則常呈現為亮白的反光點。這種變化導致泥沙區域與周圍清澈水面之間產生明顯對比,不論是白天還是黑夜,對比污水池清澈情況,這些黑色區域和白色區域成為畫面的顯著特征。
為了提取這種黑白特征,考慮到水廠現場設備算力有限,無法運用復雜的機器學習或神經網絡算法,將圖片的直方圖作為特征選擇是一個不錯的方案。直方圖將統計圖像中像素點的不同顏色情況,是一種常用的特征描述方法。統計方法如下:
其中f(c)為像素點值為c的像素點數量,g(x,y)為圖片在第x行,第y列的灰度值,image為整個圖片的像素點集合。這種像素點的統計特征在暗色像素與接近白色的像素數量在理論上會多于普通的圖片,即在特定的區域產生一定的峰值。
圖1中不難發現在清澈的圖片有大量的像素點值在150~200區間,而渾濁的圖片則在50~100和200+有較多的像素點。這說明了統計像素點值的數量這一特征可以確確實實區分開水面的渾濁與否。
提取之后的圖片特征將會以csv的形式存儲在文件中,格式如表1所示。
1.4機器學習模型的選擇與訓練策略
將圖片的特征提取出來以后,接下來的任務就是針對這些提取出來的特征,來判斷污水渾濁與否。在Python的sklearn包中有若干的機器學習模型可供選擇。通常來說,模型的選擇沒有一成不變的定式,最終還是需要根據不同模型的不同測試結果來進行選擇。因為是對圖像中的數字特征進行分類,同時理論上不同的數字特征又決定了不同的分類,即清澈與渾濁,因此決策樹就變成了一個很好的選擇。它的優化版本隨機森林也有可能是一個很好的選擇。在此基礎上,本文也使用了KNN和Adaboost模型來進行測試。
由于采集時間較短,數據量有限,因此采用K折交叉驗證(KFold)的訓練方式來進行訓練。KFold通過把數據集劃分成相等的n份,每一次在這n份中取1份作為測試集,剩下的作為訓練集,以此重復n次。相比較通常的劃分方式,這種方式將有限的數據量進行了擴充,同時也減少了過擬合的發生,有助于提高訓練的準確率[9]。KFold的訓練過程如圖2所示。
2實驗分析
2.1實驗環境
實驗所使用到的軟件包及版本號如下:1)Python3.10。2)opencv4.6.0。3)sklearn1.1.1。
共有268張人工挑選的圖片參與本次訓練,其中清澈的圖片有101張,標注為0;渾濁的圖片有167張,標注為1。
2.2不帶有KFold的訓練
首先,采用一般的訓練方式,即采用sklearn的包,將數據集按照7∶3劃分為兩份,7的那份用作訓練集,3的那份用作測試集。由于sklearn對于數據的劃分通常是隨機的,因此使用sklearn進行了一個10次的循環,并對不同的模型之間的F1-score進行比較。F1-score是一個對于模型綜合性能的較好評判標準[10],其計算方法為:
由此可見,不使用KFold訓練方法的模型具有很大的隨機性。同一個模型中,例如RandomForest,由于數據選取的原因,表現最好的時候與表現最差的時候甚至能夠達到15%左右的差距。同時觀察1、3、5、6組的數據,可以發現對于不同的數據劃分情況,模型的表現也各不相同,但是從整體趨勢上可以看出,RandomForest模型和AdaBoost模型的表現較好,而KNN的表現較差。
2.3帶有KFold的訓練
本文使用KFold的方式,來對數據集進行訓練。
取KFold的次數為5,也就是說數據選擇器會將整個數據集劃分為5份,每次用其中的1份作為測試集,剩下的作為訓練集。測試的F1-score如圖4所示。
由圖4可見,RandomForest、AdaBoost、Decision?Tree三個模型的F1-score都隨著測試輪數的增加而增加。而KNN模型則在測試的后段表現出了明顯的下降,這可能來自于模型的擬合能力不足。比較各個模型的F1-Score,可以發現RandomForest模型無論是在訓練進度還是最后的訓練結果都是四個模型中最好的。而AdaBoost和DecisionTree在訓練過程中不相上下,同時在訓練的結果中DecisionTree甚至要稍好于AdaBoost。
運用了KFold之后,可以發現模型的性能變得更強了。同時在多次運行訓練與測試期間,模型的訓練結果并沒有發生顯著變化,因此該訓練方法的穩定性也要顯著好于不使用KFold。但是部分模型在測試后期發生了F1-score偏高,甚至等于1的情形。這種情況看似模型性能很好,但是依舊有可能產生過擬合等情況,因此還需要在今后的實際使用中進行驗證。
3結束語
基于計算機視覺的水廠污水自動識別使得污水監控流程從半自動化到自動化,不僅可以節約人工,提高生產力,還為高質量出水,建設水體生態提供了良好的保障。本文的研究為水廠脫泥罐中的污水渾濁與否提供了良好的檢測率,大大提高了污水渾濁的檢出率和及時性。然而由于現實中的情況較為復雜,同時污水的渾濁與否也沒有一個固定的標準,即便是工程師也只能根據實際情況加以判斷。因此在今后的研究中應該推動建立污水渾濁的標準,或將渾濁程度進行量化,推動算法的標準化與規范化,為水廠的污水處理提供更加顯著的價值與貢獻。