卞亮 中國鐵路上海局集團(tuán)有限公司南京站
當(dāng)前鐵路信息化建設(shè)廣泛深入的開展,鐵路客運(yùn)編組統(tǒng)計信息系統(tǒng)、鐵路編組站管理信息系統(tǒng)、貨管系統(tǒng)等各信息系統(tǒng)間的整合及深度開發(fā)正逐步深入的進(jìn)行。作為車輛車號的機(jī)器識別,相對較多的運(yùn)用在貨車車號的自動識別方面,而對客車編組中車號的識別,絕大部分車站還停留在人工現(xiàn)場核對的狀態(tài)。對于利用車體視頻圖像,采用計算機(jī)視覺技術(shù)進(jìn)行客車車號快速識別還未在鐵路現(xiàn)場廣泛運(yùn)用。
目前,旅客列車運(yùn)統(tǒng)1電子化已經(jīng)投入現(xiàn)場使用,客車編組車號的編輯、上傳、接收等環(huán)節(jié)均實(shí)現(xiàn)了信息化,但是在車號自動識別方面,雖然客車安裝了無線射頻(RFID)設(shè)備,但因車站安裝的閱讀器建設(shè)、維護(hù)成本等因素,當(dāng)前只在個別車站投入使用,并未全面推廣運(yùn)用??蛙囓囂柕暮藢θ杂勺鳂I(yè)人員現(xiàn)場核對,不僅增加現(xiàn)場作業(yè)人員的工作量,同時也產(chǎn)生了列車編組信息化的“梗阻”。因此,客車車號快速識別技術(shù)的研究,能夠?qū)崿F(xiàn)車號圖像的計算機(jī)識別,促進(jìn)旅客列車車號全過程信息化建設(shè)。
客車車號識別是運(yùn)用計算機(jī)視覺技術(shù)對始發(fā)旅客列車的編組內(nèi)容(車號圖像)進(jìn)行自動識別。在現(xiàn)有的場景中,在客站站臺端部設(shè)置高清攝像頭,拍攝旅客列車進(jìn)站時的車體視頻,并對視頻進(jìn)行逐幀分析,運(yùn)用計算機(jī)視覺(OpenCV)技術(shù)對讀取到的視頻幀中所包含的數(shù)字圖像(車號信息)進(jìn)行處理,分析計算出旅客列車中每輛客車的車號信息,從而生成旅客列車“客運(yùn)統(tǒng)1”信息。該場景中,因列車的移動,造成圖像幀內(nèi)容變化較快,沒有相對靜態(tài)的視頻影像,并且受到環(huán)境因素(光照、雨雪)的影響較大。
目前的圖像識別技術(shù)主要運(yùn)用在人臉識別、文字識別、圖形識別等方面,識別技術(shù)主要使用haar級聯(lián)分類器、OCR光學(xué)字符識別、卷積神經(jīng)網(wǎng)絡(luò)等技術(shù)。這些技術(shù)成熟度高,原理及算法公開,但前期需要對數(shù)據(jù)進(jìn)行訓(xùn)練,運(yùn)算步驟較繁瑣復(fù)雜,對硬件的要求較高。在當(dāng)前應(yīng)用場景中部署,現(xiàn)有硬件的運(yùn)行時效性不高。
對于動態(tài)視頻的分析,其本身需要程序的高響應(yīng)度,同時還要考慮現(xiàn)場計算機(jī)的配置及網(wǎng)絡(luò)帶寬等外在因素的不利影響。為此,選擇輕量化的計算步驟,較低的數(shù)據(jù)處理量,可以降低計算機(jī)的處理負(fù)擔(dān),加快視頻幀的分析計算效率。遵循這一思路,結(jié)合現(xiàn)有圖像處理的總體步驟,總結(jié)出“預(yù)處理-定位分割-對比識別”的方法,使用“梯度計算-輪廓查找-掩膜對比”的處理步驟,對視頻數(shù)據(jù)進(jìn)行車號識別快速處理。
通過cv2.VideoCapture()從現(xiàn)場視頻源獲取客車車輛圖像,對視頻數(shù)據(jù)按幀處理。原始圖像如圖1所示。
圖1 原圖
為加快圖像數(shù)據(jù)的處理速度,將彩色圖像轉(zhuǎn)換成灰度圖,同時利用cv2.filter2D()對圖像進(jìn)行卷積算法,算出圖像中前景數(shù)字的邊緣,生成二值圖。
(1)視頻采集到的圖像數(shù)據(jù)通常是紅綠藍(lán)彩色三通道圖像,為了簡化運(yùn)算步驟,加快圖像數(shù)據(jù)的處理速度,首先將獲取到的彩色圖像轉(zhuǎn)為灰度圖,使用cv2.cvtColor()函數(shù)將BGR三通道彩色圖轉(zhuǎn)成單通道灰度圖。同時考慮到車體外觀受塵土顆粒、雨水水滴等因素的影響,圖像中會出現(xiàn)隨機(jī)噪音,為去除噪音降低圖像后續(xù)的輪廓計算量,使用cv2.GaussianBlur()函數(shù)對單通道灰度圖進(jìn)行高斯濾波處理,去除圖像中的噪音,高斯核選用(5,5)增強(qiáng)去噪效果。如圖2所示。
圖2 GaussianBlur圖
(2)為快速區(qū)分出圖像中前景數(shù)字位置,對圖像顏色、邊緣輪廓等特征進(jìn)行選擇比較,發(fā)現(xiàn)使用圖像的梯度特征,能有效的辨別出前景圖像。圖像梯度,如果把圖像看成二維離散函數(shù),圖像梯度其實(shí)就是這個二維離散函數(shù)的求導(dǎo)。使用cv2.filter2D()卷積函數(shù)對GaussianBlur圖進(jìn)行卷積計算,求得圖像梯度。對比HPF(High Pass Filter,高通濾波器或梯度濾波器):Sobel算子、Scharr算子及Laplacian算子的運(yùn)算結(jié)果,考慮到視頻圖像在室外環(huán)境下,干擾因素較多的情況,經(jīng)過測試使用kirsch算子對圖像進(jìn)行卷積運(yùn)算,會取得完整的圖像梯度。kirsch算子采用8個模板對圖像上的每一個像素點(diǎn)進(jìn)行卷積求導(dǎo)數(shù),這8個模板代表8個方向,對圖像上的8個特定邊緣方向作出最大響應(yīng)。圖像像素點(diǎn)經(jīng)卷積運(yùn)算后取該點(diǎn)8個方向的最大值,然后對最大值超過255的像素點(diǎn)統(tǒng)一設(shè)置上限值255,對最大值小于50的像素點(diǎn)置0,得到kirsch圖像。如圖3所示。
圖3 kirsch圖
得到kirsch圖像后,為區(qū)別前景數(shù)字和其它影像,先要對kirsch圖進(jìn)行輪廓查找,利用輪廓函數(shù)計算出前景數(shù)字的輪廓位置和大小,從而獨(dú)立的標(biāo)注出各個數(shù)字。然后利用車號數(shù)字呈橫向等距排列的特點(diǎn),計算出各輪廓矩形框擴(kuò)展后,該框中其它輪廓中心點(diǎn)的數(shù)量,從而定位、分割客車車號。
(1)得到kirsch圖像后,只是辨別出了前后景物間的邊緣,對于前景圖像本身,還沒有獨(dú)立的標(biāo)注。為快速區(qū)分出單獨(dú)的前景圖像,加快客車車號識別實(shí)效,使用圖像的輪廓特征來算出kirsch圖中各個獨(dú)立的前景圖像。采用cv2.findContours()函數(shù),其中尋找輪廓的模式為“只檢測外輪廓”(mode:cv2.RETR_EXTERNAL),輪廓的保存方式為“只保留端點(diǎn)”(method:cv2.CHAIN_APPROX_SIMPLE),計算出圖像中前景事物的輪廓,但是其計算的輪廓列表中包含其它前景圖像,如:黃色菱形腰線、車種字母等。為剔除無用的前景圖像,使用sorted()函數(shù)先對前景輪廓列表按照面積大小(key=cv2.contourArea)進(jìn)行排序。通過比對排序后的輪廓發(fā)現(xiàn),客車車號輪廓包含在前30個輪廓數(shù)據(jù)中。為減少計算量,加速圖像處理速度,在sorted()計算結(jié)果中取前30個輪廓數(shù)據(jù)生成車號數(shù)字輪廓列表。
(2)在車號數(shù)字輪廓列表中,6個車號數(shù)字輪廓在列表中不連續(xù),無法使用輪廓面積來定位每個車號數(shù)字。通過對數(shù)字車號輪廓相對位置的分析發(fā)現(xiàn),6個數(shù)字的輪廓橫向排列,同時6個數(shù)字輪廓矩形中心點(diǎn)的Y軸數(shù)值近似相等,且最左側(cè)1位數(shù)字的輪廓矩形框沿X軸正方向擴(kuò)展6倍后,其右側(cè)5個數(shù)字的輪廓矩形中心點(diǎn)均在該框內(nèi),所以可以利用車號數(shù)字呈“橫向等距排列”這一特點(diǎn),定位數(shù)字輪廓及其順序。依次計算車號數(shù)字輪廓列表中的每一個輪廓,將輪廓矩形框在X軸正方向上擴(kuò)展6倍,同時輪廓矩形框在Y軸方向上保持不變,生成“查找框”,再逐一計算車號數(shù)字輪廓列表中輪廓矩形中心點(diǎn)是否在“查找框”中,全部輪廓中心點(diǎn)均計算完畢后,為避免車種字母等其它輪廓矩形造成的誤算,需要利用數(shù)字輪廓矩形的高度(Y軸高度)與6個數(shù)字的整體輪廓矩形寬度(X軸寬度)的比值來剔除誤算的影響。當(dāng)輪廓中心點(diǎn)數(shù)量為6且X軸寬度小于6倍Y軸高度時,說明該“查找框”為最左側(cè)1位數(shù)字的輪廓矩形生成而來。該“查找框”包含6個車號數(shù)字,即“橫向等距特征算法”,從而定位車號的圖像位置。如圖4所示。
圖4 車號定位圖
(3)采用“查找框”定位車號圖像后,比較各數(shù)字輪廓矩形X軸數(shù)值的大?。ㄗ髠?cè)數(shù)值較小,右側(cè)數(shù)值較大)確定數(shù)字的排列順序。同時根據(jù)輪廓矩形的位置信息,從灰度圖中裁出單獨(dú)的數(shù)字圖像,使用cv2.threshold()函數(shù),操作類型為type:cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU,對裁出的單獨(dú)數(shù)字圖像進(jìn)行二值化(白底黑字),并調(diào)整為指定格式大?。?2,144)。此時單獨(dú)數(shù)字圖像無邊框,使用cv2.copyMakeBorder()給單獨(dú)數(shù)字圖像四周增加4個像素白色邊框,其格式大小調(diào)整為(80,152)。再使用cv2.erode()對單獨(dú)數(shù)字圖像進(jìn)行形態(tài)學(xué)腐蝕處理,使黑色字體膨脹。如圖5所示。
圖5 單獨(dú)數(shù)字圖
將標(biāo)準(zhǔn)數(shù)字模板制作成掩膜,然后通過單獨(dú)數(shù)字圖像與標(biāo)準(zhǔn)數(shù)字模板像素進(jìn)行二進(jìn)制“與”操作,判斷單獨(dú)數(shù)字圖像的數(shù)值字符,即“數(shù)字掩膜比對”計算出客車車號。
(1)標(biāo)準(zhǔn)數(shù)字模板的制作。通過對常規(guī)車號圖像的裁剪,制作成指定格式大?。?0,152)的單獨(dú)數(shù)值圖像,同時對圖像使用cv2.threshold()函數(shù)進(jìn)行二值化(黑底白字)處理后,生成標(biāo)準(zhǔn)數(shù)字模板。如圖6所示。
圖6 標(biāo)準(zhǔn)數(shù)字模板
(2)掩膜運(yùn)算。按照數(shù)字輪廓矩形X軸數(shù)值確定的數(shù)字排列順序,從左至右逐個使用單獨(dú)數(shù)字圖像與標(biāo)準(zhǔn)數(shù)字模板進(jìn)行二進(jìn)制“與”操作。使用cv2.bitwise_and()函數(shù)將單獨(dú)數(shù)字圖像和標(biāo)準(zhǔn)數(shù)字“與”運(yùn)算,因標(biāo)準(zhǔn)數(shù)字模板是黑底白字,單獨(dú)數(shù)字圖像是經(jīng)腐蝕處理的白底黑字,數(shù)字圖像中黑色字體經(jīng)過膨脹,數(shù)字圖像和對應(yīng)的標(biāo)準(zhǔn)數(shù)字進(jìn)行像素“與”運(yùn)算后,其“與”運(yùn)算的結(jié)果應(yīng)為全黑,而數(shù)字圖像和其它標(biāo)準(zhǔn)數(shù)字的“與”運(yùn)算會出現(xiàn)白色像素區(qū)域,掩膜運(yùn)算后得到bitwise_and結(jié)果圖像。以單獨(dú)數(shù)字圖像“3”為例,其與標(biāo)準(zhǔn)數(shù)字模板掩膜運(yùn)算后結(jié)果圖像,如圖7所示。
圖7 bitwise_and結(jié)果圖像
(3)分析對比。單獨(dú)數(shù)字圖像與標(biāo)準(zhǔn)數(shù)字模板掩膜運(yùn)算后,因單獨(dú)數(shù)字圖像進(jìn)行腐蝕處理,黑色字體膨脹,其bitwise_and結(jié)果圖像中對應(yīng)的數(shù)字圖像將整體覆蓋,如圖7中標(biāo)準(zhǔn)數(shù)字模板“3”的結(jié)果圖像全黑。在實(shí)際計算過程中,考慮到圖像拍攝角度帶來的單獨(dú)數(shù)字圖像形變及隨機(jī)噪音等不利因素的影響,其全黑圖像的計算結(jié)果中,會出現(xiàn)個別白色像素??梢允褂镁仃嚽蠛秃瘮?shù)np.sum()計算bitwise_and結(jié)果圖像中白色像素的數(shù)量。再通過查找比對bitwise_and結(jié)果圖像中白色像素數(shù)量最少的圖像,確定單獨(dú)數(shù)字圖像對應(yīng)的數(shù)字字符。圖7中“3”的白色像素最少,所以單獨(dú)數(shù)值圖像的字符是“3”。其余車號數(shù)字字符亦通過“數(shù)字掩膜比對”的方法計算得到,從而生成完整的客車車號“351600”。
通過使用計算機(jī)視覺(OpenCV)技術(shù),對客車車體視頻圖像進(jìn)行“預(yù)處理-定位分割-對比識別”,從而計算出前景數(shù)字圖像的數(shù)字字符,得到客車的車號。該算法步驟較為簡捷,能夠較快的對視頻信息進(jìn)行處理,同時對硬件的要求較低??蛙囓囂柨焖僮R別的研究,可以較為便捷的實(shí)現(xiàn)旅客列車“客運(yùn)統(tǒng)1”的全過程信息化,減少現(xiàn)場客車現(xiàn)車核對的工作負(fù)擔(dān),打通當(dāng)前客車車號信息化中的“堵點(diǎn)”。客車車號快速識別的研究給鐵路客車車號作業(yè)信息化的建設(shè)帶來更多的思路和方法。