郭曉峰,王耀南,周顯恩,尹阿婷,趙輝平,劉磊
(1. 湖南大學(xué) 電氣與信息工程學(xué)院,湖南 長沙 410082; 2. 機(jī)器人視覺感知與控制技術(shù)國家工程實驗室,湖南長沙 410082)
隨著社會的不斷發(fā)展和科技的不斷進(jìn)步,以中國象棋機(jī)器人為代表的娛樂服務(wù)型機(jī)器人,逐漸成為機(jī)器人研究領(lǐng)域的熱點之一。
中國象棋機(jī)器人研究開始于21世紀(jì)初,2004年上海交通大學(xué)黃立波等[1]利用開放式控制器,成功開發(fā)了國內(nèi)第一臺中國象棋對弈機(jī)器人,同期多種對弈機(jī)器人相繼誕生[2]。早期的中國象棋機(jī)器人棋子的定位與識別采用非視覺方式,如特制不同電阻值[3-4]或光敏電阻[5]的棋子與設(shè)計電子棋盤的方式進(jìn)行棋子的定位與識別,類似地還可采用射頻[6]等方法。這些非視覺的識別法都有:系統(tǒng)需特殊設(shè)計定制,適應(yīng)性不強(qiáng)等缺點。隨著機(jī)器視覺技術(shù)的發(fā)展,棋子的定位與識別也逐漸采用機(jī)器視覺的方法。
在棋子定位問題上:大多依靠棋盤間接定位,例如,許豐磊[7]對棋盤內(nèi)90個小區(qū)域進(jìn)行輪廓跟蹤與提取,進(jìn)而判斷棋子位置;肖克先等[8-9]、杜俊俐等[10-11]通過對棋盤十字交點處進(jìn)行檢測。以上棋子定位方法均依靠棋盤直線檢測或交點檢測,無法做到脫離棋盤定位,且定位精度不高。
在棋子識別問題上:棋子識別實質(zhì)就是字符識別,其研究相對比較成熟,但目前字符識別研究和應(yīng)用最多的領(lǐng)域是汽車車牌的識別[12-13]。與傳統(tǒng)字符識別不同,象棋棋子識別具有旋轉(zhuǎn)任意性,目前針對中國象棋棋子字符的識別研究不多。馮元華[14]和莫妙桃[15]使用文字連通數(shù)、字符年輪統(tǒng)計等特征進(jìn)行字符識別,但其需要預(yù)先對棋子字符進(jìn)行特征統(tǒng)計,步驟繁瑣且正確率基本在83%左右。隨著計算機(jī)硬件和機(jī)器學(xué)習(xí)的發(fā)展,更多人嘗試使用BP神經(jīng)網(wǎng)絡(luò)[16]、深度學(xué)習(xí)[17-18]等進(jìn)行棋子識別。但機(jī)器學(xué)習(xí)或深度學(xué)習(xí)需要的訓(xùn)練樣本大,訓(xùn)練時間長,實時性不強(qiáng),更換棋子后同樣需要重新訓(xùn)練,步驟復(fù)雜繁瑣。
針對上述棋子定位中存在的依靠棋盤定位、定位精度不高等問題,本文提出了一種基于最小外接圓二次定位棋子定位方法,能夠快速高精度實現(xiàn)棋子定位。針對當(dāng)前傳統(tǒng)文字識別方法識別率低,而基于機(jī)器學(xué)習(xí)的字符識別方法,存在訓(xùn)練時間長、實時性不強(qiáng)的問題,本文提出了一種旋轉(zhuǎn)差分識別算法,實現(xiàn)棋子快速精準(zhǔn)識別。
我們自主搭建了象棋機(jī)器人的硬件平臺,其結(jié)構(gòu)示意圖如圖1所示。系統(tǒng)主要由URAM四軸機(jī)械臂及相連的攝像機(jī)、計算機(jī)、象棋棋盤和輔助光源組成,該系統(tǒng)可實現(xiàn)兩個功能:1)開局階段自動擺棋功能;2)人機(jī)對弈功能。該系統(tǒng)有兩個工作區(qū)域:擺棋區(qū)域和棋盤區(qū)域。本文以擺棋區(qū)域內(nèi)棋子的定位與識別進(jìn)行研究。
圖 1 象棋機(jī)器人系統(tǒng)結(jié)構(gòu)示意Fig. 1 Sketch map of chess robot system
本文算法整體流程圖如圖2所示。
圖 2 算法整體流程圖Fig. 2 The whole flow chart of the algorithm
一次定位與預(yù)處理整體流程如圖3所示。
圖 3 一次定位與預(yù)處理流程圖Fig. 3 first positioning and pretreatment flow chart
首先對擺棋區(qū)域進(jìn)行圖像采集,本系統(tǒng)使用普通家用網(wǎng)絡(luò)攝像頭,圖像分辨率為:1 280像素×720像素,測試所用棋子的直徑為15 mm。
1)圓檢測一次粗定位
棋子定位問題就是圓檢測問題。圓檢測算法主要有:最小二乘法[19-20]、多隨機(jī)圓擬合度評估[21]等擬合方法。這類方法圓檢測準(zhǔn)確度高,運(yùn)算量少,但其對噪聲敏感,且不能一次檢測多個圓。還有Hough變換[22]等投票(聚類)方法。這類方法將樣本點映射到參數(shù)空間,用累加器或者類聚的方法來檢測圓。這類方法對噪聲不敏感,且可以一次檢測多個圓,但其計算量大運(yùn)算時間長。
本系統(tǒng)運(yùn)行背景較復(fù)雜,有外界因素影響,因此需要圓檢測具有較強(qiáng)的魯棒性,且需要一次性檢測出多個圓形。系統(tǒng)對于棋子的定位精度和識別準(zhǔn)確度要求很高,但對于運(yùn)行時間要求不高,因此綜合以上考慮,本文使用Hough變換進(jìn)行棋子一次粗定位。
對采集到圖像進(jìn)行Hough變換的粗定位,定位效果圖如圖4所示,并可得到粗定位圓心坐標(biāo)。
圖 4 一次定位圖像Fig. 4 First positioning effect image
2)棋子分割
隨后根據(jù)該定位坐標(biāo)基于區(qū)域的圖像分割將棋子前后景分離和棋子分割。
3)顏色識別
將RGB模型圖片轉(zhuǎn)換為HSV模型,隨后對HSV模型中的各個值進(jìn)行統(tǒng)計,尋找紅、黑顏色的特征。
經(jīng)過實驗后得到:本文所使用棋子,紅色H(H:hue)值范圍為170~180;黑色H值范圍為103~106,利用紅色和黑色顏色的色調(diào)不同取值,就可將紅色和黑色的棋子圖像進(jìn)行識別。
4)字符分割
由棋子圖像的灰度直方圖:由圖5可知,棋子圖像的灰度分布具有很大離散性,即棋子背景灰度值較集中為一種灰度值,黑色或紅色字符集中為另一灰度值,且兩者相差較大。
圖 5 棋子圖片直方圖Fig. 5 The histogram of chess image
因此采用均值閾值分割進(jìn)行二值化處理,首先計算圖像像素灰度均值:T之后根據(jù)均值選定閾值進(jìn)行分割:
式中K為比例系數(shù)。通過實驗確定K取0.75時,字符分割效果較好。
系統(tǒng)工作環(huán)境較為復(fù)雜,干擾多,且所用棋子較小(僅為15 mm),成像分辨率低。因此粗定位效果,部分棋子定位效果較差如圖6所示。需要對棋子進(jìn)行定位修正以確保定位精準(zhǔn)。
圖 6 定位效果Fig. 6 Positioning effect
本文提出的一種基于字符最小外接圓的定位修正方法的流程圖如圖7所示。
圖 7 二次定位流程圖Fig. 7 The flow chart of second positioning
二次定位算法步驟:
1)圖片載入及預(yù)處理。由一次粗定位得到原始字符圖如圖8(a),及粗定位圓心如圖8中紅色圓點表示。預(yù)處理得二值化字符如圖8(b)。
圖 8 二次定位中間過程圖Fig. 8 Process image of second positioning
2)尋找最大輪廓。對二值化字符進(jìn)行形態(tài)梯度運(yùn)算如圖8(c)。對形態(tài)梯度圖進(jìn)行輪廓提取,依次遍歷所有輪廓并計算輪廓面積,保留面積最大的輪廓,如圖8(d)所示。
3)尋找輪廓外接圓。由于圓具有穩(wěn)定性和唯一性,因此尋找字符最大輪廓的最小外接圓如圖8(e),外接圓圓心如圖中綠色圓點所示。
4)修正圓心。由最小外接圓,重新截取字符圖片如圖8(f),保證字符位于圖像中心位置,為后續(xù)識別工作做準(zhǔn)備。同時由兩次圓心坐標(biāo)對比可得定位誤差,并對粗定位圓心坐標(biāo)進(jìn)行修正,從而得到棋子精確的圓心坐標(biāo)。
棋子識別本質(zhì)上就是字符識別,但不同于傳統(tǒng)的字符識別,在擺放過程中棋子可能旋轉(zhuǎn)任意角度,而造成字符傾斜,而傳統(tǒng)基于像素的模板匹配識別不具有旋轉(zhuǎn)不變性。如何克服圓形棋子的旋轉(zhuǎn)特性是中國象棋棋子識別的難點。本文提出了一種旋轉(zhuǎn)差分識別算法,其具體流程圖如圖9所示。
圖 9 旋轉(zhuǎn)差分識別算法流程Fig. 9 Flow chart of recognition algorithm
載入已制備模板圖,將待識別圖與其做像素差分如圖10所示,并保留差分值。隨后,將模板旋轉(zhuǎn)a°后重復(fù)上述操作,直至360°旋轉(zhuǎn)完畢為止。統(tǒng)計各個旋轉(zhuǎn)角度的像素差分值,保留其中的最小值,記為Bn(n為模板序號,為1, 2,···,7)。
然后再和第2個模板進(jìn)行上述操作。依次和所有7個模板進(jìn)行上述操作后,則最小的Bn對應(yīng)的字符,即為待識別棋子的識別結(jié)果,隨即可得其對應(yīng)的棋盤的位置。識別效果如圖10所示。
圖 10 識別效果Fig. 10 Recognition effect image
本系統(tǒng)硬件平臺如圖11所示,攝像機(jī)為普通家用網(wǎng)絡(luò)攝像頭,分辨率為:1 280像素×720像素。象棋棋子直徑為:15 mm。計算機(jī) CPU 為intel core i5—4 200 M,主頻 2.5 GHz,通過軟件開發(fā)平臺Visual Studio 2012和Open CV2.4.9編寫C + +程序,對棋子進(jìn)行了定位與識別算法驗證。
圖 11 中國象棋機(jī)器人系統(tǒng)硬件平臺Fig. 11 Hardware platform of Chinese chess robot system
利用本系統(tǒng)采集4張擺棋區(qū)域的圖像,每張圖片中包含32個棋子,共128個棋子。隨后對每張棋子圓心進(jìn)行人工標(biāo)定,將檢測定位坐標(biāo)和標(biāo)定坐標(biāo)對比,得到定位誤差,如表1 所示。
表 1 定位結(jié)果Table 1 Location result
兩次定位誤差為歐氏距離D,單位為像素(pixel)。定義誤差修正率:
該參數(shù)可以反映定位精度的提升程度。由式(2)可知,定位精度提升均在40%以上,大部分在60%或70%以上,最高可達(dá)80%。
本系統(tǒng)使用棋子直徑為15 mm,通過比例換算,可以得到最終實際定位誤差。實驗結(jié)果表明:棋子定位精度均在0.50 mm以上,最高定位精度達(dá)到0.11 mm,定位精準(zhǔn)。棋子的平均定位時間為2.61 ms,定位快速,滿足象棋機(jī)器人快速精準(zhǔn)定位的要求。
各個字符定位精度存在差異:” 將”、“帥”、“炮”等的定位精度較高達(dá)到0.1 mm級別;而“士”、“車”的定位精度較低,僅為0.5 mm左右。因為相比于“將”、“帥”等左右結(jié)構(gòu)分布的文字,“士”、“車”等為一體的豎長結(jié)構(gòu),造成其最大輪廓外接圓穩(wěn)定性不足,定位存在較大偏差。
定位時間存在差異,“士”、“仕”定位時間短達(dá)到1.5 ms左右;而“馬”、“炮”等字符定位時間長為3.0 ms左右,這是因為:“士”、“仕”等字符的筆畫較少的文字,“馬”、“炮”等較多,進(jìn)行輪廓提取后字符輪廓數(shù)量多,輪廓遍歷時遍歷的次數(shù)多,而造成定位時間長。
本文采用旋轉(zhuǎn)差分識別算法,因此棋子識別率和差分時模板每次旋轉(zhuǎn)角度a密切相關(guān),且算法的運(yùn)算時間也與其直接相關(guān),a越小,即識別率越高但運(yùn)算效率越差。如何平衡識別率和運(yùn)算效率,是該算法要解決的關(guān)鍵問題。
采集20副圖像共640個棋子進(jìn)行測試,在0°~45°區(qū)間內(nèi)分別設(shè)定了不同的差分旋轉(zhuǎn)角度a°進(jìn)行11次實驗,如表2 所示。注:運(yùn)算時間為單個棋子的全流程平均運(yùn)算時間,包括定位與識別。
表 2 識別結(jié)果Table 2 Recognition result
由表2可以得到棋子識別率和運(yùn)算時間與差分旋轉(zhuǎn)角度a的關(guān)系圖,如圖12和圖13所示。
圖 12 識別準(zhǔn)確率Fig. 12 Recognition accuracy
圖 13 運(yùn)算時間Fig. 13 Operation time
對圖12、13進(jìn)行分析,從識別率來看,當(dāng)旋轉(zhuǎn)角度在1°~21°變化時,系統(tǒng)均保持較高的準(zhǔn)確率,達(dá)到98%。當(dāng)角度超過21°以后,準(zhǔn)確率開始下降并且下降速率越來越快。
從運(yùn)算時間來看,角度為1°時處理一個棋子平均耗時75.6 ms。但隨著角度不斷增大,運(yùn)算時間迅速減小,為5°時,運(yùn)算時間已減小到18.7 ms。隨后減小速率不斷放緩。
綜合識別率和運(yùn)算時間分析,該系統(tǒng)差分識別算法的旋轉(zhuǎn)角度選擇10°~15°較為適宜。在此角度范圍內(nèi),棋子識別率較高為98%左右,全流程運(yùn)算時間為10 ms左右,滿足象棋機(jī)器人系統(tǒng)的要求。
選定旋轉(zhuǎn)差分角a=13°,對20幅圖片中各個字符識別情況分別統(tǒng)計如表3所示。其中錯誤識別為:“炮”錯誤識別為“相”;“馬”和“兵”之間錯誤識別;“車”和“卒”之間錯誤識別。字符之間相互錯誤識別的原因和如何進(jìn)一步提升算法的識別準(zhǔn)確率是下一步研究的重點。
將本文在旋轉(zhuǎn)差分角度設(shè)定在13°情況下的實驗數(shù)據(jù)與文獻(xiàn)[17]的實驗數(shù)據(jù)進(jìn)行對比,得到結(jié)果如表4所示。
表 3 旋轉(zhuǎn)差分角為13°時的識別結(jié)果Table 3 Recognition results when the angle is 13 degrees
表 4 對比測試結(jié)果Table 4 Comparison of test result
從表4可知,本象棋棋子定位與識別系統(tǒng)棋子定位誤差0.5 mm略低于文獻(xiàn)[17]的0.8 mm,識別準(zhǔn)確率98.8%略高于文獻(xiàn)[17]的98%,該兩項指標(biāo)相差不大。但本系統(tǒng)棋子全流程運(yùn)算時間僅為9.3 ms,遠(yuǎn)遠(yuǎn)小于文獻(xiàn)[17]的最短識別時間49 ms。
本文使用的攝像機(jī)為普通網(wǎng)絡(luò)攝像頭分辨率為1 280像素×720像素,文獻(xiàn)[17]使用的是工業(yè)高清相機(jī)分辨率為1 000像素×1 000像素;本文使用的棋子為直徑15 mm,文獻(xiàn)[17]使用的棋子直徑為28 mm;且文獻(xiàn)[17]的測試環(huán)境較為簡單,為測試平臺箱內(nèi)部,本文的測試環(huán)境較為復(fù)雜。因此,本文的綜合測試效果優(yōu)于文獻(xiàn)[17],具有良好的應(yīng)用前景。
本文針對中國象棋機(jī)器人中棋子視覺定位與識別問題,提出了一種基于最小外接圓二次定位的定位方法和一種旋轉(zhuǎn)差分識別算法。實驗結(jié)果表明該定位方法能夠?qū)崿F(xiàn)棋子的快速高精度定位,定位精度達(dá)到0.5 mm,平均定位時間為2.6 ms;能夠快速精準(zhǔn)地識別棋子,在保證棋子識別準(zhǔn)確度達(dá)到98%以上的情況下,單棋子全流程運(yùn)算時間為10 ms左右,完全滿足現(xiàn)有象棋機(jī)器人的指標(biāo)要求。
目前該算法在個別字符定位誤差和識別準(zhǔn)確度、棋子定位時間、棋子全流程運(yùn)算時間等方面存在進(jìn)一步優(yōu)化空間,這將是下一步研究的重點。