金黎明,丁家滿,陳貴榮
(1.廣州市輕工技師學(xué)院,廣東廣州 510000;2.昆明理工大學(xué),云南昆明 650031)
儀器儀表作為工業(yè)控制中各種參量測量和顯示的工具,廣泛應(yīng)用于工業(yè)生產(chǎn)的各領(lǐng)域[1],為了保證出廠儀表的優(yōu)良率,精準(zhǔn)、高效地完成儀表出廠檢測一直是儀器儀表廠家非常重視的一個(gè)問題[2]。人工檢測存在速度慢和易漏檢等問題。因此如何通過低成本的圖像處理技術(shù)對出廠儀表進(jìn)行自動檢測,提高檢測速度和精度,降低成本的研究具有重要的意義[3]。
鄧清男等[4]針對變電站內(nèi)數(shù)顯儀表的讀數(shù)識別問題,提出了基于模板匹配的數(shù)顯儀表讀數(shù)識別方法,在MATLAB編程環(huán)境下進(jìn)行了實(shí)驗(yàn)。該方法易于操作,識別率高。張春洋等[5]針對數(shù)顯儀表在圖像采集過程中的筆畫缺失問題,提出了數(shù)字自動識別的方法。該方法對圖像傾斜、縮放等也有較好的適應(yīng)性。王峰等[6]為了實(shí)現(xiàn)對數(shù)碼管儀表正負(fù)號和小數(shù)點(diǎn)的實(shí)時(shí)識別,提出了基于CNN的數(shù)碼儀表識別方法,結(jié)果表明該方法能夠準(zhǔn)確穩(wěn)定地識別數(shù)碼管儀表讀數(shù)。上述研究針對不同的問題都提出了很好的解決方法,但是基本都停留在算法研究的階段,難以直接進(jìn)行工業(yè)化生產(chǎn)的推廣。張鑫等[7]針對計(jì)量檢定實(shí)驗(yàn)室數(shù)顯儀表校準(zhǔn)問題,以樹莓派為硬件平臺,結(jié)合BP神經(jīng)網(wǎng)絡(luò),設(shè)計(jì)了讀數(shù)識別系統(tǒng)。劉雄豪[8]針對人工讀表存在的錯誤率高、效率低等問題,設(shè)計(jì)了儀器儀表數(shù)字的智能監(jiān)控系統(tǒng)。上述研究雖然都進(jìn)行了系統(tǒng)設(shè)計(jì),但是在檢測速度和成本上有待提高。
本文以萬用表為實(shí)驗(yàn)對象,設(shè)計(jì)了基于STM32的儀表出廠檢測系統(tǒng),完成了系統(tǒng)軟、硬件的設(shè)計(jì),實(shí)現(xiàn)了儀表的位置感應(yīng)、圖像的采集和處理、不合格儀表的判定和剔除等一系列操作。
基于STM32的儀表出廠檢測系統(tǒng)由電源模塊、光電檢測模塊、圖像采集與處理模塊、剔除模塊和控制模塊組成。電源模塊為系統(tǒng)多個(gè)模塊提供不同標(biāo)準(zhǔn)的電壓,光電檢測模塊檢測當(dāng)前位置是否存在待檢測的儀表,圖像采集與處理模塊實(shí)時(shí)采集儀表讀數(shù)圖像,并對圖像中的儀表讀數(shù)進(jìn)行識別,剔除模塊去除流水線上檢測不合格的儀表,控制模塊協(xié)調(diào)多模塊工作,共同完成儀表出廠檢測任務(wù)。圖1為系統(tǒng)總體框圖。
圖1 系統(tǒng)總體框圖
系統(tǒng)工作時(shí),固定式的光電檢測模塊探測流水線上儀表的位置,返回信號給控制模塊,控制模塊檢測到返回信號后,發(fā)出指令給圖像采集與處理模塊,圖像采集與處理模塊接到命令后采集儀表讀數(shù)圖像并進(jìn)行圖像處理,將處理結(jié)果返回給控制模塊,控制模塊將結(jié)果與標(biāo)準(zhǔn)源輸出作比較,判斷儀表是否合格,通過剔除模塊去掉不合格儀表。
系統(tǒng)硬件由主控芯片和外圍電路組成,如圖2所示。光電傳感器、STM32、繼電器、攝像頭和FPGA分別是光電檢測模塊、控制模塊、剔除模塊、圖像采集與處理模塊的主芯片。
圖2 系統(tǒng)硬件框圖
圖像處理模塊硬件由OV5640攝像頭、FPGA、SDRAM芯片和FLASH芯片組成,如圖3所示。OV5640攝像頭通過內(nèi)部感光器件采集儀表讀數(shù)的高清圖像,通過I2C接口將圖像數(shù)據(jù)傳送至FPGA,F(xiàn)PGA加載訓(xùn)練完成的YOLO網(wǎng)絡(luò),對讀數(shù)進(jìn)行識別,提高圖像處理的速度,將識別結(jié)果通過UART返回,W9825G6KH-6型SDRAM芯片進(jìn)行數(shù)據(jù)緩沖,該芯片內(nèi)存空間為32 MB,時(shí)鐘頻率最高為166 MHz,F(xiàn)LASH芯片型號為M25P16,內(nèi)存為2 MB。
圖3 圖像處理模塊硬件
OV5640攝像頭是具有電荷耦合器件的攝像機(jī),常應(yīng)用于工業(yè)生產(chǎn)中[9]。像素為500萬,焦距可調(diào),使用I2C驅(qū)動,3.3 V供電,支持多種像素格式輸出。具有體積小、功耗低、壽命長、畸變小等優(yōu)點(diǎn)。由于FPGA需要進(jìn)行圖像處理和邏輯判斷等大量運(yùn)算,因此芯片需要有豐富的布線資源、可編程邏輯單元和內(nèi)存資源,文中采用EP4CE10F17C8型FPGA。該款芯片擁有10 320個(gè)邏輯單元、414 KB的嵌入式存儲資源、23個(gè)18×18的嵌入式乘法器、2個(gè)通用鎖相環(huán)、10個(gè)全局時(shí)鐘網(wǎng)絡(luò)、8個(gè)用戶I/O BANK和最大179個(gè)用戶I/O。
由于FPGA的結(jié)構(gòu)特性,單一硬件電路原理圖并不能將FPGA內(nèi)部的設(shè)計(jì)清晰、完整的敘述,因此添加了本設(shè)計(jì)的FPGA內(nèi)部結(jié)構(gòu)設(shè)計(jì)圖,如圖4所示。FPGA內(nèi)部架構(gòu)設(shè)計(jì)主要分輸入輸出部分、數(shù)據(jù)緩沖部分和數(shù)據(jù)處理部分,輸入輸出部分完成圖像數(shù)據(jù)的接收和識別結(jié)果的輸出,通過內(nèi)部可編程邏輯單元編寫I2C驅(qū)動和UART接口,數(shù)據(jù)緩沖部分用于保存神經(jīng)網(wǎng)絡(luò)自身的參數(shù)和神經(jīng)網(wǎng)絡(luò)計(jì)算過程的中間量,通過編寫SDRAM控制器實(shí)現(xiàn)對外部RAM的讀寫控制,實(shí)現(xiàn)數(shù)據(jù)緩沖,數(shù)據(jù)處理部分完成卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算任務(wù),通過FPGA并行運(yùn)算加速神經(jīng)網(wǎng)絡(luò)計(jì)算。
圖4 FPGA硬件系統(tǒng)框架
由于系統(tǒng)各部分硬件使用不同電壓標(biāo)準(zhǔn),如OV5640攝像頭供電電壓為3.3 V,PM-TF15/30型光電傳感器供電電壓為5 V,12 V繼電器以及FPGA芯片的1.2 V、2.5 V和3.3 V。設(shè)計(jì)了如圖5所示的系統(tǒng)電源電路。將12 V適配器作為系統(tǒng)電源,經(jīng)過穩(wěn)壓降壓芯片產(chǎn)生不同標(biāo)準(zhǔn)的電壓。LM2576屬于開關(guān)型DC/DC降壓芯片,輸出電壓可調(diào),最大輸出電流為3 A,內(nèi)部封裝有多種保護(hù)電路。ASM1117屬正向低壓降穩(wěn)定器,提供多種固定輸出,內(nèi)部封裝了過熱保護(hù)和限流保護(hù)等多種保護(hù)電路,能夠在復(fù)雜環(huán)境下穩(wěn)定工作。
圖5 電源模塊電路
圖6為控制及其他模塊電路圖。STM32使用12位分辨率的ADC檢測傳感器返回的信號,通過GPIO置位控制繼電器觸點(diǎn)的吸合。系統(tǒng)使用對射式光電傳感器,它的原理是如果待檢位置存在目標(biāo)則會阻斷發(fā)射器的光線進(jìn)入接收器,從而判斷待檢位置存在目標(biāo),具有靈敏度高、反應(yīng)快的優(yōu)點(diǎn),采用PM-TF15/30型光電傳感器,對射距離為1 m、工作電壓為5 V、響應(yīng)時(shí)間為2 ms,具有安裝簡單、使用壽命長等優(yōu)點(diǎn),由于輸出電壓為0或5 V,為了避免燒壞FPGA芯片引腳,使用電阻R1、R2建立了分壓電路。STM32的引腳連接三極管,通過三極管的通斷控制繼電器觸點(diǎn)的的吸合,繼電器連接電機(jī),電機(jī)軸上裝配擋桿,模塊得到剔除指令后,通過關(guān)聯(lián)機(jī)構(gòu)使擋桿旋轉(zhuǎn)1周,將當(dāng)前擋桿位置正下方的目標(biāo)剔除。JQC-3FF-005-S-Z為12 V繼電器,最大負(fù)載為10 A/277 V AC,動作時(shí)間≤10 ms,具有負(fù)載功率大、體積小、壽命長等優(yōu)點(diǎn)。
圖6 控制及其他模塊電路
利用算法把儀表顯示的數(shù)據(jù)與標(biāo)準(zhǔn)源輸出進(jìn)行對比,判定儀表是否合格,因此需要識別出儀表顯示的所有關(guān)鍵字符,因字符顯示的大小、形狀不同,使用傳統(tǒng)識別方法準(zhǔn)確率低、魯棒性差,本文設(shè)計(jì)了基于YOLO的儀表讀數(shù)識別算法。YOLO目標(biāo)檢測算法將物體檢測作為回歸問題求解[10]?;谝粋€(gè)單獨(dú)的end-to-end網(wǎng)絡(luò),完成從原始圖像的輸入到物體位置和類別的輸出。YOLO檢測網(wǎng)絡(luò)包括24個(gè)卷積層和2個(gè)全連接層,如圖7所示。其中,卷積層用來提取圖像特征,全連接層用來預(yù)測圖像位置和類別概率值,YOLO將輸入圖像分成S×S個(gè)格子,每個(gè)格子負(fù)責(zé)檢測‘落入’該格子的物體。若某個(gè)物體的中心位置的坐標(biāo)落入到某個(gè)格子,那么這個(gè)格子就負(fù)責(zé)檢測出這個(gè)物體[11]。
圖7 YOLO網(wǎng)絡(luò)框架
數(shù)字萬用表讀數(shù)圖像全部在某工廠收集得到,對采集的圖像進(jìn)行旋轉(zhuǎn)處理完成數(shù)據(jù)擴(kuò)充,最終得到3 244張讀數(shù)圖像,為了將圖像中的斷點(diǎn)字符、數(shù)字、小數(shù)點(diǎn)和單位字符與標(biāo)簽對應(yīng),將圖像中目標(biāo)分為15類。訓(xùn)練集為2 920張,測試集為324張。對數(shù)據(jù)集進(jìn)行了訓(xùn)練和測試,圖8為部分測試結(jié)果??梢钥吹綌帱c(diǎn)字符、數(shù)字、小數(shù)點(diǎn)和單位字符均被識別出來。
(a) (b)圖8 實(shí)驗(yàn)結(jié)果
圖9為網(wǎng)絡(luò)的mAP圖像,網(wǎng)絡(luò)的mAP為99.60%,同時(shí)速度為25 FPS。說明得到了一個(gè)高精度、快速的萬用表讀數(shù)識別網(wǎng)絡(luò)。
圖9 網(wǎng)絡(luò)mAP圖
系統(tǒng)軟件主要由控制模塊和圖像處理模塊2部分組成。
控制模塊軟件的主要功能:控制模塊通過接收和輸出的信號進(jìn)行邏輯計(jì)算從而協(xié)調(diào)其他模塊正常運(yùn)行,實(shí)現(xiàn)系統(tǒng)預(yù)定功能。其流程圖如圖10所示。
圖10 過程控制模塊流程
系統(tǒng)上電初始化后,STM32的12位ADC周期性檢測光電傳感器是否返回模擬電壓信號,然后通過串口發(fā)送拍照指令至FPGA,F(xiàn)PGA通過I2C接口驅(qū)動攝像頭拍照并得到RGB格式的圖像數(shù)據(jù),圖像在FPGA內(nèi)進(jìn)行處理,將處理結(jié)果返回至STM32,STM32根據(jù)處理結(jié)果通過運(yùn)算得到圖像中儀表讀數(shù)的實(shí)際值,然后對實(shí)際值進(jìn)行處理,判斷儀表是否合格,若不合格,則發(fā)出剔除命令去除不合格儀表。
圖11為圖像處理模塊的程序流程圖。FPGA上電后通過外部FLASH加載YOLO網(wǎng)絡(luò)各項(xiàng)參數(shù),從攝像頭獲取圖像數(shù)據(jù)后,在FPGA內(nèi)部對其進(jìn)行硬件加速處理,將讀數(shù)的類別和位置數(shù)據(jù)打包輸出至STM32,STM32將數(shù)據(jù)包解碼后根據(jù)讀數(shù)的位置距離圖像左上角的距離,將讀數(shù)位置按順序排列為一個(gè)字符串,遍歷字符串中是否有字符‘e’,若存在,則輸出儀表不合格,若不存在,則將字符串與標(biāo)準(zhǔn)源讀數(shù)值進(jìn)行對比判斷,若二者的值相同,則輸出儀表合格,否則,輸出儀表不合格。
圖11 圖像處理模塊流程
對系統(tǒng)檢測的正確率和耗時(shí)進(jìn)行了線上測試。將試驗(yàn)樣本分為3類,并對每類樣本進(jìn)行編號,樣本類別對應(yīng)的名稱和數(shù)量如表1所示。
表1 樣本名稱、編號和數(shù)量關(guān)系
對分類完成的樣本進(jìn)行線上測試,得到如表2所示的結(jié)果。
表2 線上測試結(jié)果
檢測正確率最高的為編號3的99.10%,最低的為編號1的97.14%,耗時(shí)最長為編號1的1.567 s,耗時(shí)最短的為編號3的0.568 s,平均正確率和平均耗時(shí)分別為98.23%和1.233 s。說明設(shè)計(jì)的系統(tǒng)在儀表出廠檢測效果的正確率和速度上具有實(shí)用意義,能夠?yàn)楣I(yè)儀表出廠檢測方案設(shè)計(jì)提供借鑒。
本文研發(fā)了基于STM32的儀表出廠檢測系統(tǒng),將數(shù)字圖像處理技術(shù)與嵌入式技術(shù)相結(jié)合,利用FPGA并行高速的特點(diǎn),減少圖像處理的時(shí)間。通過實(shí)驗(yàn)測試證明了系統(tǒng)的可行性。系統(tǒng)具有體積較小、成本較低、操作簡單等優(yōu)勢。