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