ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

Finger detection doesn't work well.

asked 2012-01-10 03:25:14 -0600

Mintra gravatar image

updated 2016-10-24 09:00:14 -0600

ngrennan gravatar image

Hi there,

I followed the instruction on finger detection HERE. For my experiment, the skeleton tracking and hand detection did work well, but I had problems on finger detection.

According to this video http://www.youtube.com/watch?v=haCyDo7y3BE. The result suppose to be like in the vdo, but not for me. HERE is my result

I have already looked through the code and found that on ~/kinect_demos/mit-ros-pkg/kinect_utils/hand_interaction/src/analyze_hands.cpp which is my clusters is always 0.

Here is a piece of my console.

dist:  0.710981  palm: 124  digits: 0 219.509 
got hand 0.06, -0.116754, 0.684308 open
dist:  0.701354  palm: 115  digits: 5 224.323
clusters: 0
got hand 0.06, -0.115469, 0.660131 open
dist:  0.684888  palm: 120  digits: 5 232.556 
clusters: 0
got hand 0.06, -0.117159, 0.642459 open
dist:  0.671496  palm: 128  digits: 48 239.252 
clusters: 0
got hand 0.06, -0.117360, 0.636094 open
dist:  0.648688  palm: 118  digits: 0 250.656
got hand 0.06, -0.119665, 0.617218 open

I stuck on what's wrong with my configuration? Can anyone point me out of this problem?

Thanks in advance.

Mintra.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
3

answered 2012-01-11 12:35:41 -0600

Mintra gravatar image

I have already post it to Kinect+ROS mailing list.

se7oluti0n, who answered my question and it did work for me. Let me copy this msg for you all.

I have had the same problem before but I have solved it by edit some value in this piece of code : in function void radiusFilter(int nnthresh, double tol) of analyze_hands.cpp:

for(uint i=0;i<full.points.size();++i){
    if(inds2[i]==0) continue;
      sc2.NNN(full.points[i],searchinds,tol);
      //TO   DO: this is good for face-on, but not great for tilted hands
     if(searchinds.size()>(530-500*distfromsensor)){
         inds.push_back(i);
       if(searchinds.size()>(570-500*distfromsensor))
            label=0;
         else
            label=1;
         for(uint j=0;j<searchinds.size();++j)
            inds2[searchinds[j]]=label;
      }

}

this functions will separate palm and digits by look at each point of the hand point cloud, If number of points around that point ( within radius tol ( 2nd parameters )) is bigger than (530-500*distfromsensor), this point will belong to palm and vice versa.

replace 530 and 570 with your value ( may be the size of the cluster depends on people ) or edit radius tol my case is 830 and 870 and it worked.

Hope that helps..

edit flag offensive delete link more

Question Tools

Stats

Asked: 2012-01-10 03:25:14 -0600

Seen: 529 times

Last updated: Jan 11 '12