one_dollar_unistroke_recognizer 0.2.0 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.
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.