孫凱明,劉彤軍,郝 明,王 剛
(黑龍江省科學院智能制造研究所,黑龍江 哈爾濱 150090)
在智能制造和中國制造2025 的背景下,煉鋼企業(yè)紛紛利用機器視覺技術、工業(yè)互聯(lián)網(wǎng)技術和信息處理技術等來提高其智能制造水平[1]。但由于煉鋼廠車間環(huán)境復雜,鋼包號的識別難度大,制約了煉鋼工藝中的智能化水平。
OCR 識別流程中最關鍵的三個步驟為字符定位、字符分割和字符識別[2-4]。
文獻[5]中采用了在原來鋼包上加裝藍底白字后,再借鑒車牌識別相關技術的基礎上設計了基于HSV顏色空間的鋼包號定位方法;文獻[6]將字符融合特征和SVM 相結(jié)合的方法分割點陣字符;文獻[7]采用卷積神經(jīng)網(wǎng)絡實現(xiàn)了點陣字符的識別。
鋼包通常都帶有凹陷字符,這些字符在環(huán)境中一般為黑色,而鋼包本身是灰色的,在復雜的環(huán)境中很難定位和識別。本文通過模板匹配和輪廓篩選,實現(xiàn)了一種鋼包凹陷字符分割方法,進而利用Tesseract OCR實現(xiàn)了字符識別。
本文方法主要分4部分:圖像預處理、號碼區(qū)域定位、字符分割、模型訓練及字符識別。這個方法框架如圖1所示。
圖1 本文方法框架
圖1中各部分的功能如下:
(1)圖像預處理:在保持邊緣信息的同時濾除噪聲影響。
(2)號碼區(qū)域定位:通過模板匹配實現(xiàn)鋼包號碼區(qū)域的定位。
(3)字符分割:通過輪廓篩選獲取單個字符圖像。
(4)模型訓練和字符識別:利用tesseract OCR 實現(xiàn)鋼包號0-9十個阿拉伯數(shù)字字符的識別。
雙邊濾波(Bilateral Filter)是非線性濾波中的一種。這是一種結(jié)合圖像的空間鄰近度與像素值相似度的處理辦法。在濾波時,該濾波方法同時考慮空間臨近信息與顏色相似信息,在濾除噪聲、平滑圖像的同時,又做到邊緣保存。OpenCV中的函數(shù)[9]如下:
void bilateralFilter(InputArray src,OutputArray dst,int d,double sigmaColor,double sigmaSpace,int borderType=BORDER_DEFAULT);
第三個參數(shù),int 類型的d,表示在過濾過程中每個像素鄰域的直徑。如果這個值我們設其為非正數(shù),那么OpenCV會從第五個參數(shù)sigmaSpace 來計算出它來。第四個參數(shù),double類型的sigmaColor,顏色空間濾波器的sigma值。這個參數(shù)的值越大,就表明該像素鄰域內(nèi)有更寬廣的顏色會被混合到一起,產(chǎn)生較大的半相等顏色區(qū)域。第五個參數(shù),double 類型的sigmaSpace 坐標空間中濾波器的sigma 值,坐標空間的標注方差。他的數(shù)值越大,意味著越遠的像素會相互影響,從而使更大的區(qū)域足夠相似的顏色獲取相同的顏色。當d>0,d 指定了鄰域大小且與sigmaSpace 無關。否則,d正比于sigmaSpace。
在本方法中,參數(shù)d=10,sigmaColor=20,sigmaSpace=5。
圖2 雙邊濾波結(jié)果
鋼包號是黑色凹陷的,很難從周圍環(huán)境中區(qū)別開。因此,本文方法選擇鋼包上信息豐富的部位為模板,采用模板匹配技術[10-11]先定位鋼包,再根據(jù)鋼包號區(qū)域與模板區(qū)域的位置關系定位到鋼包號碼區(qū)。本文選取的模板如圖3所示。
圖3 定位匹配模板
在OpenCV 中提供了平方差匹配(TM_SQDIFF)、相關性匹配(TM_CCORRD)和相關系數(shù)匹配(TM_CCOEFF)3種基本匹配方法,每個方法還提供了結(jié)果歸一化(TM_SQDIFF_NORMED,TM_CCORR_NORMED,TM_CCOEFF_NORMED),共6 種匹配方法。本文對三種歸一化匹配方法進行了比較,其結(jié)果如表1所示。
表1 模板匹配三種歸一化方法結(jié)果比較
從對比結(jié)果可以看出,數(shù)值越大表示匹配程度越高,相關匹配方法匹配度最高,并且匹配度波動較小,所以本文中選擇相關匹配歸一化方法,即TM_CCORR_NORMED,其公式為:
即模板與圖像間作乘法操作。
基于模板匹配獲取鋼包號碼區(qū)域的過程如表2所示。
表2 獲取號碼區(qū)域過程
基于模板匹配獲取鋼包號碼區(qū)域的結(jié)果如圖4所示。
圖4 基于模板匹配獲取鋼包號碼區(qū)域的結(jié)果
本文首先對號碼區(qū)域利用OTSU方法二值化,然后通過形態(tài)學處理,消除筆畫斷裂和小塊噪聲影響,最后利用輪廓篩選確定單個字符區(qū)域,完成字符分割。字符分割過程如表3所示。
表3 字符分割過程
字符分割結(jié)果如圖5所示。
圖5 字符分割過程及結(jié)果
本文利用谷歌開源Tesseract OCR 引擎[12]對鋼包號識別。對于特定的識別,引擎自帶的字庫的字符識別率不高,需要在其自帶的eng.trainedtata 字庫基礎上追加自己的字符訓練。為此,從實際獲取的鋼包號字符中,對其進行仿射變換、縮放、形態(tài)學處理,曾廣字符的數(shù)據(jù)集[13],以提高Tesseract OCR識別的準確率。表4為一組圖像及其曾廣結(jié)果。
表4 曾廣數(shù)據(jù)集示例
本方法中,字符識別階段通過OpenCV處理分割的圖片作為tesseract OCR 的輸入來進行。首先聲明tesseract::TessBaseAPI 對象并對其初始化,代碼中的MyModel 為自己訓練的字庫名;然后設置識別模式為單詞模式,即tesseract ocr 認為輸入的圖片中只有一個字符;調(diào)用SetImage 設置輸入的圖片wordImg,wordImg是cv::Mat類型,需要按照tesseract OCR 要求類型輸入;最后調(diào)用GetUTF8Text獲取識別結(jié)果。對其實現(xiàn)代碼如下:
tesseract::TessBaseAPI*tess=new tesseract::Tess-BaseAPI();
tess->Init(NULL,"MyModel",tesseract::OEM_DEFAULT);
tess->SetPageSegMode(tesseract::PSM_SINGLE_WORD);
tess->SetImage((uchar*)wordImg.data,wordImg.cols,wordImg.rows,1,wordImg.cols);
char*out=tess->GetUTF8Text();
本設計運行CPU i7,Win10 操作系統(tǒng),以VS2019 為開發(fā)環(huán)境,利用OpenCV4.5機器視覺算法庫和Tesseract OCR 4.0文字識別引擎實現(xiàn)。
如表5所示為鋼包號區(qū)域定位及字符分割結(jié)果。從圖中可以看出,本方法能克服現(xiàn)場光線環(huán)境變化影響,號碼區(qū)域定位穩(wěn)定,字符分割準確。
表5 鋼包號區(qū)域定位及字符分割結(jié)果
本文分別用數(shù)據(jù)曾廣前后的數(shù)據(jù)集訓練了2個字庫,并統(tǒng)計了它們的錯誤率。所得結(jié)果如表6所示。從表6可以看出,采用曾廣數(shù)據(jù)集的方法能極大地提高字符識別的準確率。
本文鋼包號識別方法包括圖像預處理、號碼區(qū)域定位、字符分割、模型訓練及字符識別幾部分組成。比較OpenCV中提供的6種模板匹配方法后選擇相關性匹配,利用模板匹配技術實現(xiàn)鋼包號區(qū)域定位,在定位區(qū)域內(nèi)通過OTSU進行二值化處理,并利用形態(tài)學方法實現(xiàn)號碼字符分割。在字符識別方面,通過數(shù)據(jù)曾廣方法增加訓練數(shù)據(jù)集,提高Tesseract OCR的識別率。從實驗結(jié)果看,本文方法能穩(wěn)定定位鋼包號碼區(qū)域,號碼識別率達98.30%。
表6 鋼包字符識別實驗結(jié)果
本文方法雖然不具通用性,但對提高鋼鐵企業(yè)的生產(chǎn)安全和智能制造水平起到一定的積極作用,對于其他類似場合也具有一定的參考價值。