- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I want gesture to be Recognize only if it is detected for some seconds (3 secs).
camera should not consider it as gesture if hand gesture is changed before 3 secs.
How to achieve this ??
Any help appreciated.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello Khalil,
Some things I have seen that work really good are going over "votes" in the update method.
- detect the gesture and make a couple of votes for the recognized one ( at least 2)
- decrease the amount of votes for each gesture by 1 each step but only if the amount of votes for the gestures themselves is > 0
- at the end of update method, check if one of the gestures has enough votes to be taken as "winner". this is done by a specific thershold.
- if a winner has been found, dont forget to reset all votes.
I dont have this camera on my own so I "guessed" the following code, if there are problems, just tell me :
//GLOBAL variables: int voteForGesture1 = 0, voteForGesture2 = 0 , voteForGesture3 = 0; // all of them int thresholdForGestureDetection = 200 // lower this value for more detection, rise this value for less detection // this looks like an updateFrame method? int firedGesturesNumber = handAnalysis.QueryFiredGesturesNumber(); for(int i = 0; i < firedGesturesNumber; ++i) { PXCMHandData.GestureData gestureData; if (handAnalysis.QueryFiredGestureData(i, out gestureData) == pxcmStatus.PXCM_STATUS_NO_ERROR) { if (handAnalysis.IsGestureFired("thumb_up", out gestureData)) gesnum = 1; if (handAnalysis.IsGestureFired("v_sign", out gestureData)) gesnum = 2; } } //this looks like a validate method at the end of each frame? if(voteForGesture1>0) voteForGesture1--; if(voteForGesture2>0) voteForGesture2--; if(voteForGesture3>0) voteForGesture3--; switch (gesNum) { case 1: voteForGesture1+=3;break; case 2: voteForGesture2+=3;break; case 3: voteForGesture3+=3;break; } if (voteForGesture1 >= thresholdForGestureDetection){ label1.Content = "Gestured Fired 01 thumb Up "; voteForGesture1=0; voteForGesture2=0; voteForGesture3=0; } if (voteForGesture2 >= thresholdForGestureDetection){ label1.Content = "Gestured Fired 02 V sign "; voteForGesture1=0; voteForGesture2=0; voteForGesture3=0; }
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
So you want the hands to be not moved for 3 seconds and then recognize gestures?
I would try some method like checkHandMotion() and repeatedly measure its status. (f.e. returns 0 if hand not moved).
You would probably need to run this method about every 50ms or so. save the results for up to 3 seconds and then check over the saved results if the hand has moved during the last 3 seconds. if no movement && detected gesture then execute a command
if you have a minimum example for the recognition post the code here, i will try to give more details then
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am using many gestures in my project ,
and it detects gestures very quickly even when i don't do that gesture,
thus i want it to detect only if user do gesture for particular interval(3 secs) .i.e v-sign for 3 sec then only it must perform action assigned on v-sign and so on.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
What camera do you have? Do you have some code?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am using SR-300 camera.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
From hand Analysis -
int firedGesturesNumber = handAnalysis.QueryFiredGesturesNumber();
for(int i = 0; i < firedGesturesNumber; i++)
{
PXCMHandData.GestureData gestureData;
if (handAnalysis.QueryFiredGestureData(i, out gestureData) == pxcmStatus.PXCM_STATUS_NO_ERROR)
{
if (handAnalysis.IsGestureFired("thumb_up", out gestureData))
gesnum = 1;
if (handAnalysis.IsGestureFired("v_sign", out gestureData))
gesnum = 2;
gesnum here is global variable which i am assigning manually and using it below in updateUi method in switch case -
under updateUi method -
switch (gesNum)
{
case 1:
label1.Content = "Gestured Fired 01 thumb Up ";
break;
case 1=2:
label1.Content = "Gestured Fired 02 V sign ";
break;
And so on.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello Khalil,
Some things I have seen that work really good are going over "votes" in the update method.
- detect the gesture and make a couple of votes for the recognized one ( at least 2)
- decrease the amount of votes for each gesture by 1 each step but only if the amount of votes for the gestures themselves is > 0
- at the end of update method, check if one of the gestures has enough votes to be taken as "winner". this is done by a specific thershold.
- if a winner has been found, dont forget to reset all votes.
I dont have this camera on my own so I "guessed" the following code, if there are problems, just tell me :
//GLOBAL variables: int voteForGesture1 = 0, voteForGesture2 = 0 , voteForGesture3 = 0; // all of them int thresholdForGestureDetection = 200 // lower this value for more detection, rise this value for less detection // this looks like an updateFrame method? int firedGesturesNumber = handAnalysis.QueryFiredGesturesNumber(); for(int i = 0; i < firedGesturesNumber; ++i) { PXCMHandData.GestureData gestureData; if (handAnalysis.QueryFiredGestureData(i, out gestureData) == pxcmStatus.PXCM_STATUS_NO_ERROR) { if (handAnalysis.IsGestureFired("thumb_up", out gestureData)) gesnum = 1; if (handAnalysis.IsGestureFired("v_sign", out gestureData)) gesnum = 2; } } //this looks like a validate method at the end of each frame? if(voteForGesture1>0) voteForGesture1--; if(voteForGesture2>0) voteForGesture2--; if(voteForGesture3>0) voteForGesture3--; switch (gesNum) { case 1: voteForGesture1+=3;break; case 2: voteForGesture2+=3;break; case 3: voteForGesture3+=3;break; } if (voteForGesture1 >= thresholdForGestureDetection){ label1.Content = "Gestured Fired 01 thumb Up "; voteForGesture1=0; voteForGesture2=0; voteForGesture3=0; } if (voteForGesture2 >= thresholdForGestureDetection){ label1.Content = "Gestured Fired 02 V sign "; voteForGesture1=0; voteForGesture2=0; voteForGesture3=0; }
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you johannes,
i am implementing it.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you Johannes, Code worked for me.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page