However I managed to identify each finger by sorting the x coordinates. So the left most finger is the Thumb, then index and vice versa.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var webSocket = require('ws'), | |
ws = new webSocket('ws://127.0.0.1:6437'), | |
i=0,frame; | |
var Fingers = new Object(); | |
Fingers.id = new Array(); | |
Fingers.xposition = new Array(); | |
Fingers.yposition = new Array(); | |
Fingers.zposition = new Array(); | |
Fingers.xdirection = new Array(); | |
Fingers.ydirection = new Array(); | |
Fingers.zdirection = new Array(); | |
Fingers.length = new Array(); | |
ws.on('message', function(data, flags) { | |
i++; | |
//console.log('a'); | |
frame = JSON.parse(data); | |
if (frame.hands && frame.hands.length>0 && frame.pointables.length>4) { | |
var v1 = frame.hands[0].palmNormal; | |
var NumFingers = frame.pointables.length; | |
//console.log('d'); | |
//if (NumFingers==5){ | |
var rawFingers = new Array(); | |
for (var i=0; i<NumFingers; i++){ | |
// console.log('f'); | |
rawFingers[i] = frame.pointables[i].tipPosition; | |
rawFingers[i].direction = frame.pointables[i].direction; | |
rawFingers[i].id = frame.pointables[i].id; | |
rawFingers[i].Length = frame.pointables[i].length; | |
//console.log(rawFingers[i]); | |
} | |
rawFingers.sort(function(a, b) | |
{if(a[0] == b[0]) return 0; | |
return a[0] < b[0] ? -1 : 1; | |
}); | |
for(var i=0; i<5; i++){ | |
//set base positions and ID's | |
Fingers.xposition[i] = rawFingers[i][0]; | |
Fingers.yposition[i] = rawFingers[i][1]; | |
Fingers.zposition[i] = rawFingers[i][2]; | |
Fingers.xdirection[i] = rawFingers[i].direction[0]; | |
Fingers.ydirection[i] = rawFingers[i].direction[1]; | |
Fingers.zdirection[i] = rawFingers[i].direction[2]; | |
Fingers.id[i] = rawFingers[i].id; | |
Fingers.length[i] = rawFingers[i].Length; } | |
var v2 = rawFingers[0].direction; | |
var v3 = rawFingers[1].direction; | |
var v4 = rawFingers[2].direction; | |
var v5 = rawFingers[3].direction; | |
var v6 = rawFingers[4].direction; | |
var dotProduct_thumb = v1[0]*v2[0] +v1[1]*v2[1] +v1[2]*v2[2]; | |
var v1normal_thumb = Math.sqrt(v1[0]*v1[0]+v1[1]*v1[1]+v1[2]*v1[2]); | |
var v2normal_thumb = Math.sqrt(v2[0]*v2[0]+v2[1]*v2[1]+v2[2]*v2[2]); | |
var angle_thumb = 90-((Math.acos(dotProduct_thumb/(v1normal_thumb*v2normal_thumb)))*180/Math.PI); | |
var dotProduct_index = v1[0]*v3[0] +v1[1]*v3[1] +v1[2]*v3[2]; | |
var v1normal_index = Math.sqrt(v1[0]*v1[0]+v1[1]*v1[1]+v1[2]*v1[2]); | |
var v2normal_index = Math.sqrt(v3[0]*v3[0]+v3[1]*v3[1]+v3[2]*v3[2]); | |
var angle_index = 90-((Math.acos(dotProduct_index/(v1normal_index*v2normal_index)))*180/Math.PI); | |
var dotProduct_middle = v1[0]*v4[0] +v1[1]*v4[1] +v1[2]*v4[2]; | |
var v1normal_middle = Math.sqrt(v1[0]*v1[0]+v1[1]*v1[1]+v1[2]*v1[2]); | |
var v2normal_middle = Math.sqrt(v4[0]*v4[0]+v4[1]*v4[1]+v4[2]*v4[2]); | |
var angle_middle = 90-((Math.acos(dotProduct_middle/(v1normal_middle*v2normal_middle)))*180/Math.PI); | |
var dotProduct_ring = v1[0]*v5[0] +v1[1]*v5[1] +v1[2]*v5[2]; | |
var v1normal_ring = Math.sqrt(v1[0]*v1[0]+v1[1]*v1[1]+v1[2]*v1[2]); | |
var v2normal_ring = Math.sqrt(v5[0]*v5[0]+v5[1]*v5[1]+v5[2]*v5[2]); | |
var angle_ring = 90-((Math.acos(dotProduct_ring/(v1normal_ring*v2normal_ring)))*180/Math.PI); | |
var dotProduct_pinky = v1[0]*v6[0] +v1[1]*v6[1] +v1[2]*v6[2]; | |
var v1normal_pinky = Math.sqrt(v1[0]*v1[0]+v1[1]*v1[1]+v1[2]*v1[2]); | |
var v2normal_pinky = Math.sqrt(v6[0]*v6[0]+v6[1]*v6[1]+v6[2]*v6[2]); | |
var angle_pinky = 90-((Math.acos(dotProduct_pinky/(v1normal_pinky*v2normal_pinky)))*180/Math.PI); | |
console.log(' '+' Thumb '+' Index '+' Middle '+' Ring '+' Pinky '); | |
console.log(Fingers); | |
console.log('\n'); | |
console.log("angle_thumb: "+angle_thumb); | |
console.log("angle_index: "+angle_index); | |
console.log("angle_middle: "+angle_middle); | |
console.log("angle_Ring: "+angle_ring); | |
console.log("angle_Pinky: "+angle_pinky); | |
console.log('\n'); | |
} | |
}); |
No comments:
Post a Comment