左瑞娟,武永華,張濤
(1.福建師范大學(xué) 數(shù)學(xué)與信息學(xué)院,福建福州,350117;2.福建江夏學(xué)院 電子信息科學(xué)學(xué)院,福建福州,350108)
近幾年在中國電表的智能計量、數(shù)據(jù)采集、遠程控制在大部分地區(qū)已經(jīng)普遍實現(xiàn)了,而水表的自動化、智能化發(fā)展的進度卻比較遲緩。傳統(tǒng)的水表一般都是機械水表,機械水表不會被磁場干擾,方便安裝,維修簡單,受環(huán)境干擾的影響小,因此大部分地區(qū)都普遍使用傳統(tǒng)的水表。隨著時代發(fā)展,越來越信息化、智能化,傳統(tǒng)的水表已經(jīng)慢慢逐漸被替代了。傳統(tǒng)水表信息記錄、統(tǒng)計起來相對比較麻煩[1]。傳統(tǒng)水表記錄員要挨家挨戶,走街串巷的去查看各家各戶的水表,工作量十分大,效率低[2],進度慢,也可能在一定程度上打擾了居民的休息。傳統(tǒng)的查水表工作,有可能被一些不法分子利用,作為虛假身份,進行一些違法行為。因此隨著社會發(fā)展,自動抄表系統(tǒng)[3]開始出現(xiàn),自動抄表系統(tǒng)的出現(xiàn)提高了抄表工作的效率,使得管理更加的方便,數(shù)據(jù)更加確,解決了人工抄表的一些弊端。因此,抄表自動化技術(shù)應(yīng)用前景非常廣闊[4][5]
本設(shè)計通過ESP-32[6]驅(qū)動OV2640[7]攝像頭采集水表表盤圖像后,水表圖片進行壓縮并且傳輸?shù)綌?shù)據(jù)采集器。數(shù)據(jù)采集器通過RS485收集各數(shù)據(jù)采集設(shè)備采集的數(shù)據(jù)。數(shù)據(jù)采集器再將數(shù)據(jù)傳輸?shù)絇C端進行基于OpenCV[8]圖像處理和數(shù)字識別,識別出圖像中的水表數(shù)字,并且將識別出來的水表數(shù)字存放到數(shù)據(jù)庫當中。PC端軟件的流程如圖1所示。此系統(tǒng)可以省去很大一部分人工勞動力,降低了水表采集工作在一定程度上對居民生活的打擾。
圖1 PC端軟件流程圖
本設(shè)計通過ESP-32開發(fā)板驅(qū)動OV2640攝像頭,采集水表圖像。然后將采集到的水表圖像進行JPEG壓縮,通過串口RX、TX傳輸?shù)絇C端,同時通過LED CTR管腳控制補光燈。本設(shè)計的硬件電路圖,如圖2所示。
圖2 系統(tǒng)硬件電路圖
ESP-32是安信可攝像頭模組里面最新發(fā)布的小尺寸的開發(fā)板。ESP-32擁有達到最低6mA的深度睡眠電流,是物聯(lián)網(wǎng)應(yīng)用的理想解決方案,內(nèi)部擁有體積超小的802.11b/g/n Wi-Fi + BT/BLE SoC模塊。
OV2640是OmniVision公司生產(chǎn)的一顆1/4寸的CMOS UXGA(1632*1232)圖像傳感器。通過SCCB 總線控制,可以輸出整幀、子采樣、縮放和取窗口等方式的各種分辨率8/10位影像數(shù)據(jù)。UXGA最高15幀/秒(SVGA可達30幀,CIF可達60幀)。
本設(shè)計采用OpenCV對圖像進行預(yù)處理,表盤的原始圖片如圖3所示。由于攝像頭采集到的圖片都會含有噪聲,通過使用OpenCV中的cv.GaussianBlur()函數(shù),對采集的圖片進行高斯模糊去噪,如圖4所示。使用OpenCv中的cv.cvColor()函數(shù),來對進行高斯模糊去噪后的圖像進行灰度化處理,減小原始圖像的數(shù)據(jù)量,如圖5所示。本設(shè)計采用全局閾值的方法通過使用OpenCv中的cv.threshold()函數(shù)將轉(zhuǎn)化為灰度的圖像進行二值化處理,從而方便進行輪廓的識別,如圖6所示。圖像的膨脹和腐蝕,就是對圖像中的白色部分進行處理。通過圖像的膨脹,可以擴大二值化圖像中白色的部分,通過圖像的腐蝕,可以縮減二值化圖像中白色的部分,本設(shè)計通過使用OpenCv中的cv.dilate()函數(shù)和cv.erode()函數(shù)將轉(zhuǎn)化為二值化的圖像進行膨脹或腐蝕的處理,如圖7所示。圖像的輪廓提取是對二值化圖像的操作,是基于圖像邊緣提取的基礎(chǔ)尋找對象輪廓的方法。本設(shè)計通過使用OpenCv中的cv.findContours()函數(shù)對轉(zhuǎn)化為二值化的圖像進行輪廓的提取,如圖8所示。
圖3 原始圖像
圖4 圖像高斯模糊
圖5 圖像灰化
圖6 圖像二值圖
圖7 膨脹或腐蝕處理后的圖像圖
圖8 輪廓提取的圖像
表盤數(shù)字的識別有模板匹配、結(jié)構(gòu)特征、神經(jīng)模糊等方法。本設(shè)計采用模板匹配的方法來實現(xiàn)表盤數(shù)字識別。啟動ESP32開發(fā)板,打開攝像頭,獲取水表表盤圖片,然后通過RS485接口傳輸?shù)絇C端。PC端進行高斯模糊去除噪聲,轉(zhuǎn)為灰度圖像,將圖像進行二值化,通過腐蝕操作后,導(dǎo)入模板圖片,進行模板匹配,識別出圖中全字的水表數(shù)字。然后切割剩下的半字區(qū)域,將半字圖片,切割成上半部分和下半部分,分別于模板圖片進行匹配,找出相似度最高的模板圖片作為半字識別的結(jié)果。然后將識別出來的水表數(shù)字按照在圖片中的位置,按順序排列調(diào)整好,將數(shù)據(jù)放入數(shù)據(jù)庫中并顯示。
表盤全字通過模板匹配來識別。選擇全字效果較好的表盤圖片,通過高斯模糊去噪、圖像灰度化、圖像二值化、腐蝕膨脹、輪廓識別,分割出相同尺寸大小0-9十個數(shù)字的模板。然后從0-9個數(shù)字模板中分別對導(dǎo)入進來的待識別的水表圖片,進行模板匹配。在模板匹配中,可通過差值平方和匹配法CV_TM_SQDIFF、相關(guān)匹配法CV_TM_CCORR以及標準相關(guān)匹配法CV_TM_CCORR_NORMED等方法來尋找相似度。本設(shè)計采用標準相關(guān)匹配法,通過cv.matchTemplate(methond=CV_TM_CCORR_NORMED)和cv.minMaxLoc()函數(shù)在待識別的水表圖片中找出0-9個數(shù)字模板中,找出相似度較高的幾個全字模板。將匹配到的這些數(shù)字模板圖片如圖9所示,水表全字識別如圖10所示。
圖9 匹配的數(shù)字模板圖片
圖10 全字識別結(jié)果的圖片
因為水表表盤上的數(shù)字可能有些位數(shù)會出現(xiàn)半字的情況,即由兩個數(shù)字的上半部分和下半部分組成。本設(shè)計中對半字識別采取的方法是:先用全字識別后識別出一些區(qū)域,剩下的區(qū)域就是半字區(qū)域,如圖11所示。將半字區(qū)域分割出來,如圖12所示,將半字圖片通過再一步的輪廓識別后,分割為下半部分和上半部分,如圖13所示。這些半字圖像的組合形式有以下幾種(0,1),(1,2),(2,3),(3,4), (4,5),(5,6),(6,7),(7,8),(8,9),(9,0)。將分割出來半字區(qū)域的上半部分和下半部分,分別再與全字的模板圖片進行逐一的模板匹配。然后通過在0penCV當中的cv.match Template(methond=CV_TM_CCORR_NORMED)和cv.minMaxLoc()函數(shù)找出與之相似度最高的兩個數(shù)字模板。對比兩個匹配到的數(shù)字模板所對應(yīng)的數(shù)字,將數(shù)值較高的數(shù)字作為識別結(jié)果。
圖11 半字區(qū)域圖片
圖12 半字區(qū)域二值化
圖13 半字區(qū)域分割
本設(shè)計中通過ESP-32開發(fā)板,驅(qū)動OV2640攝像頭,將采集到的圖片數(shù)據(jù)傳輸?shù)絇C端,PC端通過OpenCV對表盤圖像進行預(yù)處理,然后進行全字和半字的識別,將識別的結(jié)果提取出來并保存到數(shù)據(jù)庫,為后續(xù)智慧水務(wù)的應(yīng)用提供基礎(chǔ)數(shù)據(jù)。