馬金輝,周 斌,趙明冬
(鄭州科技學(xué)院,河南 鄭州 450064)
電表是檢測(cè)用電安全和統(tǒng)計(jì)用電量的重要手段和工具,但由于使用成本和某些特殊場(chǎng)景需求的限制,大多數(shù)電表并未更換為新一代智能電表。 目前多維人工定時(shí)讀取電表數(shù)據(jù),記錄用電量,這種方法存在主觀性大、工作效率和識(shí)別率低等缺陷,因此,電表數(shù)字的自動(dòng)識(shí)別成了當(dāng)前研究的熱點(diǎn)問題。 如通過同態(tài)濾波和改進(jìn)的Bersen 算法對(duì)電表數(shù)字區(qū)域的自動(dòng)定位[1];通過優(yōu)化Faster R-CNN 網(wǎng)絡(luò)識(shí)別電表讀數(shù)[2];基于BP 神經(jīng)網(wǎng)絡(luò)的機(jī)械式電表數(shù)字自動(dòng)識(shí)別方法[3]。 目前,數(shù)字電表識(shí)別的解決方案大多依賴較為復(fù)雜的算法,這導(dǎo)致硬件系統(tǒng)的處理速度受到限制,難以形成輕量化系統(tǒng)。 為此,本文提出基于STM32 單片機(jī)的電表自動(dòng)識(shí)別方法,以達(dá)到輕量化數(shù)字識(shí)別的需求。
本系統(tǒng)以STM32F103ZET6TR 單片機(jī)作為控制核心,完成電表數(shù)字識(shí)別系統(tǒng)的設(shè)計(jì)與制作,系統(tǒng)框如圖1 所示,包括了主控模塊、數(shù)字檢測(cè)與識(shí)別模塊、電源模塊、按鍵模塊,能夠完成自動(dòng)識(shí)別電表讀數(shù)的功能。
圖1 電表數(shù)字識(shí)別系統(tǒng)
主控模塊以STM32F103ZET6TR 單片機(jī)作為系統(tǒng)主控系統(tǒng),其內(nèi)核為性能強(qiáng)、高性價(jià)比、低功耗的嵌入式應(yīng)用專門設(shè)計(jì)的cortex-M 內(nèi)核,該單片機(jī)上集成了32~512 KB 閃存,數(shù)據(jù)處理非常迅速,功能極其強(qiáng)大,時(shí)鐘頻率可達(dá)到72 MHz,是同類產(chǎn)品中性能最好的產(chǎn)品,完全能夠滿足系統(tǒng)的圖像處理需求,并且能達(dá)到系統(tǒng)輕量化的目標(biāo)。
系統(tǒng)選用OpenMV 攝像頭作為數(shù)字檢測(cè)與識(shí)別模塊,OpenMV 為一個(gè)開源,高性價(jià)比,是具有功能強(qiáng)大的機(jī)器視覺系統(tǒng),不僅搭載了OV7725 攝像芯片,而且相較于其他圖像識(shí)別模塊,OpenMV 可以在有限的硬件條件下實(shí)現(xiàn)核心機(jī)器視覺算法,并具有數(shù)據(jù)存儲(chǔ)的卡槽,可以通過SD 卡存儲(chǔ)大量的字模圖片。 用戶能夠把控圖像品質(zhì)、數(shù)據(jù)格式和傳輸模式。 而其自身獨(dú)有的OV 圖像傳感器技術(shù),還可以得到清晰穩(wěn)定的圖像,達(dá)到本實(shí)驗(yàn)所需的圖像效果。
與此同時(shí),其內(nèi)置了一些圖像處理算法,使用時(shí)可以直接調(diào)用庫(kù)實(shí)現(xiàn)數(shù)字識(shí)別功能。 此模塊負(fù)責(zé)對(duì)電表圖像進(jìn)行采集和預(yù)處理,并在此基礎(chǔ)上構(gòu)建出字模庫(kù)[4];再由字模庫(kù)與采集的圖像進(jìn)行字符匹配。
系統(tǒng)采用TFT 液晶顯示屏作為讀數(shù)圖像顯示模塊,采用ILI9341 作為2.8 英寸的TFT-LCD 的液晶控制驅(qū)動(dòng)。 TFT 液晶顯示屏不僅可以直接顯示出識(shí)別出的結(jié)果,便于判斷系統(tǒng)識(shí)別數(shù)字的準(zhǔn)確性和調(diào)試系統(tǒng)時(shí)結(jié)果的實(shí)時(shí)性,還可以顯示系統(tǒng)當(dāng)前狀態(tài),以便進(jìn)行復(fù)位或切換模式等操作;其本身所具有的價(jià)格便宜、操作簡(jiǎn)單、抗干擾能力強(qiáng)等優(yōu)點(diǎn)非常適合本系統(tǒng)。
電源模塊由兩節(jié)18650 鋰電池串聯(lián)經(jīng)過MP1584和AMS1117 的變壓處理,為整個(gè)系統(tǒng)提供5V 或者3.3V 電壓,再經(jīng)過濾波部分、穩(wěn)壓部分,確保電路的正常穩(wěn)定工作。
按鍵模塊由1×3 的按鍵矩陣構(gòu)成,其功能分別為:復(fù)位、向上切換模式、向下切換模式;由于外界因素和硬件本身的不確定性,會(huì)導(dǎo)致系統(tǒng)在使用過程中產(chǎn)生較大的誤差,因此需要進(jìn)行復(fù)位以保證系統(tǒng)可以正常運(yùn)行;而通過觸發(fā)上下切換模式的按鍵,則會(huì)切換系統(tǒng)內(nèi)儲(chǔ)存的各類電表的字符庫(kù),減少了在PC 端配置的步驟,令整個(gè)系統(tǒng)更加便捷化、輕量化。
該系統(tǒng)軟件使用C 語(yǔ)言進(jìn)行軟件編寫,采用Keil 5 進(jìn)行編程,搭配Proteus 進(jìn)行仿真測(cè)試,最后用Stcisp 燒錄軟件下載至STM32F103ZET6TR 單片機(jī)中。主程序流程如圖2 所示。 系統(tǒng)進(jìn)行初始化程序,根據(jù)要識(shí)別電表的實(shí)際情況設(shè)置識(shí)別參數(shù),通過OpenMV采集圖片;進(jìn)入灰度化處理、二值化處理、識(shí)別讀數(shù)區(qū)域、字符裁剪的圖像預(yù)處理子程序;進(jìn)入數(shù)字識(shí)別子程序,使用字符匹配對(duì)電表讀數(shù)進(jìn)行識(shí)別;將識(shí)別結(jié)果輸出至TFT 液晶顯示屏上。
圖2 主程序流程
因?yàn)镺penMV 采集的圖像為彩色圖像,不利于本系統(tǒng)對(duì)讀數(shù)的識(shí)別,所以為了便于后續(xù)的處理工作,在接收到圖像后,首先要對(duì)其進(jìn)行灰度化和二值化處理。 通過像素點(diǎn)之間的灰度值差異程度來確定要識(shí)別讀數(shù)的區(qū)域;對(duì)識(shí)別區(qū)域的圖像再次進(jìn)行二值化處理,獲得相鄰字符間的邊界,并按照其左右邊界將連續(xù)的字符串分割為單個(gè)字符;對(duì)字符圖片進(jìn)行歸一化。
3.2.1 灰度化處理
一幅彩色圖像的任一像素上的顏色均由R、G、B這3 種單色構(gòu)成,每個(gè)像素的顏色值又稱為灰度,指黑白圖像中點(diǎn)的顏色深度,范圍一般從0 到255,白色為255,黑色為0。 對(duì)圖像進(jìn)行灰度化測(cè)試處理,其原圖像與灰度化圖像如圖3 所示,通過灰度化處理令圖像的內(nèi)存占有更小,運(yùn)算速度更快[5]。 可以排除不必要的信息,增強(qiáng)對(duì)比,更加突出目標(biāo)區(qū)域,為下一步的二值化處理做基礎(chǔ)。
圖3 原圖像與灰度化圖像
3.2.2 二值化處理
圖像二值化就是將圖像上的像素點(diǎn)的灰度值設(shè)置為0 或255,也就是將整個(gè)圖像呈現(xiàn)出明顯的黑白效果的過程。 經(jīng)過灰度化處理后雖然排除了一些不必要的信息,但圖像還是包含了要識(shí)別的目標(biāo)區(qū)域、背景和其他干擾因素。 為了之后對(duì)圖像進(jìn)行分割操作,還要對(duì)灰度化處理后的圖像進(jìn)行二值化處理,使圖像中數(shù)據(jù)量大為減少,從而凸顯出更清晰的特征信息。
本系統(tǒng)使用大津法(OTSU 算法)對(duì)圖像進(jìn)行二值化處理[6]。 設(shè)灰度圖像灰度級(jí)是1~m 級(jí),則將灰度范圍在K 處截為C0={1~K}與C1={K+1~m}兩部分,通過計(jì)算得出兩部分出現(xiàn)的概率ω0和ω1,平均值μ0和μ1與整體灰度平均值μ,最后求出兩部分之間的方差σ2(K),如下式(1)所示:
σ2(K)= ω0(μ0-μ)2+ω1(μ1-μ)2= ω0ω1(μ1-μ0)2= [μ × ω(K) - μ(K)]2/ω(K)[1 - ω(K)] (1)
計(jì)算當(dāng)σ2(K)最大時(shí)K 的值K?,那么這時(shí)K?即為大津法二值化的最佳閾值。
對(duì)圖像進(jìn)行測(cè)試處理,其灰度化圖像和二值化圖像的結(jié)果如圖4 所示。
圖4 灰度化與二值化圖像
3.2.3 識(shí)別讀數(shù)區(qū)域
通過二值化分析出各行的跳變點(diǎn),因?yàn)樽x數(shù)區(qū)域?yàn)樽址?與其他范圍差10 個(gè),通過跳變點(diǎn)的分析和判斷,即可判斷出需要識(shí)別的讀數(shù)區(qū)域。 本系統(tǒng)程序中設(shè)定跳變點(diǎn)大于10 個(gè),在連續(xù)行存在多個(gè)跳變點(diǎn)大于10 的位置處即為識(shí)別區(qū)域的上邊邊界Y-start,結(jié)束位置設(shè)定為識(shí)別區(qū)域的下邊邊界Y-end。 再通過同樣的方法識(shí)別出車牌區(qū)域的左邊邊界X-start 和右邊邊界X-end。 這樣既可獲取讀數(shù)區(qū)域的準(zhǔn)確邊界,從而確定目標(biāo)讀數(shù)區(qū)域,如圖5 示。
圖5 目標(biāo)讀數(shù)區(qū)域
3.2.4 字符裁剪
由于系統(tǒng)使用的是匹配法識(shí)別數(shù)字,所以需要將數(shù)字串切割為單個(gè)數(shù)字,以便于下一步的數(shù)字識(shí)別操作,在目標(biāo)讀數(shù)區(qū)域確定后,再次通過二值化進(jìn)行字符的分割處理。 在處理過程中,首先獲取各個(gè)字符的左邊邊界B-left 和右邊邊界B-right,接著按照邊界切割數(shù)字,對(duì)于一般電表,若分割出6 個(gè)字符,則認(rèn)為分割結(jié)果比較準(zhǔn)確,數(shù)字切割后圖像如圖6 所示。
圖6 切割處理后的圖像
系統(tǒng)使用基于NCC(Normalized Cross Correlation)算法,歸一化互相關(guān)匹配法,來實(shí)現(xiàn)數(shù)字識(shí)別功能[7]。
NCC 算法是OpenMV 中一種常用的成熟的圖像匹配算法,其優(yōu)點(diǎn)為抗干擾能力強(qiáng),當(dāng)灰度變化不大時(shí)精度很高,符合本系統(tǒng)的要求。 NCC 算法結(jié)果只會(huì)在-1 到1 之間,所以非常容易量化比較結(jié)果,只要給出一個(gè)閾值就可以判別結(jié)果的好與壞。
在原始圖像中任取一個(gè)點(diǎn)( px,py) 作為一個(gè)n ×n 匹配范圍的基準(zhǔn)點(diǎn)。 接著對(duì)于目標(biāo)相對(duì)位置(px+d,py) 同樣構(gòu)建一個(gè)n ×n 大小的匹配范圍,對(duì)兩個(gè)范圍進(jìn)行相似度對(duì)比。 NCC 算法公式如下:
其中, NCC(p,d) 的區(qū)間為[- 1,1],Wp為匹配區(qū)間,I1(x,y) 為初始圖像的像素值為初始區(qū)間內(nèi)的像素均值,I2(x + d,y) 為對(duì)應(yīng)點(diǎn)在x 方向上偏移d 后的像素值,為平移后目標(biāo)范圍內(nèi)的像素均值。
當(dāng)NCC=-1 時(shí),則表示兩個(gè)匹配區(qū)間完全不相關(guān),反之,當(dāng)NCC=1 時(shí),則表示兩個(gè)匹配區(qū)間強(qiáng)相關(guān)。此時(shí),系統(tǒng)就會(huì)輸出與模板強(qiáng)相關(guān)所代表的數(shù)字作為這一位的讀數(shù)結(jié)果。
使用系統(tǒng)對(duì)目標(biāo)進(jìn)行識(shí)別,研究表明:在上午8點(diǎn)光照條件良好的情況下,系統(tǒng)識(shí)別的正確率可達(dá)到90%;在晚上八點(diǎn)時(shí)光照條件不理想的情況下,系統(tǒng)不能識(shí)別出電表讀數(shù)。
為滿足生活中數(shù)字電表讀數(shù)的輕量化需求,本文利用STM32 單片機(jī)結(jié)合自構(gòu)字符實(shí)現(xiàn)了電表數(shù)字的識(shí)別功能。 在光照條件良好的情況下,該方法能夠?qū)崿F(xiàn)90%以上的正確率,達(dá)到了設(shè)計(jì)效果。 但是在設(shè)計(jì)中仍存在一些需要改進(jìn)的方面,例如光線過暗時(shí)需要輔助照明、數(shù)據(jù)通過無線網(wǎng)絡(luò)上傳系統(tǒng)終端等。