Skip to content
Baptiste Caramiaux edited this page Nov 6, 2013 · 14 revisions

The Gesture Variation Follower (GVF) is a cross-platform, open-source C++ library for gesture recognition and gesture variation following.

The main features of GVF are:

  • Early-recognition: an input gesture is classified as soon as it starts to be performed
  • Adaption: algorithm adapts the recognition to be invariant to variations in speed, scaling, rotation (only for 2d gestures)

Schematic overview of the algorithm:
GVF_Overview

  1. A pre-recorded gesture vocabulary is associated to GVF
  2. Each new sample of a live gesture is sent to GVF
  3. For each sample, the algorithm returns: the currently recognized gesture, the time progression (temporal alignement between 0 and 1 where 0=currently at the beginning of the gesture, 1=currently at the end of the gesture) in the recognized gesture, the relative speed (1=original speed), the relative scale (1=original size), and the angle of rotation.

Version using parameters

The construction of a GestureVariationFollower object requires a certain number of parameters. This page tries to help the interested programmer in choosing the parameters for given input data.

Methods

Construct a GestureVariationFollower object:
GestureVariationFollower* myGvf = new GestureVariationFollower(ns, sigs, icov, resThresh, nu);

Learning. For each new template to be added to the vocabulary:
myGvf->addTemplate();
For each new incoming data vector data [type vector<float>] of a template N [type: int]:
myGvf->fillTemplate(N, data);

Following. At the beginning of each new gesture (first point of a gesture), restart the GVF by spreading particles:
myGvf->spreadParticles(means, ranges);
For each new live gesture data vector livedata [type vector<float>]:
myGvf->infer(livedata);

Parameters

Constructor:

  • ns: Number of particles (~200/template)
  • sigs: Incremental step length for each feature. In other words, for instance allowing large variation in scale would lead to put its sig value to 0.01, on the contrary constraining the evolving scaling would lead to a sig value 0.0000001. sigs is a vector of the size of the variation features to be estimated (typically 4).
  • icov: e.g. value at 1/(0.04) for data between 0 and 1
  • resThresh = ns/5
  • nu = 0.

Spreading particles: particles are spread uniformly onto each feature (phase, speed, scale and angle)

  • means: Mean values for spreading. For instance, if considering that at the beginning the live gesture would start at the original speed before varying, the mean value for the speed feature will be 1
  • ranges: Range of spreading.

Version using default parameters

Not committed yet, in progress ...

Clone this wiki locally