朱德意,孫晴藝,董思凡,麻勝恒,王耀雄,高 放*
(1.廣西大學 電氣工程學院,廣西 南寧 530004;2.廣西中科阿爾法科技有限公司,廣西 南寧 530201;3.中國科學院合肥智能機械研究所,安徽 合肥 230031)
運動目標檢測與跟蹤是計算機視覺領域的一個研究熱點,其核心主要包括目標檢測、提取及跟蹤三個部分。工業(yè)生產(chǎn)流水線上芯片IMEI[1]碼的檢測與識別是一個典型的運動目標檢測與跟蹤問題。識別并寫入IMEI碼是芯片制造流水線上的重要一環(huán),傳統(tǒng)的依靠人工記錄IMEI碼的方式枯燥乏味且效率低下,因此有必要開發(fā)智能算法自動識別流水線上芯片的IMEI碼。
目前還沒有關于芯片IMEI碼檢測與識別的相關研究,但是關于檢測其他字符的研究有很多。通常識別字符主要有深度學習和圖像處理兩種方式。胡逸龍等[2]通過改進的YOLO算法檢測中文車牌位置,再通過改進的CRNN算法識別車牌;張瑞紅等[3]基于HOG特征的級聯(lián)檢測器結合多角度檢測方法實現(xiàn)對奶牛標牌定位,通過神經(jīng)網(wǎng)絡訓練字符實現(xiàn)對奶牛標牌識別;李榮遠等[4]通過KNN對電子秤數(shù)碼管字符進行識別。國外也有相關的字符識別研究。L. T. Akin Sherly等[5]利用HOG和LIFT提取場景字符信息特征,利用貝葉斯交互搜索算法(BISA)對基于AdaBoost的卷積神經(jīng)網(wǎng)絡(BISA和AdaBoost-CNN)進行場景字符識別;Faisel Mushtaq等[6]提出了一種用于識別手寫烏爾都語字符與數(shù)字的算法,通過大量的訓練,在識別的兩萬多的手寫字符中,準確率近99%。這類通過深度學習對字符進行識別的方法識別結果的準確率高但是需要大量的時間和大量的訓練樣本,且需要用圖像處理的方法對訓練樣本和待識別的樣本圖像進行預處理。
通過圖像處理來識別字符的研究也很多。楊新年等[7]通過高斯去噪和灰度化等方式處理車牌,通過垂直和水平投影結合割車牌字符成功識別車牌;Ravi Kiran Varma P等[8]通過高斯濾波、形態(tài)學處理等處理印度車牌,同時通過邊界跟蹤分割字符輪廓,并根據(jù)字符尺寸、空間定位處理感興趣區(qū),識別了印度車牌;Minhuz Uddin Ahmed Abu Jar等[9]也用類似方法對孟加拉的山地車車牌進行識別。常江等[10]使用全局閾值分割方法對塑料袋上的印刷字符進行分割,其對大字符的識別效果較為準確,但對小字符的識別提取有待提高;楊蕊等[11]在Web端插入OpenCV.js開源圖形數(shù)據(jù)庫對發(fā)票圖像進行灰度二值化、降噪、矯正以及分割等圖片在線預處理操作,引入Tesseract.js字符庫用于訓練和識別操作,從而將發(fā)票信息電子化;牛智星等[12]對水尺圖像進行處理,通過識別水尺上的字符實現(xiàn)水位監(jiān)控。通過圖像處理對字符進行識別的方法處理時間短、速度快,但是識別的準確率偏低。
針對芯片字符識別,該文提出一種基于OpenCV[13-14]的芯片IMEI碼的檢測與識別的方法。該方法流程簡潔,對視頻進行簡單的處理后,利用Tesseract-OCR實現(xiàn)對芯片IMEI識別。識別之后的芯片IMEI碼出現(xiàn)在編譯框內,也可以將其保存在文本文件之中。
該文識別芯片IMEI碼,最主要的是識別并提取芯片的IMEI碼區(qū)域。只有提取了區(qū)域才能夠合成包含芯片IMEI碼的視頻。
由于識別視頻背景復雜且一直處于移動狀態(tài),常規(guī)的目標提取算法如幀間差分法和背景分離法需要保持背景不變,而本視頻的背景(如黑色底架、芯片等)一直處于移動狀態(tài),所以不能夠有效地提取芯片IMEI碼,而光流法對每個點都進行標記,通過計算對點前后的比較可以得到移動的部分,但是該視頻移動部分遠大于靜止部分且光流法對計算能力要求過高,難以應用到實際的芯片IMEI碼識別。因此后續(xù)的對比實驗采用CRNN神經(jīng)網(wǎng)絡進行芯片IMEI碼識別。
該文使用的方法不同于主流的算法。主流的算法是將運動目標與背景分離,從而達到提取運動目標的目的。而該文的想法是提取運動目標區(qū)域與原視頻合成,從而獲得運動目標。識別芯片IMEI碼的大致流程分為三步,具體步驟如圖1所示:①圖像預處理部分;②篩選芯片IMEI碼部分;③芯片IMEI碼識別部分。先對視頻進行預處理,得到只含有芯片IMEI碼的區(qū)域的視頻,再將該視頻與原視頻合成,得到一個新的包含少量干擾的芯片IMEI碼的視頻。之后將新的視頻灰度化、二值化后,使用Tesseract-OCR識別芯片IMEI碼。Tesseract-OCR處理所得到的字符,即芯片IMEI碼,提取芯片IMEI碼的特征信息,根據(jù)特征信息與語言包中的字符進行比較,將最符合特征信息的字符作為識別結果。
圖1 芯片IMEI碼識別流程
本次識別的視頻為實際流水線上生產(chǎn)芯片的視頻,時長39秒,視頻中物體包括三塊芯片,黑色底架及桌子。為了識別芯片的IMEI碼,需要對視頻進行預處理,其主要作用是提取芯片IMEI碼區(qū)域。具體見圖1中的圖像預處理部分。首先讀取視頻并將其灰度化,然后對視頻進行邊緣檢測,視頻中的邊緣包括:芯片輪廓、黑色底架、桌面、芯片IMEI碼及各種印在芯片上的字符。邊緣檢測之后進行形態(tài)學處理,便于提取芯片IMEI碼的輪廓。
該文處理的視頻共有39秒,其中包含三塊芯片(并不是同時出現(xiàn)的芯片),芯片裝載在的流水線的黑色底架上,每兩塊芯片之間存在間隔。由于拍攝場景光線變化問題,圖像中會存在一定的噪聲干擾。芯片如圖2(a)所示,黑色底架如圖2(b)所示。
圖2 灰度圖
讀取視頻之后,將視頻灰度化。把圖像中白色與黑色之間按對數(shù)關系分為若干等級,稱為灰度?;叶确譃?56階?;叶绒D換通常有四種方法,取平均法、取分量法、取最大值法、取加權平均法[15]?,F(xiàn)分別介紹如下:
取平均值法是將RGB的值相加除以三取平均值,公式如下:
(1)
取分量法即取RGB中其中的一種顏色的強度值作為其灰度值,公式如下:
(2)
取最大值法即取RGB三種顏色中強度值最大的作為其灰度值,公式如下:
g(x,y)=max[R(x,y),G(x,y),B(x,y)]
(3)
取權平均值法即取RGB三種顏色中強度值的加權平均值作為其灰度值,公式如下:
g(x,y)=0.30R(x,y)+0.59G(x,y)+
0.11B(x,y)
(4)
上述四種方法都可實現(xiàn)圖像灰度化,具體使用那種需根據(jù)具體情況而定。因為OpenCV函數(shù)默認為第四種方法,為了使程序簡潔,所以使用了第四種方法。
圖像轉化為灰度圖后,可通過框選輪廓和邊緣檢測進行輪廓提取??蜻x輪廓采用編碼的思想,給不同的邊界賦予不同的整數(shù)值,從而可以確定邊界類型及層次關系。輸入的二值圖像的像素值用f(i,j)表示。每次行掃描遇到以下兩種情況終止:
(1)外邊界的開始點,滿足f(i,j-1)=0,f(i,j)=1;
(2)孔邊界的開始點,滿足f(i,j)≥1,f(i,j+1)=0。
終止后從起始點開始,標記邊界上像素。記新發(fā)現(xiàn)的邊界為NBD(number of borders,邊界數(shù)),初始時NBD=1,每次發(fā)現(xiàn)一個新邊界其數(shù)值加1。在此過程中,遇到f(i,j)=1;f(i,j+1)=0時,將f(i,j)置為NBD。就是右邊邊界的終止點。
整個芯片制造流水線中存在很多的輪廓,包括①各類字符的輪廓如LOGO、制造商、IMEI碼、型號、名稱、二維碼等;②芯片的輪廓;③黑色底架的輪廓;④噪聲。芯片輪廓如圖3(a)所示,黑色底架輪廓如圖3(b)所示。
圖3 輪廓圖
從輪廓圖可以看出圖像的背景度已經(jīng)消失,但同時出現(xiàn)了各種小斑點、小噪聲。通過圖像膨脹和腐蝕的形態(tài)學處理在剔除小噪聲的同時保持IMEI碼區(qū)域聯(lián)通且獨立,即IMEI碼不會與其他圖形混搭在一起。
圖像膨脹,是將設定的膨脹結構在二值化圖像中逐點掃描,當在某個點時膨脹結構與二值化圖像有一個點重疊就可保留該點,否則刪除該點。圖像膨脹會使圖像目標變大,但邊界會清晰。與輪廓圖相比較,膨脹圖變的整齊了很多,同時小噪聲去除了很多。但整個輪廓膨脹了幾乎一圈,使得整體布局擁擠,不同輪廓之間出現(xiàn)明顯的連接現(xiàn)象,這對提取目標IMEI碼更加是個挑戰(zhàn)。
為了減少這種牽連現(xiàn)象,可將圖片腐蝕。圖像腐蝕是將設定的腐蝕結構在二值化圖像中逐點掃描,當在某個點時腐蝕結構與二值化圖像完全重疊,保留該點,否則刪除該點。圖像腐蝕后,目標會變小,邊界可能會消失。通過腐蝕操作可以消除小噪聲,但會使邊界模糊。由于不少小噪聲本身就是字符的一部分,貿然消除可能會出現(xiàn)問題。因此,將圖像腐蝕,既能消除小噪聲,又能維持字符本身。
經(jīng)過腐蝕的圖片整體相對暗淡,不同輪廓邊界大致分明,且各類字符輪廓依舊完好保存在圖像中。但由于存在各種線條干擾,需要通過多次開操作來消除線條。開操作是形態(tài)學操作中的一種,其原理是將圖像先腐蝕后膨脹。形態(tài)處理后圖像如圖4所示。
圖4 芯片3開操作圖
形態(tài)學操作之后,圖像效果明顯增強,同時噪聲也消除了很多,余留下的噪聲也是呈規(guī)則的矩形,同時芯片的IMEI碼依舊保留在圖像中。因此,圖像預處理基本完成,后續(xù)需要對形狀規(guī)則的矩形噪聲及除芯片IMEI碼之外的區(qū)域進行篩除,只留下芯片的IMEI碼區(qū)域。
芯片IMEI碼區(qū)域并未能夠被提取出來,因此需要將其他干擾排除。為了能夠得到更好的篩選效果,需要對各個輪廓篩選,盡可能多地排除干擾。
由于圖像各區(qū)域形狀基本類似于矩形(也存在不規(guī)則圖形),因此可以以面積作為篩選條件將面積太大、面積太小的部分先排除;同時由于圖像存在一定的不規(guī)則圖像,只是面積篩選無法準確篩選出芯片IMEI碼部分。因此需要進行面積篩選,將周長太短、周長太長的部分進行篩選排除以選到合適圖形(即芯片的IMEI碼)。經(jīng)過多次嘗試,最終面積篩選的條件為:面積最小值為4 700,面積最大值定為5 100;面積加周長的篩選條件為:面積最小值為4 700,面積最大值為5 100,周長最小值為580,周長最大值為640。此條件下芯片的IMEI被全部提取,但是存在部分干擾項,干擾主要是篩選時未能排除掉的干擾,其中主要的干擾分為四類,如圖5所示:①芯片上的制造商字符;②芯片的IMEI碼與制造商字符二者同時存在;③芯片高光背景;④黑色底架的輪廓。
圖5 四種干擾類型
為比較效果,將兩種條件篩選后的每一幀保存并統(tǒng)計只含有芯片IMEI干擾的圖形,結果如表1所示。
表1 兩種篩選結果比較
從表1可知,面積加周長篩選在排除大多干擾的同時只減少了一些芯片IMEI碼的圖像,所以選擇面積加周長篩選作為篩選方式。
在以上處理中,IMEI區(qū)域被成功提取出來,然后將原視頻幀與芯片IMEI碼區(qū)域合成只含有芯片IMEI碼的視頻。從圖6(a)可知有且僅有芯片的IMEI碼被提取出來,因此芯片IMEI碼提取成功。
圖6 芯片處理圖
芯片IMEI碼被提取后,需要將其灰度化并轉為二值化以便于芯片IMEI碼的識別。因為芯片IMEI碼是豎向的,所以需要將芯片IMEI碼旋轉,使其盡可能與水平面平行,為此統(tǒng)一向右旋轉90°。芯片旋轉處理后的圖形如圖6(b)所示。
在OpenCV中并不存在已經(jīng)訓練好的OCR(opti-cal character recognition),光學字符識別。若想識別芯片的IMEI碼,要么自己訓練并使用OCR對字符識別;要么運用現(xiàn)有的OCR軟件對字符進行識別。該文使用后一種方法。OpenCV是一款開源軟件,它可以運用很多的開源OCR軟件,如:Tesseract-OCR、百度paddle、easy-ocr等。該文使用了比較成熟的Tesseract-OCR。
三個芯片IMEI碼分別是 : 866431040005356、866431040005720和866431040005316。
識別的圖像為3.2節(jié)所旋轉后的圖像,即圖6(b)。視頻需通過自適應閾值分割。自適應閾值分割能夠根據(jù)圖像不同區(qū)域亮度分布,計算其局部閾值,所以對于圖像不同區(qū)域,能夠自適應計算不同的閾值,可以盡量多地提取到視頻特征信息。但是自適應閾值分割并不能保證每一幀圖像都十分清晰,只能使整體清晰。所以有一些圖像上的字符并不能完全識別,識別的過程中會出現(xiàn)一些亂碼。因為對視頻的每一幀都會進行識別,所以挑選部分具有代表性(多次識別為同一個結果)的識別進行分析。三塊芯片識別結果如表2典型識別所示。
表2 芯片識別結果
由于空間有限,便只選部分具有代表性的結果進行展示。從前面的圖像預處理的過程中可以清晰地看到芯片的IMEI碼,芯片1的IMEI碼為:866431040005356,芯片2的IMEI碼為:866431040005720,芯片3的IMEI碼為:866431040005316。從表2中可以看出,在芯片IMEI碼的識別過程中,盡管部分識別結果的準確率不高,但是數(shù)字部分完全識別成功。準確率不高的原因是字母部分識別不是很準確??赡苁菆D像預處理時沒有處理好,導致字母部分出現(xiàn)了一些殘缺。
作為對比,利用CRNN神經(jīng)網(wǎng)絡來識別字符[16]。CRNN可以進行端到端訓練,并且可以識別較長的文本。首先用生成器函數(shù)構造了一個由不同字母、數(shù)字和冒號組成的數(shù)據(jù)集(如圖7(a)所示)來模擬IMEI碼的序列,該數(shù)據(jù)集有12 800張圖片,圖片尺寸為512×32,按照8∶1∶1比例隨機分成訓練集、驗證集、測試集。在TITAN V顯卡上訓練了200個epoch,學習率為1e-2,在生成數(shù)據(jù)集中識別精度為95.7%。在之前預訓練模型的基礎上,將學習率設置成1e-3,用圖7(b)所示的IMEI碼的小樣本數(shù)據(jù)集(包含15張IMEI碼的圖片)進行遷移學習。識別結果如表2中CRNN識別結果所示。
圖7 CRNN神經(jīng)網(wǎng)絡用到的數(shù)據(jù)集
使用CRNN網(wǎng)絡識別的芯片IMEI碼,準確率并不高,不僅在字母部分識別不全,甚至在數(shù)字部分也識別有誤。與該文的方法相比較,使用CRNN網(wǎng)絡識別芯片IMEI碼,會出現(xiàn)多種問題。如:①識別不全,部分字母及冒號未被識別;②識別有誤,數(shù)字及字母均出現(xiàn)識別錯誤的現(xiàn)象,甚至字母被識別為數(shù)字。所以該文提出來的方法再識別芯片IMEI碼優(yōu)于CRNN網(wǎng)絡。
通過提取芯片IMEI碼區(qū)域,將其與原視頻合成,得到只含有芯片IMEI碼的視頻,變相實現(xiàn)了目標的檢測與跟蹤,在此基礎上通過處理含有芯片的IMEI碼視頻實現(xiàn)了對流水線上的IMEI碼的檢測與識別。由于沒有訓練識別芯片IMEI碼的OCR,識別準確率有待提高,故識別IMEI碼的程序不能直接應用于生產(chǎn),需要進一步優(yōu)化強化。深度學習方法方面結合預訓練和遷移學習測試了CRNN網(wǎng)絡,發(fā)現(xiàn)準確率不如該文提出的方法。今后可以在以下幾個方面進行進一步的工作。
(1)圖像處理的篩選條件。
芯片的IMEI碼與制造商的名稱相似。芯片的IMEI碼與制造商的名稱長度相似,在提取芯片IMEI碼區(qū)域容易錯誤提取到制造商的名稱。由于該文的篩選條件為面積加周長,后續(xù)處理的過程中為避免錯誤提取目標可以選用不同的篩選條件。
(2)芯片字庫的建立。
由于該文沒有訓練芯片IMEI碼對應的字庫,只是使用Tesseract-OCR本身自帶的英文及中文語言包,只是能夠識別,但是由于缺少專業(yè)性,故會出現(xiàn)字母“IMEI”錯誤識別、亂碼及空格等問題。后續(xù)研究為了提高識別芯片IMEI碼的準確率,可以建立專屬于芯片IMEI碼字符的字庫,實現(xiàn)“術業(yè)有專攻”,提高識別。
(3)建立并擴充真實環(huán)境下IMEI碼的數(shù)據(jù)集。
眾所周知,神經(jīng)網(wǎng)絡擁有著強大的計算能力。由于深度學習缺少芯片IMEI碼的數(shù)據(jù)集,訓練所用的圖片和真實環(huán)境下采集的IMEI碼圖片差距過大,而遷移學習用的真實IMEI碼數(shù)據(jù)集中只含有15張IMEI碼圖片,導致神經(jīng)網(wǎng)絡識別IMEI碼的結果較差。以后可以通過建立并擴充IMEI碼在真實環(huán)境下的數(shù)據(jù)集來提高深度學習方法在識別IMEI碼上的精確度。