Quick search

Gesture recognition

This class allows you to easily create new gestures and compare them:

from kivy.gesture import Gesture, GestureDatabase

# Create a gesture
g = Gesture()
g.add_stroke(point_list=[(1,1), (3,4), (2,1)])

# Add it to the database
gdb = GestureDatabase()

# And for the next gesture, try to find it!
g2 = Gesture()
# ...


You don’t really want to do this: it’s more of an example of how to construct gestures dynamically. Typically, you would need a lot more points, so it’s better to record gestures in a file and reload them to compare later. Look in the examples/gestures directory for an example of how to do that.

class kivy.gesture.Gesture(tolerance=None)[source]

Bases: builtins.object

A python implementation of a gesture recognition algorithm by Oleg Dopertchouk:

Implemented by Jeiel Aranal (, released into the public domain.


Adds a stroke to the gesture and returns the Stroke instance. Optional point_list argument is a list of the mouse points for the stroke.


Calculates the dot product of the gesture with another gesture.


Extract the rotation to apply to a group of points to minimize the distance to a second group of points. The two groups of points are assumed to be centered. This is a simple version that just picks an angle based on the first point of the gesture.

get_score(comparison_gesture, rotation_invariant=True)[source]

Returns the matching score of the gesture against another gesture.


Runs the gesture normalization algorithm and calculates the dot product with self.

class kivy.gesture.GestureDatabase[source]

Bases: builtins.object

Class to handle a gesture database.


Add a new gesture to the database.

find(gesture, minscore=0.9, rotation_invariant=True)[source]

Find a matching gesture in the database.


Convert a gesture into a unique string.


Convert a unique string to a gesture.

class kivy.gesture.GestureStroke[source]

Bases: builtins.object

Gestures can be made up of multiple strokes.

add_point(x=x_pos, y=y_pos)[source]

Adds a point to the stroke.

center_stroke(offset_x, offset_y)[source]

Centers the stroke by offsetting the points.


Normalizes strokes so that every stroke has a standard number of points. Returns True if stroke is normalized, False if it can’t be normalized. sample_points controls the resolution of the stroke.

points_distance(point1=GesturePoint, point2=GesturePoint)[source]

Returns the distance between two GesturePoints.


Scales the stroke down by scale_factor.


Finds the length of the stroke. If a point list is given, finds the length of that list.