涂 樸 沈 榮 黃 晨
(1. 四川文理學(xué)院智能制造學(xué)院,四川 達(dá)州 635000; 2. 四川省達(dá)州市公安局,四川 達(dá)州 635000)
隨著人工智能和虛擬現(xiàn)實(shí)技術(shù)的不斷發(fā)展,人機(jī)交互[1-3](human-computer interaction)系統(tǒng)已經(jīng)成為當(dāng)前的研究熱點(diǎn).目前,人機(jī)交互系統(tǒng)主要采取了行為識(shí)別[4-5](手勢(shì)交互)、三維交互[6]、語音交互[7-8]、觸覺交互[9-10]和多通道交互[10]等技術(shù).
作為行為識(shí)別技術(shù)中的一個(gè)重要研究分支,機(jī)器視覺方法實(shí)時(shí)性、魯棒性較強(qiáng),具有易于實(shí)現(xiàn)、交互性較好等優(yōu)點(diǎn).如,通過捕捉目標(biāo)物體的三維坐標(biāo)信息,可以協(xié)助移動(dòng)機(jī)器人完成目標(biāo)跟蹤[11]、自主導(dǎo)航和避障[12-13].本文也將利用機(jī)器人視覺技術(shù),對(duì)人體圖像、姿勢(shì)動(dòng)作進(jìn)行識(shí)別和處理,以期實(shí)際應(yīng)用于特種機(jī)器人、服務(wù)機(jī)器人及智能家居等領(lǐng)域.
首先,在上位機(jī)層面,通過Kinect感應(yīng)器,實(shí)時(shí)捕捉深度圖像和RGB圖像.然后,利用OpenNI和NITE技術(shù)框架,編寫人體姿態(tài)識(shí)別處理程序(手勢(shì)和人體骨骼),將用戶的手部或者肢體動(dòng)作在空間中的坐標(biāo)位移進(jìn)行分類處理.最后,將對(duì)應(yīng)的操控指令通過串口驅(qū)動(dòng)程序發(fā)送至單片機(jī)執(zhí)行,從而實(shí)現(xiàn)對(duì)人體動(dòng)作的識(shí)別.整個(gè)系統(tǒng)結(jié)構(gòu)框圖見圖1.
圖1 系統(tǒng)結(jié)構(gòu)框圖
深度圖像的獲取是由紅外線發(fā)射器和CMOS 紅外攝像機(jī)共同完成的,只要Kinect感應(yīng)器接收到了光編碼的紅外圖案,其內(nèi)置的PrimeSense的PS1080芯片就會(huì)把這個(gè)圖案與存儲(chǔ)在芯片內(nèi)存中的參考圖像相比較,經(jīng)過系統(tǒng)校準(zhǔn)后,就轉(zhuǎn)換成了一個(gè)VGA尺寸的場(chǎng)景深度圖像,用戶通過OpenNI的API即可訪問這個(gè)圖像.RGB圖像的獲取則相對(duì)簡(jiǎn)單,通過Kinect自帶的標(biāo)準(zhǔn)RGB攝像機(jī)及其數(shù)據(jù)鏡像功能,即可訪問RGB圖像.Kinect感應(yīng)器獲取的深度圖像和RGB圖像對(duì)比如圖2所示.
使用Processing語言實(shí)現(xiàn)獲取深度圖像和RGB圖像的主要過程是,導(dǎo)入Simple-OpenNI庫(kù),聲明包含Simple-OpenNI對(duì)象的Kinect變量,并啟動(dòng)對(duì)象中的深度圖和RGB圖像的數(shù)據(jù)鏡像功能.
圖2 深度圖像和RGB圖像對(duì)比圖
以用手勢(shì)控制小車運(yùn)動(dòng)為例.用戶向Kinect感應(yīng)器揮手,開啟識(shí)別功能:手勢(shì)向左、右滑動(dòng),分別控制小車左、右轉(zhuǎn)彎;上下滑動(dòng),分別控制小車前進(jìn)、后退;用手勢(shì)畫出一個(gè)圓形,小車剎停.主要的程序流程是:(1)啟用Kinect對(duì)象的深度圖、手勢(shì)和手部函數(shù),用揮手手勢(shì)命令Kinect開始手部跟蹤;(2)設(shè)定NITE的手點(diǎn)控制器和圓形探測(cè)器,跟隨用戶手部動(dòng)作,實(shí)時(shí)更新手部向量(Processing向量PVector),并在屏幕上通過坐標(biāo)映射繪制手部跟蹤點(diǎn);(3)為了檢測(cè)左右、上下?lián)]手和畫圓的動(dòng)作,還要添加監(jiān)聽器,并且編寫NITE回調(diào)函數(shù).函數(shù)通過計(jì)算手部位置向量的數(shù)據(jù)變化來識(shí)別動(dòng)作,如,本文采用的方法為監(jiān)測(cè)手部位置向量的x方向位置變動(dòng),超過設(shè)定的閾值(50 mm),則認(rèn)為向左(右)揮手的動(dòng)作發(fā)生;(4)通過串口驅(qū)動(dòng)程序,向單片機(jī)發(fā)送指令,執(zhí)行相應(yīng)動(dòng)作.左手向左、右滑動(dòng)時(shí),識(shí)別手勢(shì)過程如圖3所示.
圖3 識(shí)別手勢(shì)圖(a)左滑動(dòng)識(shí)別手勢(shì)圖;(b)右滑動(dòng)識(shí)別手勢(shì)圖
Kinect感應(yīng)器能夠識(shí)別追蹤20個(gè)主要的人體骨骼點(diǎn),利用各關(guān)節(jié)點(diǎn)的三維坐標(biāo)數(shù)據(jù)可以計(jì)算得出關(guān)節(jié)轉(zhuǎn)角,實(shí)現(xiàn)對(duì)人體姿態(tài)的識(shí)別.進(jìn)一步的,將人體姿態(tài)映射為機(jī)械臂的執(zhí)行動(dòng)作,就能實(shí)現(xiàn)機(jī)械臂模仿人體動(dòng)作的控制方式.以人體右肩關(guān)節(jié)作為控制關(guān)節(jié)為例,主要的程序流程是:(1)啟用Kinect對(duì)象的深度圖和人體關(guān)節(jié),注冊(cè)發(fā)現(xiàn)新用戶、丟失用戶、姿勢(shì)偵測(cè)等相關(guān)回調(diào)函數(shù).當(dāng)監(jiān)測(cè)到設(shè)定的觸發(fā)姿態(tài)后使用NITE進(jìn)行骨骼校準(zhǔn);(2)開始跟蹤人體骨骼,實(shí)時(shí)獲取各個(gè)關(guān)節(jié)的向量,并存儲(chǔ)各個(gè)關(guān)節(jié)的最新位置;(3)以右肩部位置為中點(diǎn),從遠(yuǎn)端到近端方向,分別提取右肘部、右肩部、左肩部的向量(PVector對(duì)象),通過反正切函數(shù)計(jì)算三點(diǎn)連線所形成的角度,得到右肩關(guān)節(jié)的轉(zhuǎn)動(dòng)角度,然后輸出相應(yīng)的控制值.人體骨骼跟蹤如圖4所示.右側(cè)肩關(guān)節(jié)跟蹤情況如圖5所示.
圖4 人體骨骼跟蹤識(shí)別圖
圖5 右側(cè)肩關(guān)節(jié)跟蹤識(shí)別圖
關(guān)節(jié)角度計(jì)算函數(shù)如下:
float angle(PVector a, PVector b, PVector c) {
//使用反正切函數(shù),求出三點(diǎn)連線形成的角度
float angle01=atan2(a.y - b.y, a.x - b.x);
float angle02=atan2(b.y - c.y, b.x - c.x);
float ang=angle02 - angle01;
return ang*(180/PI); }
關(guān)節(jié)角度位置更新函數(shù)如下:
void updateAngles() {
//提取每個(gè)關(guān)節(jié)的位置,并存儲(chǔ)在一個(gè)PVector對(duì)象中
kinect.getJointPositionSkeleton(1,SimpleOpenNI.SKEL_SHOULDER,lShoulder);
kinect.getJointPositionSkeleton(1, SimpleOpenNI.SKEL_FOOT, lFoot);
….
//將關(guān)節(jié)轉(zhuǎn)換成屏幕上的投影坐標(biāo)
kinect.convertRealWorldToProjective(rShoulder, rShoulder);
….
//計(jì)算關(guān)節(jié)角度
angles[0]=angle(rElbow, rShoulder, lShoulder );
….
}
本文在底層執(zhí)行機(jī)構(gòu)采用了Arduino UNO單片機(jī).PC機(jī)作為上位機(jī)在完成圖像數(shù)據(jù)處理后,通過串行通信協(xié)議向Arduino發(fā)送控制命令與目標(biāo)信息,Arduino接收后,通過脈沖寬度調(diào)制等方法驅(qū)動(dòng)伺服電機(jī)、LED等設(shè)備執(zhí)行相應(yīng)動(dòng)作.
本文利用Kinect感應(yīng)器捕捉目標(biāo)物體的三維坐標(biāo)信息,并通過處理深度信息數(shù)據(jù)來實(shí)現(xiàn)非接觸式、自然式的人機(jī)交互,具有易于實(shí)現(xiàn)、交互性較好等優(yōu)點(diǎn),可以廣泛應(yīng)用于服務(wù)機(jī)器人、智能家居、機(jī)器人教學(xué)、工業(yè)控制、體感游戲設(shè)計(jì)等領(lǐng)域.同時(shí),該系統(tǒng)在消除擾動(dòng)和深度圖像中的空洞及噪聲點(diǎn)等方面還存在空白,在空間人體姿態(tài)識(shí)別、點(diǎn)云分析、3D掃描打印等方面還有待深入開發(fā),這將是下一步的努力方向.
首都師范大學(xué)學(xué)報(bào)(自然科學(xué)版)2019年4期