I am working on one-shot learning of gestures. Most of the gestures involve moving the left and the right hand and the hand joints are easily detectable using skeletal tracing library of Kinect SDK. I am facing the problem as to how to guess the start of the gesture and when it ends so that I can feed the coordinates of the hand joint trajectory to my algorithm that finally classifies the gesture?
1 Answers
There is no way you can detect the beginning of a unknown gesture within a learning engine. There must be some discrete action that tells the system that a gesture is about to be started for it to learn. Without this discrete action the system can not know what motion is the beginning of the gesture, v.s. a motion between, v.s. a motion moving towards the beginning, v.s. an arbitrary motion the engine should care nothing about.
There are a few discrete actions that might work, depending on your situation:
- a keyboard or mouse action
- a known gesture to signify a new gesture is to begin/end
- use voice recognition to notify the engine that you are starting/ending
- some action with a short countdown timer for the user to get to "position 1" of the gesture and begin when prompted.
- have a single origin for all gestures - holding your hand there for a short period to signify beginning of learning action.
Without some form of a discrete action, the system just can not know what you want. It will always guess, and you will always run into a situation where the system guesses wrong.
For executing on a known gesture, your method depends on how you store the data and the complexity of the gesture. Here are two gesture libraries that you can review to see how they work:
They may also help give ideas of how you want to start/end gestures, based on how the gesture data is stored for each situation.