ในตอนนี้ เราจะลองติดตั้งโปรแกรมที่เกี่ยวข้อง รวมถึงเริ่มต้นเขียนโค้ดเพื่อแสดงผลตำแหน่งมือขวาของเรา
ผลลัพธ์ที่ได้น่าจะประมาณนี้ครับ โดยวงกลมสีเหลืองก็คือตำแหน่งของมือขวาของเรา ที่ตรวจจับโดย Kinect และวงกลมนี้จะเคลื่อนตามมือของเราครับ
การติดตั้งซอฟต์แวร์ที่เกี่ยวข้อง
- Processing (https://processing.org/)
- Kinect SDK (https://www.microsoft.com/en-us/download/details.aspx?id=40278)
- Kinect4WinSDK หลังจากติดตั้ง Processing แล้ว สามารถเลือกเมนู Sketch/Import Library.../Add Library... แล้วเลือก Kinect4WindSDK
โค้ด
/* Hand detection and display */ import kinect4WinSDK.Kinect; import kinect4WinSDK.SkeletonData; //ref: http://www.magicandlove.com/blog/research/kinect-for-processing-library/ Kinect kinect; ArrayList <SkeletonData> bodies; //Set initial graphic properties void setup() { //set window's size size(640, 480); //set black background background(0); //create an instance of Kinect kinect = new Kinect(this); smooth(); //arraylist of skeletons bodies = new ArrayList<SkeletonData>(); } //Method to draw graphics, auto refresh void draw() { background(0); //assume only one tracked skeleton //right hand detection if(bodies.size() != 0) { showRightHand(bodies.get(0), Kinect.NUI_SKELETON_POSITION_HAND_RIGHT); } } //Method to draw a circle at right hand void showRightHand(SkeletonData _s, int hand) { //if hand is tracked if (_s.skeletonPositionTrackingState[hand] != Kinect.NUI_SKELETON_POSITION_NOT_TRACKED) { //get x and y positions of right hand float x = _s.skeletonPositions[hand].x * width; float y = _s.skeletonPositions[hand].y * height; //draw a yellow circle at hand position fill(255,255,0); ellipse(x, y, 30, 30); } } //*********************** DO NOT MODIFY ANYTHING BELOW THIS PART ************************ void appearEvent(SkeletonData _s) { if (_s.trackingState == Kinect.NUI_SKELETON_NOT_TRACKED) { return; } synchronized(bodies) { bodies.add(_s); } } void disappearEvent(SkeletonData _s) { synchronized(bodies) { for (int i=bodies.size ()-1; i>=0; i--) { if (_s.dwTrackingID == bodies.get(i).dwTrackingID) { bodies.remove(i); } } } } void moveEvent(SkeletonData _b, SkeletonData _a) { if (_a.trackingState == Kinect.NUI_SKELETON_NOT_TRACKED) { return; } synchronized(bodies) { for (int i=bodies.size ()-1; i>=0; i--) { if (_b.dwTrackingID == bodies.get(i).dwTrackingID) { bodies.get(i).copy(_a); break; } } } }
พี่มีช่องทางการติดต่อไหมคะ พอดีกำลังทำโปรเจคเกี่ยวกับเรื่องนี้อยู่ ถ้าพี่มีเวลาว่างรบกวนติดต่อ suchanad_m@hotmail.com หน่อยนะคะ
ReplyDelete