- 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