2012年9月18日 星期二

Some extensions for AIRKinect(1)AIRKinect簡介

雖然我應該在第0篇把基本的東西介紹完,在第1篇進入重點,但我發現不稍微介紹一下AIRKinect的一些類別,後面會有點難懂。以下就稍微介紹幾個重要的類別,詳細內容就請參考線上文件

Kinnect與KinectSettings:


使用Kinect來取得裝置的實體:
_kinect = Kinect.getDevice();
然後用這個實體監聽相關事件,來取得影像或數值資料,然後去做該做的事:
_kinect.addEventListener(DeviceEvent.STARTED, onDeviceStarted);
_kinect.addEventListener(DeviceEvent.STOPPED, onDeviceStopped);
_kinect.addEventListener(UserEvent.USERS_WITH_SKELETON_ADDED, onUserWithSkeletonAdded);
_kinect.addEventListener(UserEvent.USERS_WITH_SKELETON_REMOVED, onUserWithSkeletonRemoved);
_kinect.addEventListener(CameraImageEvent.RGB_IMAGE_UPDATE, onRGBImageUpdate);
KinectSettings則是用來做一些設定,例如要不要接收RBG影像,要不要鏡射,影像解析度等等:
var settings:KinectSettings = new KinectSettings();
settings.skeletonEnabled = true;
settings.rgbEnabled = true;
然後執行以下這行來開啟裝置:
_kinect.start(settings);
最後當應用程式要關閉的時候,除了移除監聽程式,要記得執行這行來關閉裝置:
_kinect.dispose();

Kinnect有兩個子類別:MSKinect與OpenNIKinect,分別是針對MS Kinect SDK與OPENNI新增獨有的功能。一般狀況使用Kinnect就可以了。後面有幾個類別也是類似的狀況。

User:


Kinect可以辨識出2個帶有骨架資訊的User,以及另外4個只有質心座標的User。可以使用Kinect監聽UserEvent.USERS_ADDED或UserEvent.USERS_WITH_SKELETON_ADDED來取得目前偵測到的User參照。

SkeletonJoint:


骨架關節的資訊,帶有關節名字跟座標。可以從帶有骨架資訊User的skeletonJoints取得全部的關節,或使用getJointByName()方法取得指定名字的關節。有效的關節名稱則是定義在SkeletonJoint的一堆constant,例如HEAD或LEFT_HAND。

Position:


座標類別,在Kinect的座標有好幾個,在彩色影像上的2D座標,在深度影像上的2D座標,在真實世界的3D座標。分別在文件上可以看到。以Relative結尾的2D座標是以0~1來表示,而3D座標worldRelative則只是 world直接除以1000(也就是單位從mm變成m)。User的point是質心座標,SkeletonJoint的point則是各關節的座標。

SkeletonBone與Orientation:


用來描述骨架3D旋轉資訊的兩個類別。一個SkeletonBone有自己的name,可用值定義在SkeletonBone的constant,還有起始與結束的SkeletonJoint的名稱,分別是startJointName與endJointName,如果它接在另一個SkeletonBone上,則會有parentBoneName。orientation則是一個Orientation類別實體,它的absoluteOrientationMatrix是一個Matrix3D,裡面就有3D旋轉的資訊。

主要就這幾個,當然還有幾個Event,以及裡面提供的資訊。基本上API設計很直覺,翻完文件,看一下官方提供的範例,應該就知道怎麼用了。

上一篇:Some extensions for AIRKinect(0)準備事項
下一篇:Some extensions for AIRKinect(2)KinctSprite

沒有留言:

張貼留言