one_dollar_unistroke_recognizer 0.2.0 copy "one_dollar_unistroke_recognizer: ^0.2.0" to clipboard
one_dollar_unistroke_recognizer: ^0.2.0 copied to clipboard

The $1 Unistroke Recognizer, a 2D single-stroke recognizer.

A Dart port of the $1 Unistroke Recognizer, with some additional features planned.

Pub

Usage #

Basic usage

List<Offset> points = [...];
RecognizedUnistroke? recognized = recognizeUnistroke(points);
if (recognized == null) {
  print('No match found');
} else {
  print('Stroke recognized as ${recognized.name}');
}

Protractor enhancement

The Protractor enhancement is enabled by default. You can disable it by setting useProtractor to false.

RecognizedUnistroke? recognized = recognizeUnistroke(
  points,
  useProtractor: false,
);

Using custom unistroke templates

You can recognize custom unistrokes by setting the referenceUnistrokes list.

Note that this will disable the default unistroke templates defined in default$1Unistrokes.

referenceUnistrokes = [
  Unistroke('circle', [...]),
  Unistroke('square', [...]),
  Unistroke('triangle', [...]),
  Unistroke('leaf', [...]),
];

RecognizedUnistroke? recognized = recognizeUnistroke(points);

Alternatively, you can temporarily override the referenceUnistrokes list for a single call to recognizeUnistroke by setting the overrideReferenceUnistrokes list.

RecognizedUnistroke? recognized = recognizeUnistroke(
  points,
  overrideReferenceUnistrokes: [...],
);

Planned features #

  • ✅ Allow recognizing custom unistrokes.
  • ❌ Create a subpackage containing a collection of unistrokes for common symbols.
  • ❌ Convert user's stroke into a perfect shape.

About the $1 Unistroke Recognizer #

The $1 Unistroke Recognizer is a 2-D single-stroke recognizer designed for rapid prototyping of gesture-based user interfaces. In machine learning terms, $1 is an instance-based nearest-neighbor classifier with a 2-D Euclidean distance function, i.e., a geometric template matcher. $1 is a significant extension of the proportional shape matching approach used in SHARK2, which itself is an adaptation of Tappert's elastic matching approach with zero look-ahead. Despite its simplicity, $1 requires very few templates to perform well and is only about 100 lines of code, making it easy to deploy. An optional enhancement called Protractor improves $1's speed.

You can read more about the $1 Unistroke Recognizer at depts.washington.edu/acelab/proj/dollar.

This Dart package is a port of the JavaScript version of the $1 Unistroke Recognizer, which you can find at depts.washington.edu/acelab/proj/dollar/dollar.js.