This project is under active development and testing, api and model format are broken usually, consider rustpotter and all the related projects in beta until version 1.0.0 is published.
But don't hesitate to report any issues in the meantime.
This project allows to detect specific wake words on a live audio stream.
To do so it generates a set of features from some audio samples to later compare them with the features generated from the live stream, to calculate the probability of a match.
The features can be loaded from a previous generated model file or extracted from the samples before start the live streaming.
This web demo is available so you can quickly try out Rustpotter using a web browser
It includes some models generated using multiple voices from a text-to-speech service, you can also load your own ones.
This project uses wav, it works internally with the spec 48000hz 16 bit 1 channel int, but allows to configure the detector to work with other specs.
The detector configuration is ignored when adding a keyword with samples (add_wakeword
method) as the wav spec is read from each file header (so raw samples are not allowed).
All related packages use the version number of the rustpotter dependency (PATCH number could defer) so models generated with some version of the cli should work with other packages on the same version.
rust
let mut detector_builder = detector::FeatureDetectorBuilder::new();
let mut word_detector = detector_builder.build();
let name = String::from("hey home");
let path = String::from("./hey_home.rpw");
word_detector.add_wakeword(
name.clone(),
false,
None,
None,
vec!["./<audio sample path>.wav", "./<audio sample path>2.wav", ...],
);
match word_detector.create_wakeword_model(name.clone(), path) {
Ok(_) => {
println!("{} created!", name);
}
Err(message) => {
panic!(message);
}
};
```rust
let mut detectorbuilder = detector::FeatureDetectorBuilder::new();
detectorbuilder.setthreshold(0.4);
detectorbuilder.setsamplerate(16000);
let mut worddetector = detectorbuilder.build();
let result = worddetector.addwakewordfrommodel(command.modelpath, command.averagetemplates, true, None);
if result.iserr() {
panic!("Unable to load wakeword model");
}
while true {
let mut framebuffer: Vec
```
This project started as a port of the project node-personal-wakeword and uses the method described in this medium article.
The motivation behind this project is to learn about audio analysis and Rust. Also to have access to an open source personal wakeword spotter to use in other open projects.
Feel free to suggest any improvements or fixes.