李榮遠(yuǎn),彭思慧,梁慧瑩,蘇崇星,李 劍
(玉林師范學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院,廣西玉林 537000)
目前,相關(guān)檢測(cè)部門主要通過(guò)兩種方式完成產(chǎn)品質(zhì)量檢測(cè),一是工作人員到現(xiàn)場(chǎng)檢驗(yàn),二是客戶送檢。利用電子秤和砝碼檢測(cè),其流程是根據(jù)產(chǎn)品情況多次放置砝碼重復(fù)實(shí)驗(yàn),人工紙質(zhì)記錄數(shù)據(jù),然后計(jì)算數(shù)據(jù),將最終計(jì)算結(jié)果錄入系統(tǒng),并出具檢驗(yàn)報(bào)告。此過(guò)程記錄數(shù)顯儀器結(jié)果需大量人工統(tǒng)計(jì)、計(jì)算和錄入,時(shí)效性低,且有多種數(shù)顯儀器難以識(shí)別。鑒于此,本文基于電子秤數(shù)碼管,采用機(jī)器視覺識(shí)別技術(shù),設(shè)計(jì)一種電子秤數(shù)碼管字符識(shí)別系統(tǒng)。
電子秤數(shù)碼管主要由7 段發(fā)光LED 組成,每段之間相對(duì)斷開,采用現(xiàn)有庫(kù)較難識(shí)別。并且,數(shù)碼管及小數(shù)點(diǎn)類型多樣,無(wú)統(tǒng)一識(shí)別技術(shù)。目前,文獻(xiàn)[1]對(duì)一種工廠數(shù)碼管加以識(shí)別,其識(shí)別對(duì)象單一,數(shù)碼管中數(shù)字字符與小數(shù)點(diǎn)隔離明顯,較易分割;文獻(xiàn)[2]提出LED 文本檢測(cè)與識(shí)別方法;文獻(xiàn)[3]采用常用穿線法識(shí)別電子數(shù)碼管,識(shí)別準(zhǔn)確率不高,其中小數(shù)點(diǎn)識(shí)別效果較差;文獻(xiàn)[4]—文獻(xiàn)[5]使用開源Tesseract-ocr 識(shí)別技術(shù),該技術(shù)能識(shí)別多種光學(xué)字符,先使用jTessBoxEditor 訓(xùn)練數(shù)據(jù)模型,但將數(shù)碼管圖像導(dǎo)入box 文件編輯時(shí),大部分圖像不能顯示,處理結(jié)果顯示為空頁(yè)面(Empty Page),該模型對(duì)圖像預(yù)處理有較高要求,但數(shù)碼管圖像受預(yù)處理影響較大。Tesseract-ocr 一般對(duì)規(guī)則簡(jiǎn)體中文、阿拉伯?dāng)?shù)字及英文識(shí)別率較高,對(duì)數(shù)碼管識(shí)別效果幾乎不理想。一種新的數(shù)碼管識(shí)別算法(穿線法)識(shí)別對(duì)象相對(duì)單一,識(shí)別不規(guī)則字符時(shí)需予以調(diào)整,識(shí)別效果差[6-8]。文獻(xiàn)[9]采用投影法對(duì)小數(shù)點(diǎn)進(jìn)行識(shí)別,但數(shù)碼管小數(shù)點(diǎn)位置多樣,投影法不適合電子秤數(shù)碼管識(shí)別;文獻(xiàn)[10]提出一種識(shí)別小數(shù)點(diǎn)的思路,效果良好;文獻(xiàn)[11]采用卷積神經(jīng)網(wǎng)絡(luò)識(shí)別數(shù)碼儀表,其中小數(shù)點(diǎn)識(shí)別采用MOSSE 算法,該方法只在小數(shù)點(diǎn)切割開的情況下有效。鑒于此,本文基于機(jī)器視覺技術(shù)設(shè)計(jì)一種電子秤數(shù)碼管字符識(shí)別系統(tǒng),該系統(tǒng)簡(jiǎn)單、實(shí)用,能夠識(shí)別多種電子秤數(shù)碼管,準(zhǔn)確率和效率較高。其中,由于小數(shù)點(diǎn)字符類型多樣,最終通過(guò)采集多類型樣本進(jìn)行訓(xùn)練及參數(shù)調(diào)優(yōu),達(dá)到理想效果。實(shí)驗(yàn)結(jié)果表明,在一定條件下,數(shù)碼管識(shí)別率高達(dá)99% 左右,時(shí)效性較高,平均0.3s 左右,符合實(shí)際需求。
系統(tǒng)整體流程如圖1 所示。首先,客戶端使用攝像頭采集電子秤數(shù)碼管圖像,以Base64 壓縮編碼上傳服務(wù)器端,并對(duì)服務(wù)器端Base64 編碼進(jìn)行解碼;然后,完成圖像預(yù)處理、字符分割、KNN 識(shí)別;最后,將識(shí)別結(jié)果異步返回客戶端,若個(gè)別識(shí)別出錯(cuò),經(jīng)校準(zhǔn)無(wú)誤后提交后臺(tái)MySQL 數(shù)據(jù)庫(kù)存儲(chǔ)計(jì)算,以輔助人工較快出具檢測(cè)報(bào)告。
(1)攝像頭圖像采集。采用兼容多種操作系統(tǒng)免驅(qū)攝像頭作為識(shí)別工具,通過(guò)瀏覽器方式采集不同電子秤數(shù)碼管顯示區(qū)域,可通過(guò)邊緣檢測(cè)方法找到數(shù)碼管區(qū)域,但現(xiàn)實(shí)場(chǎng)景復(fù)雜,干擾因素較多,導(dǎo)致邊緣檢測(cè)失效。為提高系統(tǒng)使用率及識(shí)別率,客戶可以根據(jù)手動(dòng)定位數(shù)碼管區(qū)域,一次定位,多次切割,最終采集到數(shù)碼管區(qū)域。
(2)Base64 編碼上傳服務(wù)器。為提高客戶體驗(yàn)度及上傳速度,將圖片以Base64 編碼格式壓縮,采用鍵值對(duì)方式以Json 格式通過(guò)Ajax 異步上傳到服務(wù)器。
Fig.1 System overall flow圖1 系統(tǒng)整體流程
(3)服務(wù)器Base64 編碼解碼。當(dāng)用戶現(xiàn)場(chǎng)提交經(jīng)Base64 編碼后的圖片,服務(wù)器端對(duì)Json 對(duì)象Base64 編碼進(jìn)行解碼并生成圖片[9-10]。
(4)圖像預(yù)處理。將背景與目標(biāo)區(qū)域分離,去除圖片背景及干擾因素,保留數(shù)碼管目標(biāo)區(qū)域。
(5)目標(biāo)區(qū)域分割。通過(guò)分割技術(shù)將每個(gè)字符進(jìn)行切割,直至達(dá)到目標(biāo)字符。
(6)模型訓(xùn)練。將切割的單個(gè)數(shù)字字符(0-9),共10個(gè)字符分包保存,采用KNN 算法進(jìn)行模型訓(xùn)練,得到最終訓(xùn)練模型。其中,第一次采集需進(jìn)行模型訓(xùn)練,之后直接使用已有訓(xùn)練模型,無(wú)需再次訓(xùn)練。
(7)模型分類。將目標(biāo)切割成單個(gè)字符逐一輸入模型進(jìn)行識(shí)別,通過(guò)列表存儲(chǔ)方式,存儲(chǔ)識(shí)別結(jié)果。
(8)客戶端顯示。將識(shí)別結(jié)果通過(guò)后端異步請(qǐng)求渲染,前端瀏覽器顯示最終結(jié)果。
電子秤數(shù)碼管字符識(shí)別中,圖片預(yù)處理是識(shí)別準(zhǔn)確率的關(guān)鍵。首先對(duì)輸入圖像進(jìn)行預(yù)處理,將顏色轉(zhuǎn)化為灰度,然后對(duì)圖像進(jìn)行分割,提取出矩形區(qū)域。由于電子秤數(shù)碼管之間不連續(xù),需要將字符膨脹連接形成完整單個(gè)字符,逐一切割成單個(gè)字符,最終采用字符識(shí)別技術(shù)識(shí)別出最終結(jié)果。
將客戶端采集的圖片上傳至服務(wù)器相應(yīng)位置,為了節(jié)省服務(wù)器空間,只保留當(dāng)前一段時(shí)間內(nèi)的圖片。為提高識(shí)別率和系統(tǒng)使用率,客戶端采用固定區(qū)域裁剪方式采集圖像,也可采用邊緣檢測(cè)方式得到目標(biāo)區(qū)域,采集圖像如圖2所示。
Fig.2 Original captured image圖2 原始圖像采集
電子秤數(shù)碼管由發(fā)光二極管(LED)燈矩陣組合而成,與一般文本不同,由于其不連續(xù)性、類型多樣,較難識(shí)別[11]。圖像預(yù)處理能精確查找目標(biāo)區(qū)域,不同類型數(shù)碼管處理方式不同,主要有以下方法。
2.2.1 背景區(qū)域判斷
根據(jù)輸入圖像可知,目標(biāo)區(qū)域與背景差別較大,主要分為兩種:一種以黑色為背景,目標(biāo)區(qū)域與背景色差大,主要以紅色、綠色等較顯眼顏色為主;另一種目標(biāo)區(qū)域主要以黑色為主,根據(jù)圖像左上角背景平均色差即可判斷。針對(duì)不同圖像應(yīng)采用不同的處理技術(shù),取圖像左上角三通道(RGB)4 核大小的平均值,采用式(1),根據(jù)top_left_vag 均值臨界值(125)采用不同處理技術(shù)。
2.2.2 圖像過(guò)濾
觀察圖像發(fā)現(xiàn),如果電子數(shù)顯背景為黑色,先凸顯目標(biāo)區(qū)域?qū)笃谧R(shí)別效果更佳。對(duì)背景區(qū)域進(jìn)行過(guò)濾,使目標(biāo)區(qū)域凸顯,使用固定閾值(thresh)過(guò)濾,其中實(shí)驗(yàn)thresh設(shè)置為180,采用式(2)加以實(shí)現(xiàn)。如果小于閾值,將值設(shè)為0,最終背景色變?yōu)楹谏?,目?biāo)區(qū)域凸顯,如圖3 所示。
Fig.3 Threshold filtering圖3 閾值過(guò)濾
2.2.3 圖像空間轉(zhuǎn)換
顏色空間轉(zhuǎn)換可將RGB 三通道向HSV、HIS 等色彩空間轉(zhuǎn)換。本文將圖像轉(zhuǎn)換為灰度圖,原圖像由三通道變?yōu)槎ǖ?,如圖4(a)所示,再經(jīng)閾值變化,將目標(biāo)區(qū)域設(shè)置為白色,如圖4(b)所示。
Fig.4 Space conversion圖4 空間轉(zhuǎn)換
2.2.4 高斯濾波
部分圖片經(jīng)二值化處理后,需通過(guò)高斯濾波消除噪聲,有利于提高識(shí)別率[10],高斯濾波處理效果如圖5 所示。
Fig.5 Gaussian filtering圖5 高斯濾波
2.2.5 自適應(yīng)閾值算法
部分圖像易受光照等因素影響,使用自適應(yīng)閾值算法,采用高斯核函數(shù)得到目標(biāo)區(qū)域,如圖6 所示。
Fig.6 Adaptive threshold filtering圖6 自適應(yīng)閾值過(guò)濾
2.2.6 形態(tài)學(xué)運(yùn)算
開運(yùn)算:先對(duì)圖像進(jìn)行形態(tài)學(xué)腐蝕,再進(jìn)行形態(tài)學(xué)膨脹。
腐蝕:有些目標(biāo)區(qū)域中有部分噪點(diǎn),需進(jìn)行腐蝕操作,去除干擾區(qū)域。
膨脹:由于腐蝕去除噪點(diǎn),目標(biāo)區(qū)域相對(duì)變小,需對(duì)其進(jìn)行膨脹操作,觀察電子秤數(shù)碼管“0”,“1”發(fā)現(xiàn),其中間斷開部分較大,字符呈瘦高狀態(tài),不能采用一般圓形、矩形核,需重新自定義,如式(3)所示。
膨脹結(jié)果如圖7 所示。
Fig.7 Dilate圖7 膨脹
圖像中小數(shù)點(diǎn)字符較難識(shí)別,每種數(shù)碼管小數(shù)點(diǎn)位置顯示不同,一般有以下幾種情況,如圖8 所示。圖8(a)中小數(shù)點(diǎn)連接數(shù)字字符且在右下角;圖8(b)位于數(shù)字字符右下角,與數(shù)字字符下水平位置相同,經(jīng)過(guò)處理后部分小數(shù)點(diǎn)與數(shù)字字符分開,部分與數(shù)字字符連接;圖8(c)位于數(shù)字字符右下角,位置超過(guò)數(shù)字右下水平位置;圖8(d)位于數(shù)字字符右下角靠上幾個(gè)像素處;圖8(e)位置遠(yuǎn)離數(shù)字字符,利用切割技術(shù)可以將其分開。
Fig.8 Number character with decimal point圖8 帶小數(shù)點(diǎn)數(shù)字字符
(1)查找數(shù)字字符。根據(jù)矩形尺寸及寬高比找出潛在數(shù)字字符,如果輪廓較小且寬高比不符合數(shù)字字符特征,則剔除干擾區(qū)域。一般數(shù)碼管數(shù)字字符寬度小于高度,其中數(shù)字字符“1”寬高比及面積變化不同其它數(shù)字字符,需單獨(dú)處理。
(2)確定數(shù)字字符位置。根據(jù)矩形輪廓坐標(biāo)位置,從上到下、從左往右,逐一確定數(shù)字字符所在位置。
(3)查找小數(shù)點(diǎn)字符。如果矩形面積小且寬高比符合預(yù)設(shè)范圍,即查找到小數(shù)點(diǎn)字符。如果所有矩形邊界,沒有小數(shù)點(diǎn)字符,說(shuō)明圖像預(yù)處理過(guò)程中小數(shù)點(diǎn)與字符拼接,如圖9 所示,或者原始圖像已拼接,需作下一步處理。
Fig.9 Contrast of decimal point characters and no decimal point characters圖9 帶小數(shù)點(diǎn)字符與無(wú)小數(shù)點(diǎn)字符對(duì)比
(4)確定小數(shù)點(diǎn)字符位置。如果經(jīng)過(guò)上述步驟沒有找到小數(shù)點(diǎn),需進(jìn)一步查找小數(shù)點(diǎn)字符。根據(jù)圖9 中的小數(shù)點(diǎn)位置發(fā)現(xiàn),字符切割后的輪廓有如下特點(diǎn):①字符寬度明顯比不帶小數(shù)點(diǎn)字符寬;②右下角與不帶小數(shù)點(diǎn)字符對(duì)比,明顯突出部分白色目標(biāo)區(qū)域;③帶小數(shù)點(diǎn)數(shù)字字符右下角上及右中下部分明顯是黑色背景。
根據(jù)上述3 個(gè)特點(diǎn),可以找出帶小數(shù)點(diǎn)數(shù)字字符,從而確定小數(shù)點(diǎn)位置,當(dāng)前數(shù)字字符位置加1 個(gè)像素寬度,跳出查找循環(huán),因整個(gè)字符只有1 個(gè)小數(shù)點(diǎn),找到小數(shù)點(diǎn)即可跳出循環(huán),從而提高系統(tǒng)運(yùn)行效率。
K 最近鄰(K-Nearest Neighbors,KNN)[11]在機(jī)器學(xué)習(xí)領(lǐng)域簡(jiǎn)單高效,在分類算法中應(yīng)用廣泛。本文將經(jīng)過(guò)預(yù)處理二值圖像分割為0-9 共10 個(gè)字符,部分?jǐn)?shù)據(jù)作為訓(xùn)練集,第一次需訓(xùn)練模型,之后直接調(diào)用訓(xùn)練模型進(jìn)行字符識(shí)別。如果出現(xiàn)新的不同類型字符,則重新訓(xùn)練模型,以達(dá)到較好識(shí)別結(jié)果。字符識(shí)別整體流程如圖10 所示。
Fig.10 Character recognition flow圖10 字符識(shí)別流程
硬件平臺(tái):檢測(cè)局各種電子秤、720pUSB 攝像頭、攝像頭支架、筆記本電腦。
軟件平臺(tái):Windows10(Intel i7-8750H、內(nèi)存8GB、64位),PyCharm、Python3.6.4。
架構(gòu):采用CS(Client/Server)架構(gòu)。
瀏覽器端通過(guò)Video 逐幀讀取,以畫布形式展示,畫出目標(biāo)區(qū)域,框定一次,多次使用。
框架及技術(shù):Python-Flask+HTML+css+js(jQuery)+ajax+MySQL。
目前,電子秤主要來(lái)源是檢測(cè)局現(xiàn)有的電子秤及部分客戶現(xiàn)場(chǎng)電子秤,攝像頭兼容各種操作系統(tǒng)。為符合實(shí)際需求,采用CS 架構(gòu)設(shè)計(jì)識(shí)別系統(tǒng)。由于Python 的Django框架過(guò)于承重,缺乏靈活性,采用Python 的輕量級(jí)Flask 框架[12],模板引擎使用Jinja2??赏ㄟ^(guò)安裝第三方庫(kù)進(jìn)行擴(kuò)展,相對(duì)靈活。Flask-SQLAlchemy 操作MySQL 第三方庫(kù),對(duì)大型項(xiàng)目易于擴(kuò)展。jQuery 和Ajax 異步處理,可提高用戶體驗(yàn)度。
圖像識(shí)別結(jié)果如圖11 所示,僅展示現(xiàn)場(chǎng)攝像頭采集部分圖片。在檢測(cè)物體時(shí)將環(huán)境條件,如溫度、光照、攝像頭角度等控制好,圖片識(shí)別率可達(dá)99%,平均耗時(shí)0.3s 左右,符合實(shí)際需求。
Fig.11 Image recognition result圖11 圖像識(shí)別結(jié)果
開啟系統(tǒng)外接攝像頭,拍照并展示最終效果,如圖12所示。只需第一次畫框、拍照,上傳識(shí)別下方異步列表展示結(jié)果,可對(duì)其修改、刪除,數(shù)據(jù)上傳后臺(tái)MySQL 自動(dòng)計(jì)算誤差,從而達(dá)到輔助人工作用,提高檢測(cè)效率。
Fig.12 Image recognition result圖12 圖像識(shí)別結(jié)果
本文以實(shí)際需求出發(fā),針對(duì)檢測(cè)局人工檢測(cè)成本高、時(shí)效差等弊端,結(jié)合數(shù)碼管形式多樣性,提出一種針對(duì)多種電子秤數(shù)碼管及小數(shù)點(diǎn)識(shí)別方法,并將該識(shí)別方法應(yīng)用于系統(tǒng)設(shè)計(jì)與開發(fā)。該系統(tǒng)主要用于識(shí)別大量樣品送檢是否合格,其攝像頭及各精密電子秤相對(duì)固定,具有較大實(shí)際應(yīng)用價(jià)值。同時(shí),系統(tǒng)識(shí)別率較高,只需通過(guò)人工不斷加放樣品,完成大量重復(fù)檢測(cè)即可,能快速輔助人工提高檢測(cè)效率。實(shí)驗(yàn)結(jié)果較好,識(shí)別準(zhǔn)確率高。在研究過(guò)程中也發(fā)現(xiàn)一些不足,若檢測(cè)條件變動(dòng),實(shí)驗(yàn)結(jié)果會(huì)受影響,如攝像頭傾斜較大、光照條件、數(shù)碼管字符未被檢測(cè)到等特殊情況下的檢測(cè)效果如何,需進(jìn)一步研究。