Gestures à Go Go

Training a high-quality gesture recognizer requires providing a large number of examples to enable good performance on unseen, future data. However, recruiting participants, data collection and labeling, etc. necessary for achieving this goal are usually time-consuming and expensive. Thus, it is important to investigate how to empower developers to quickly collect gesture samples for improving UI usage and user experience. In response to this need, we introduce Gestures à Go Go (G3), a web service plus an accompanying web application for bootstrapping stroke gesture samples based on the kinematic theory of rapid human movements. The user only has to provide a gesture example once, and G3 will create a model of that gesture. Then, by introducing local and global perturbations to the model parameters, G3 generates from tens to thousands of synthetic human-like samples. Through a comprehensive evaluation, we show that synthesized gestures perform equally similar to gestures generated by human users. Ultimately, this work informs our understanding of designing better user interfaces that are driven by gestures.

Publications

Application

Try the G3 app online, no software required!

Features

Among other things, you'll be able to create gestures, organize them in collections, export collections and even create a ready-to-use gesture recognizer. G3 incorporates 3 gesture recognizers of the so-called $-family. Currently, 14 combinations of recognizer and programming language are available.

API Endpoints

Although we highly encourage using the G3 app, you can use the web service on your own. Here we describe the main API methods, which allows to synthesize any number of gestures samples using only one gesture example as input. The API is JSON REST, so all requests have Content-Type: application/json.

POST https://g3.prhlt.upv.es/synthesize Deprecated!

Creates a number of synthetic gestures using one gesture example as input. Warning: This method may not be available in the future.

Gesture synthesis is now performed via 2 explicit steps: First, reconstruction, which creates a model of the input gesture. Then, generation, which uses the gesture model to introduce variations and produce different samples.

Parameters

gesture (required) Array Sample gesture as a sequence of strokes: [ [[x,y,t], ... ], ... ]
num_samples (optional, default: 10) Integer Number of desired synthetic samples, between 1 and 999.
variability (optional, default: 1.0) Float The degree of variability (max. 1.0) that synthesized gestures should have (0.0 means no variability).
rate (optional, default: 100) Integer Sampling rate, in Hz, between 50 and 500.

Response Object

errors Array List of errors (if any) encountered while synthesizing gestures.
result Array Synthesized gestures.
POST https://g3.prhlt.upv.es/reconstruct

Creates a model of a given gesture example. This method allows to inspect the gesture model prior to generating synthetic samples.

Parameters

strokes (required) Array Sample gesture as a sequence of strokes: [ [[x,y,t], ... ], ... ]

Response Object

errors Array List of errors (if any) encountered while reconstructing the gesture.
result Object config (model parameters, Object[]) and snr (a quality measure, Float).
POST https://g3.prhlt.upv.es/generate

Takes as input a reconstructed gesture (model parameters) and generates a number of gesture samples.

Parameters

reconstruction (required) Object Model parameters as received by the /reconstruct API method.
nsamples (optional, default: 10) Integer Number of desired synthetic samples.
shapevar (optional, default: 1.0) Float The degree of geometric variability that synthesized gestures should have (0.0 means no variability).
lengthvar (optional, default: 0.0) Float The degree of stroke length variability that synthesized gestures should have (0.0 means that all strokes have the same length).
sametimes (optional, default: false) Boolean Whether the synthesized gestures should have the same timestamps as the original gesture.

Response Object

errors Array List of errors (if any) encountered while generating the gesture samples.
result Array Synthesized gestures: [ [ [[x,y,t], ... ], ... ], ... ]

Datasets

The following are the datasets we used on our experiments. All downloads are zipped CSV files, one file per gesture.

CSV format

Each file contains 5 columns, space-separated.

stroke_id An integer identifying each gesture stroke, starting at 0.
x X coordinate.
y Y coordinate.
time Relative timestamp, in milliseconds. The first timestamp of the first stroke starts at 0.
is_writing An integer indicating if the stroke is a pen-down (1) or not (0).

Citation

If you use the G3 app, the API, or any of the synthesized datasets in your work, please cite us:

LaTeX users can use the following BibTeX entry for citation:

@Article{g3,
  author  = {Luis A. Leiva and Daniel Martín-Albo and Réjean Plamondon},
  title   = {Gestures à Go Go: Authoring Synthetic Human-like Stroke Gestures Using the Kinematic Theory of Rapid Movements},
  journal = {ACM Transactions on Intelligent Systems and Technology},
  year    = {2015},
  volume  = {7},
  number  = {2},
}