楊廣 韓震宇 王云萍 沈臻
摘 要:針對半導(dǎo)體芯片加工生產(chǎn)線,設(shè)計出一種基于KNN算法的OCR識別系統(tǒng),滿足了企業(yè)自動處理芯片加工批號信息的需求。本文主要介紹了系統(tǒng)通過相機外觸發(fā)的方式獲取原始圖像,并進行圖像中字符的識別,硬件部分由典型的機器視覺系統(tǒng)構(gòu)成,主要包括工業(yè)相機、鏡頭、光源、傳感器等。軟件部分主要闡述了圖像預(yù)處理模塊與字符識別模塊的實現(xiàn),在進行字符識別前,圖像預(yù)處理模塊可以為字符識別提供良好的圖像數(shù)據(jù)來源。經(jīng)過現(xiàn)場實驗表明,系統(tǒng)具有較高的可靠性與穩(wěn)定性。
關(guān)鍵詞:OCR系統(tǒng);圖像預(yù)處理;KNN算法
DOI:10.16640/j.cnki.37-1222/t.2019.15.146
1 前言
1.1 背景
OCR是指采用光學的方式,將紙質(zhì)或圖片文檔中的文字轉(zhuǎn)換成為黑白點陣的圖像文件,并通過識別軟件將圖像中的文字轉(zhuǎn)換成文本格式,供文字處理軟件進一步編輯加工的技術(shù)[1],也就是將圖像上的文字轉(zhuǎn)化為計算機可編輯的文字內(nèi)容。評價一個OCR系統(tǒng)的性能優(yōu)劣的指標主要包括,識別準確率,識別速度,用戶界面的友好性,識別的穩(wěn)定性,易用性等,其中,識別的準確率是OCR系統(tǒng)最重要的指標。到20世紀90年代以后,隨著我國信息自動化和辦公自動化的普及,大大推動了OCR技術(shù)的進一步發(fā)展,隨著對OCR技術(shù)的研究更為深入,OCR的識別率,識別速度等都已經(jīng)逐漸可以滿足廣大用戶的需求。
1.2 設(shè)計需求
針對某實際半導(dǎo)體的生產(chǎn)線,設(shè)計一套識別芯片料盒的OCR系統(tǒng)。整個生產(chǎn)線分為上料和下料兩個工位,芯片料盒上標注著此次需要加工的芯片批號的索碼號,在上料工位上,原有的方式是通過人工記錄芯片料盒上的編號,并通過這個編號來找到芯片的批號,將批號上傳至控制中心,告知當前正在加工的芯片批號。在下料工位人工再次上傳芯片的批號,告知當前批號芯片加工完成。這種人工記錄的方式無法滿足企業(yè)的自動化要求,并且在人工記錄,查詢芯片批號,以及上傳產(chǎn)品批號的過程中均容易出現(xiàn)錯誤,這樣給企業(yè)的管理帶來了一定的不便,嚴重影響生產(chǎn)的效率。
根據(jù)企業(yè)的需求,將人工記錄改為計算機自動化處理,在上料工位通過OCR系統(tǒng)對索碼號的自動識別,獲取到索碼號信息,并傳遞給企業(yè)內(nèi)部數(shù)據(jù)庫,通過企業(yè)提供的接口,自動獲取到芯片批號,并通知終端控制室此芯片批號正在加工。在下料工位上,再次對芯片料盒進行一次識別,再次獲取到索碼號信息后,傳遞到數(shù)據(jù)庫中,此時會將索碼號與芯片批號解除綁定,表示這批芯片加工完成。
2 系統(tǒng)設(shè)計
2.1 系統(tǒng)的硬件設(shè)計
本系統(tǒng)的硬件部分包括工業(yè)相機,鏡頭,光源,光電傳感器。通過相機對芯片料盒的字符拍照,經(jīng)過字符識別算法處理,最終獲得芯片的索碼號。系統(tǒng)采用GigE接口的工業(yè)相機,LED的光源。芯片料盒用機械手放在生產(chǎn)線上,在機械手放置料盒的固定位置加裝一個光電傳感器,以此來觸發(fā)相機進行拍照獲取到圖像,并最終通過軟件識別出索碼號信息。
2.2 系統(tǒng)軟件的整體設(shè)計
整個軟件系統(tǒng)運行在芯片加工的生產(chǎn)線上,需要與企業(yè)內(nèi)部以及現(xiàn)場硬件(主要包括相機,傳感器)進行交互,最終通過字符識別后,完成系統(tǒng)的功能,實現(xiàn)系統(tǒng)整體的協(xié)調(diào)運行。
系統(tǒng)的主要功能就是通過相機對芯片料盒進行拍照,通過軟件處理之后,獲得芯片生產(chǎn)批號的索碼號,并傳遞給企業(yè)內(nèi)部的數(shù)據(jù)庫。整個系統(tǒng)主要的開發(fā)平臺為vs2010+openCV庫,系統(tǒng)的流程圖如圖1所示:
2.3 系統(tǒng)中重要模塊的實現(xiàn)
系統(tǒng)的重要模塊包括圖像預(yù)處理模塊和字符識別模塊。
在軟件部分的處理中,原始輸入數(shù)據(jù)為通過工業(yè)相機拍到的圖片,由于系統(tǒng)的運行環(huán)境是在生產(chǎn)現(xiàn)場,所以對于獲得的圖片會有各種各樣的噪聲影響,所以在進行正式地識別之前,必須要進行圖像的預(yù)處理,以消除在識別前的噪聲干擾,提高識別的準確率以及系統(tǒng)的穩(wěn)定性。系統(tǒng)的最核心部分就是字符識別的算法,這是成功獲得芯片批號的前提,所以對于料盒索碼號的準確識別是關(guān)鍵。接下來將對這兩個模塊分別進行介紹。
2.3.1 圖像預(yù)處理模塊設(shè)計
在圖像處理中,圖像的質(zhì)量直接影響后續(xù)圖像的分析,它的主要目的就是消除圖像中無關(guān)的信息,恢復(fù)其有用的真實信息,增強有關(guān)信息的可檢測性,在最大程度上簡化數(shù)據(jù),從而提高特征提取,匹配以及識別的可靠性。工業(yè)現(xiàn)場的光線變化、噪聲等干擾會給字符識別造成較大的影響。為了有效地保證字符的識別率、識別系統(tǒng)的可靠性和穩(wěn)定性,字符識別的預(yù)處理部分就顯得至關(guān)重要[2]。
系統(tǒng)的原輸入圖像見圖2。
在圖像預(yù)處理中,首先需要在相機拍到的圖片中提取出字符所在的區(qū)域,即是進行圖像處理的ROI區(qū)域的選取,同時我們?yōu)榱藴p少圖像處理的數(shù)據(jù)量,對ROI區(qū)域圖像進行灰度化。得到灰度圖像之后,為了方便對字符特征的提取,需要將區(qū)域內(nèi)的字符圖像統(tǒng)一到相等的大小,即進行圖像的歸一化操作。此時得到的圖像如圖3所示:
平滑處理是一種簡單且使用頻率很高的圖像處理方法,消除圖像中的噪聲成分叫作圖像的平滑化或濾波操作。均值濾波,是最簡單的一種濾波操作,輸出圖像的每一個像素是核窗口內(nèi)輸入圖像對應(yīng)像素的平均值[3]。圖像經(jīng)過均值濾波后的圖像如圖4所示:
圖像的閾值操作是最簡單的圖像分割,對圖像進行二值化后,可以進一步降低數(shù)據(jù)的計算量,增加識別的效率。通過調(diào)用openCV里閾值操作函數(shù)對其進行二值化,由于圖像受到光照強度,陰影等因素的影響,其中二值化的閾值參數(shù)的確定需要通過現(xiàn)場試驗獲得,二值化后的圖像如圖5所示:
通過均值濾波之后的二值圖像,還存在著一定的離散的干擾點,為了準確地識別出字符,需要先去除這些孤立干擾點的影響。
在形態(tài)學操作中,腐蝕可以將圖像中面積較小的區(qū)域消除,而膨脹可以連接間距較小的區(qū)域,在膨脹和腐蝕后,目標區(qū)域的面積變化比較大。為了讓目標區(qū)域的面積變化較小,定義了開運算和閉運算。開運算是用形態(tài)學運算的內(nèi)核對圖像進行腐蝕后,再用相同的內(nèi)核對圖像進行膨脹。閉運算是用形態(tài)學運算的內(nèi)核對圖像進行膨脹后,再用相同的內(nèi)核對圖像進行腐蝕。開運算的作用與腐蝕的作用類似,閉運算的作用與膨脹類似。
運用開運算對干擾點區(qū)域進行處理的效果圖如圖6所示,從圖中可以看出,運用開運算可以較好地去除孤立的干擾點。
綜上,圖像預(yù)處理步驟如下:(1)提取ROI區(qū)域;(2)灰度化,歸一化;(3)均值濾波;(4)二值化;(5)開運算。
2.3.2 KNN算法
KNN算法,即KNN近鄰分類法,是一種基本的分類和回歸方法。這個算法通過先存儲訓練樣本,然后通過分析新輸入的樣本周圍K最近鄰從而給出該樣本所屬的類別,所以這種算法就是基于樣本的學習算法。核心思路就是,輸入一個樣本,從訓練樣本中找出K個與其最相近的樣本,然后計算這些樣本中相應(yīng)類別的數(shù)量,數(shù)量最多的類別就定為該樣本的類別。
K近鄰分類法的具體實現(xiàn)過程如下:(1)計算已知類別數(shù)據(jù)集中每個樣本與當前輸入樣本的距離。(2)統(tǒng)計與當前輸入樣本距離最近的K個點。(3)統(tǒng)計這K個點中每個樣本出現(xiàn)的頻率。(4)選取出現(xiàn)頻率最高的樣本類別返回作為當前輸入樣本的類別。
2.3.3 字符識別關(guān)鍵模塊設(shè)計
在字符的識別過程中,先輸入在圖像預(yù)處理階段已經(jīng)生成的圖像,然后利用openCV中提供的findContours函數(shù)尋找出整張圖的輪廓數(shù)據(jù),由于還可能存在圖像非識別區(qū)域輪廓的干擾,所以應(yīng)該對其孤立干擾區(qū)域輪廓進行去除,經(jīng)過分析可以得到,要識別的字符所具有的輪廓相對于孤立干擾區(qū)域的輪廓面積大很多,所以可以設(shè)置出一個輪廓面積臨界值來濾除掉干擾區(qū)域。
由于在實際地識別中,并不是對單個字符的識別,而是一行字符的識別,所以在識別之前,要先對一行字符進行相應(yīng)的分割,變成一個一個字符,然后再對一個一個字符進行識別。對字符的單個分割可以采用對輪廓的外接矩形來實現(xiàn)。用輪廓的外接矩形來將字符分割開,并對其進行分別識別。
對于KNN算法的實現(xiàn)主要借助openCV提供的Knearest類,先輸入訓練樣本進行學習,分別生成相應(yīng)的訓練樣本數(shù)據(jù)文件與標簽數(shù)據(jù)文件,通過train函數(shù)將訓練樣本數(shù)據(jù)與標簽數(shù)據(jù)建立對應(yīng)關(guān)系,再通過find_nearest函數(shù)輸入需要識別的樣本,通過尋找K近鄰的方法確定當前輸入樣本的類別,即為輸出結(jié)果。識別結(jié)果如圖7所示,其中上料盒信息即為芯片的索碼號。
3 實驗結(jié)果及分析
系統(tǒng)設(shè)計完成后,通過在生產(chǎn)現(xiàn)場搭建好硬件環(huán)境,調(diào)試運行本系統(tǒng)。調(diào)試時,需要先對其需要識別的字符進行樣本的學習,生成相應(yīng)的KNN算法需要的訓練文件,其格式為XML。同時,由于環(huán)境的影響,需要預(yù)先將圖像處理中二值化的閾值作為系統(tǒng)參數(shù)傳入,直接運行系統(tǒng),識別可靠性與穩(wěn)定性很好,對于識別有誤差的字符,需要再次擴大樣本學習的容量,實驗證明,可以準確識別。
4 結(jié)束語
系統(tǒng)基于KNN算法,設(shè)計出了針對工業(yè)現(xiàn)場的OCR系統(tǒng),經(jīng)過現(xiàn)場實驗,系統(tǒng)的識別結(jié)果準確,運行穩(wěn)定,為生產(chǎn)過程中的管理控制,以及自動化提供了可靠的解決方案。
參考文獻:
[1]肖堅.基于學習的OCR字符識別[J].計算機時代,2018,13(07):48-49.
[2]李杜,白瑞林,高保平,溫振市.工業(yè)字符識別中實用的預(yù)處理技術(shù)[J].江南大學學報(自然科學版),2011,10(01):16-17.
[3]毛星云,冷雪飛等.openCV3編程入門[M].北京:電子工業(yè)出版社,2015:154-157.
作者簡介:楊廣(1995-),男,四川達州人,碩士研究生在讀,主要從事測量與控制方向的研究。