commit 6a8e9cfd4fb40ba304940f8a10d1c1bf60356711 Author: KeksNino Date: Wed Jul 29 03:23:08 2026 +0200 Initial Commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3a447bf --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +*.wav diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..8902fcb --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,155 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "speech-detection" +version = "0.1.0" +dependencies = [ + "vosk", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "vosk" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae9e2a552b3fb49f097849cfed3d4a2a7163bb7ea507268666980605a676c627" +dependencies = [ + "serde", + "serde_json", + "thiserror", + "vosk-sys", +] + +[[package]] +name = "vosk-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab2937e19c7d32c1a077a4a220011cbbb2b6ab83bb35635ffb65a82b7e43f6" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..b0af471 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "speech-detection" +version = "0.1.0" +edition = "2024" + +[dependencies] +vosk = "0.3.1" diff --git a/README.md b/README.md new file mode 100644 index 0000000..c291f3e --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Simple offline speech-detection to do voice commands diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..0f417cb --- /dev/null +++ b/build.rs @@ -0,0 +1,13 @@ +use std::{env, path::PathBuf}; + +fn main() { + let root = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); + + println!( + "cargo:rustc-link-search=native={}", + root.join("vosk-linux-x86_64-0.3.45").display() + ); + println!("cargo:rustc-link-lib=dylib=vosk"); + + println!("cargo:rerun-if-changed=vosk-linux-x86_64-0.3.45/vosk_api.h"); +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..6e9867c --- /dev/null +++ b/flake.lock @@ -0,0 +1,82 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1785141334, + "narHash": "sha256-kh35kIx7el4Jk8Ki3BH9/Pn1eZYSYLJ6LMALos0zOy0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "38a4887411571457d700c51c64a6e49ead2ed5ab", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay", + "utils": "utils" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1785216007, + "narHash": "sha256-KrGilCiFVxEQOaBD3TODhklZzE7uICQvqsBWgycIABA=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "8ec8a5a41f8d8244e672829c9cd705416139d3f0", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..4ac27ac --- /dev/null +++ b/flake.nix @@ -0,0 +1,65 @@ +{ + description = "Nix development flake for speech-detection"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixpkgs-unstable"; + utils.url = "github:numtide/flake-utils"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = + { + self, + nixpkgs, + utils, + rust-overlay, + ... + }: + + utils.lib.eachDefaultSystem ( + system: + let + overlays = [ (import rust-overlay) ]; + pkgs = import nixpkgs { + inherit system overlays; + }; + rust = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; + + libPath = + with pkgs; + lib.makeLibraryPath [ + gcc.cc.lib + ]; + + in + { + devShells = { + default = + with pkgs; + mkShell { + buildInputs = [ + rust + cargo-nextest + fish + pkg-config + fontconfig + stdenv.cc.cc.lib + ]; + + env.RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}"; + LD_LIBRARY_PATH = "$LD_LIBRARY_PATH:${libPath}"; + + shellHook = '' + echo Entered Rust dev shell for project speech-detection + export LIBC_PATH=${pkgs.stdenv.cc.cc.lib}/lib/ + exec fish -C "set -ax LD_LIBRARY_PATH $PWD/vosk-linux-x86_64-0.3.45" + ''; + }; + }; + } + ); + +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..e37dc8b --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,9 @@ +[toolchain] +channel = "nightly" +components = [ + "clippy", + "rustfmt", + "rust-analyzer", + "rust-src", + "rustc-codegen-cranelift", +] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..8056130 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,20 @@ +use vosk::{Model, Recognizer}; + +fn main() { + let samples = [100, -2, 700, 30, 4, 5]; + let model_path = "./vosk-model-small-en-us-0.15"; + + let model = Model::new(model_path).unwrap(); + let mut recognizer = Recognizer::new(&model, 16000.0).unwrap(); + + recognizer.set_max_alternatives(10); + recognizer.set_words(true); + recognizer.set_partial_words(true); + + for sample in samples.chunks(100) { + let _ = recognizer.accept_waveform(sample); + println!("{:#?}", recognizer.partial_result()); + } + + println!("{:#?}", recognizer.final_result().multiple().unwrap()); +} diff --git a/vosk-linux-x86_64-0.3.45/libvosk.so b/vosk-linux-x86_64-0.3.45/libvosk.so new file mode 100755 index 0000000..feb019f Binary files /dev/null and b/vosk-linux-x86_64-0.3.45/libvosk.so differ diff --git a/vosk-linux-x86_64-0.3.45/vosk_api.h b/vosk-linux-x86_64-0.3.45/vosk_api.h new file mode 100644 index 0000000..9816019 --- /dev/null +++ b/vosk-linux-x86_64-0.3.45/vosk_api.h @@ -0,0 +1,361 @@ +// Copyright 2020-2021 Alpha Cephei Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* This header contains the C API for Vosk speech recognition system */ + +#ifndef VOSK_API_H +#define VOSK_API_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** Model stores all the data required for recognition + * it contains static data and can be shared across processing + * threads. */ +typedef struct VoskModel VoskModel; + + +/** Speaker model is the same as model but contains the data + * for speaker identification. */ +typedef struct VoskSpkModel VoskSpkModel; + + +/** Recognizer object is the main object which processes data. + * Each recognizer usually runs in own thread and takes audio as input. + * Once audio is processed recognizer returns JSON object as a string + * which represent decoded information - words, confidences, times, n-best lists, + * speaker information and so on */ +typedef struct VoskRecognizer VoskRecognizer; + + +/** + * Batch model object + */ +typedef struct VoskBatchModel VoskBatchModel; + +/** + * Batch recognizer object + */ +typedef struct VoskBatchRecognizer VoskBatchRecognizer; + + +/** Loads model data from the file and returns the model object + * + * @param model_path: the path of the model on the filesystem + * @returns model object or NULL if problem occured */ +VoskModel *vosk_model_new(const char *model_path); + + +/** Releases the model memory + * + * The model object is reference-counted so if some recognizer + * depends on this model, model might still stay alive. When + * last recognizer is released, model will be released too. */ +void vosk_model_free(VoskModel *model); + + +/** Check if a word can be recognized by the model + * @param word: the word + * @returns the word symbol if @param word exists inside the model + * or -1 otherwise. + * Reminding that word symbol 0 is for */ +int vosk_model_find_word(VoskModel *model, const char *word); + + +/** Loads speaker model data from the file and returns the model object + * + * @param model_path: the path of the model on the filesystem + * @returns model object or NULL if problem occured */ +VoskSpkModel *vosk_spk_model_new(const char *model_path); + + +/** Releases the model memory + * + * The model object is reference-counted so if some recognizer + * depends on this model, model might still stay alive. When + * last recognizer is released, model will be released too. */ +void vosk_spk_model_free(VoskSpkModel *model); + +/** Creates the recognizer object + * + * The recognizers process the speech and return text using shared model data + * @param model VoskModel containing static data for recognizer. Model can be + * shared across recognizers, even running in different threads. + * @param sample_rate The sample rate of the audio you going to feed into the recognizer. + * Make sure this rate matches the audio content, it is a common + * issue causing accuracy problems. + * @returns recognizer object or NULL if problem occured */ +VoskRecognizer *vosk_recognizer_new(VoskModel *model, float sample_rate); + + +/** Creates the recognizer object with speaker recognition + * + * With the speaker recognition mode the recognizer not just recognize + * text but also return speaker vectors one can use for speaker identification + * + * @param model VoskModel containing static data for recognizer. Model can be + * shared across recognizers, even running in different threads. + * @param sample_rate The sample rate of the audio you going to feed into the recognizer. + * Make sure this rate matches the audio content, it is a common + * issue causing accuracy problems. + * @param spk_model speaker model for speaker identification + * @returns recognizer object or NULL if problem occured */ +VoskRecognizer *vosk_recognizer_new_spk(VoskModel *model, float sample_rate, VoskSpkModel *spk_model); + + +/** Creates the recognizer object with the phrase list + * + * Sometimes when you want to improve recognition accuracy and when you don't need + * to recognize large vocabulary you can specify a list of phrases to recognize. This + * will improve recognizer speed and accuracy but might return [unk] if user said + * something different. + * + * Only recognizers with lookahead models support this type of quick configuration. + * Precompiled HCLG graph models are not supported. + * + * @param model VoskModel containing static data for recognizer. Model can be + * shared across recognizers, even running in different threads. + * @param sample_rate The sample rate of the audio you going to feed into the recognizer. + * Make sure this rate matches the audio content, it is a common + * issue causing accuracy problems. + * @param grammar The string with the list of phrases to recognize as JSON array of strings, + * for example "["one two three four five", "[unk]"]". + * + * @returns recognizer object or NULL if problem occured */ +VoskRecognizer *vosk_recognizer_new_grm(VoskModel *model, float sample_rate, const char *grammar); + + +/** Adds speaker model to already initialized recognizer + * + * Can add speaker recognition model to already created recognizer. Helps to initialize + * speaker recognition for grammar-based recognizer. + * + * @param spk_model Speaker recognition model */ +void vosk_recognizer_set_spk_model(VoskRecognizer *recognizer, VoskSpkModel *spk_model); + + +/** Reconfigures recognizer to use grammar + * + * @param recognizer Already running VoskRecognizer + * @param grammar Set of phrases in JSON array of strings or "[]" to use default model graph. + * See also vosk_recognizer_new_grm + */ +void vosk_recognizer_set_grm(VoskRecognizer *recognizer, char const *grammar); + + +/** Configures recognizer to output n-best results + * + *
+ *   {
+ *      "alternatives": [
+ *          { "text": "one two three four five", "confidence": 0.97 },
+ *          { "text": "one two three for five", "confidence": 0.03 },
+ *      ]
+ *   }
+ * 
+ * + * @param max_alternatives - maximum alternatives to return from recognition results + */ +void vosk_recognizer_set_max_alternatives(VoskRecognizer *recognizer, int max_alternatives); + + +/** Enables words with times in the output + * + *
+ *   "result" : [{
+ *       "conf" : 1.000000,
+ *       "end" : 1.110000,
+ *       "start" : 0.870000,
+ *       "word" : "what"
+ *     }, {
+ *       "conf" : 1.000000,
+ *       "end" : 1.530000,
+ *       "start" : 1.110000,
+ *       "word" : "zero"
+ *     }, {
+ *       "conf" : 1.000000,
+ *       "end" : 1.950000,
+ *       "start" : 1.530000,
+ *       "word" : "zero"
+ *     }, {
+ *       "conf" : 1.000000,
+ *       "end" : 2.340000,
+ *       "start" : 1.950000,
+ *       "word" : "zero"
+ *     }, {
+ *       "conf" : 1.000000,
+ *       "end" : 2.610000,
+ *       "start" : 2.340000,
+ *       "word" : "one"
+ *     }],
+ * 
+ * + * @param words - boolean value + */ +void vosk_recognizer_set_words(VoskRecognizer *recognizer, int words); + +/** Like above return words and confidences in partial results + * + * @param partial_words - boolean value + */ +void vosk_recognizer_set_partial_words(VoskRecognizer *recognizer, int partial_words); + +/** Set NLSML output + * @param nlsml - boolean value + */ +void vosk_recognizer_set_nlsml(VoskRecognizer *recognizer, int nlsml); + + +/** Accept voice data + * + * accept and process new chunk of voice data + * + * @param data - audio data in PCM 16-bit mono format + * @param length - length of the audio data + * @returns 1 if silence is occured and you can retrieve a new utterance with result method + * 0 if decoding continues + * -1 if exception occured */ +int vosk_recognizer_accept_waveform(VoskRecognizer *recognizer, const char *data, int length); + + +/** Same as above but the version with the short data for language bindings where you have + * audio as array of shorts */ +int vosk_recognizer_accept_waveform_s(VoskRecognizer *recognizer, const short *data, int length); + + +/** Same as above but the version with the float data for language bindings where you have + * audio as array of floats */ +int vosk_recognizer_accept_waveform_f(VoskRecognizer *recognizer, const float *data, int length); + + +/** Returns speech recognition result + * + * @returns the result in JSON format which contains decoded line, decoded + * words, times in seconds and confidences. You can parse this result + * with any json parser + * + *
+ *  {
+ *    "text" : "what zero zero zero one"
+ *  }
+ * 
+ * + * If alternatives enabled it returns result with alternatives, see also vosk_recognizer_set_max_alternatives(). + * + * If word times enabled returns word time, see also vosk_recognizer_set_word_times(). + */ +const char *vosk_recognizer_result(VoskRecognizer *recognizer); + + +/** Returns partial speech recognition + * + * @returns partial speech recognition text which is not yet finalized. + * result may change as recognizer process more data. + * + *
+ * {
+ *    "partial" : "cyril one eight zero"
+ * }
+ * 
+ */ +const char *vosk_recognizer_partial_result(VoskRecognizer *recognizer); + + +/** Returns speech recognition result. Same as result, but doesn't wait for silence + * You usually call it in the end of the stream to get final bits of audio. It + * flushes the feature pipeline, so all remaining audio chunks got processed. + * + * @returns speech result in JSON format. + */ +const char *vosk_recognizer_final_result(VoskRecognizer *recognizer); + + +/** Resets the recognizer + * + * Resets current results so the recognition can continue from scratch */ +void vosk_recognizer_reset(VoskRecognizer *recognizer); + + +/** Releases recognizer object + * + * Underlying model is also unreferenced and if needed released */ +void vosk_recognizer_free(VoskRecognizer *recognizer); + +/** Set log level for Kaldi messages + * + * @param log_level the level + * 0 - default value to print info and error messages but no debug + * less than 0 - don't print info messages + * greather than 0 - more verbose mode + */ +void vosk_set_log_level(int log_level); + +/** + * Init, automatically select a CUDA device and allow multithreading. + * Must be called once from the main thread. + * Has no effect if HAVE_CUDA flag is not set. + */ +void vosk_gpu_init(); + +/** + * Init CUDA device in a multi-threaded environment. + * Must be called for each thread. + * Has no effect if HAVE_CUDA flag is not set. + */ +void vosk_gpu_thread_init(); + +/** Creates the batch recognizer object + * + * @returns model object or NULL if problem occured */ +VoskBatchModel *vosk_batch_model_new(const char *model_path); + +/** Releases batch model object */ +void vosk_batch_model_free(VoskBatchModel *model); + +/** Wait for the processing */ +void vosk_batch_model_wait(VoskBatchModel *model); + +/** Creates batch recognizer object + * @returns recognizer object or NULL if problem occured */ +VoskBatchRecognizer *vosk_batch_recognizer_new(VoskBatchModel *model, float sample_rate); + +/** Releases batch recognizer object */ +void vosk_batch_recognizer_free(VoskBatchRecognizer *recognizer); + +/** Accept batch voice data */ +void vosk_batch_recognizer_accept_waveform(VoskBatchRecognizer *recognizer, const char *data, int length); + +/** Set NLSML output + * @param nlsml - boolean value + */ +void vosk_batch_recognizer_set_nlsml(VoskBatchRecognizer *recognizer, int nlsml); + +/** Closes the stream */ +void vosk_batch_recognizer_finish_stream(VoskBatchRecognizer *recognizer); + +/** Return results */ +const char *vosk_batch_recognizer_front_result(VoskBatchRecognizer *recognizer); + +/** Release and free first retrieved result */ +void vosk_batch_recognizer_pop(VoskBatchRecognizer *recognizer); + +/** Get amount of pending chunks for more intelligent waiting */ +int vosk_batch_recognizer_get_pending_chunks(VoskBatchRecognizer *recognizer); + +#ifdef __cplusplus +} +#endif + +#endif /* VOSK_API_H */ diff --git a/vosk-model-small-en-us-0.15/README b/vosk-model-small-en-us-0.15/README new file mode 100644 index 0000000..a7f7931 --- /dev/null +++ b/vosk-model-small-en-us-0.15/README @@ -0,0 +1,9 @@ +US English model for mobile Vosk applications + +Copyright 2020 Alpha Cephei Inc + +Accuracy: 10.38 (tedlium test) 9.85 (librispeech test-clean) +Speed: 0.11xRT (desktop) +Latency: 0.15s (right context) + + diff --git a/vosk-model-small-en-us-0.15/am/final.mdl b/vosk-model-small-en-us-0.15/am/final.mdl new file mode 100644 index 0000000..5596b31 Binary files /dev/null and b/vosk-model-small-en-us-0.15/am/final.mdl differ diff --git a/vosk-model-small-en-us-0.15/conf/mfcc.conf b/vosk-model-small-en-us-0.15/conf/mfcc.conf new file mode 100644 index 0000000..eaa40c5 --- /dev/null +++ b/vosk-model-small-en-us-0.15/conf/mfcc.conf @@ -0,0 +1,7 @@ +--sample-frequency=16000 +--use-energy=false +--num-mel-bins=40 +--num-ceps=40 +--low-freq=20 +--high-freq=7600 +--allow-downsample=true diff --git a/vosk-model-small-en-us-0.15/conf/model.conf b/vosk-model-small-en-us-0.15/conf/model.conf new file mode 100644 index 0000000..9d5b0da --- /dev/null +++ b/vosk-model-small-en-us-0.15/conf/model.conf @@ -0,0 +1,10 @@ +--min-active=200 +--max-active=3000 +--beam=10.0 +--lattice-beam=2.0 +--acoustic-scale=1.0 +--frame-subsampling-factor=3 +--endpoint.silence-phones=1:2:3:4:5:6:7:8:9:10 +--endpoint.rule2.min-trailing-silence=0.5 +--endpoint.rule3.min-trailing-silence=0.75 +--endpoint.rule4.min-trailing-silence=1.0 diff --git a/vosk-model-small-en-us-0.15/graph/Gr.fst b/vosk-model-small-en-us-0.15/graph/Gr.fst new file mode 100644 index 0000000..1f292e6 Binary files /dev/null and b/vosk-model-small-en-us-0.15/graph/Gr.fst differ diff --git a/vosk-model-small-en-us-0.15/graph/HCLr.fst b/vosk-model-small-en-us-0.15/graph/HCLr.fst new file mode 100644 index 0000000..9797b26 Binary files /dev/null and b/vosk-model-small-en-us-0.15/graph/HCLr.fst differ diff --git a/vosk-model-small-en-us-0.15/graph/disambig_tid.int b/vosk-model-small-en-us-0.15/graph/disambig_tid.int new file mode 100644 index 0000000..762fd5f --- /dev/null +++ b/vosk-model-small-en-us-0.15/graph/disambig_tid.int @@ -0,0 +1,17 @@ +10015 +10016 +10017 +10018 +10019 +10020 +10021 +10022 +10023 +10024 +10025 +10026 +10027 +10028 +10029 +10030 +10031 diff --git a/vosk-model-small-en-us-0.15/graph/phones/word_boundary.int b/vosk-model-small-en-us-0.15/graph/phones/word_boundary.int new file mode 100644 index 0000000..df23fd7 --- /dev/null +++ b/vosk-model-small-en-us-0.15/graph/phones/word_boundary.int @@ -0,0 +1,166 @@ +1 nonword +2 begin +3 end +4 internal +5 singleton +6 nonword +7 begin +8 end +9 internal +10 singleton +11 begin +12 end +13 internal +14 singleton +15 begin +16 end +17 internal +18 singleton +19 begin +20 end +21 internal +22 singleton +23 begin +24 end +25 internal +26 singleton +27 begin +28 end +29 internal +30 singleton +31 begin +32 end +33 internal +34 singleton +35 begin +36 end +37 internal +38 singleton +39 begin +40 end +41 internal +42 singleton +43 begin +44 end +45 internal +46 singleton +47 begin +48 end +49 internal +50 singleton +51 begin +52 end +53 internal +54 singleton +55 begin +56 end +57 internal +58 singleton +59 begin +60 end +61 internal +62 singleton +63 begin +64 end +65 internal +66 singleton +67 begin +68 end +69 internal +70 singleton +71 begin +72 end +73 internal +74 singleton +75 begin +76 end +77 internal +78 singleton +79 begin +80 end +81 internal +82 singleton +83 begin +84 end +85 internal +86 singleton +87 begin +88 end +89 internal +90 singleton +91 begin +92 end +93 internal +94 singleton +95 begin +96 end +97 internal +98 singleton +99 begin +100 end +101 internal +102 singleton +103 begin +104 end +105 internal +106 singleton +107 begin +108 end +109 internal +110 singleton +111 begin +112 end +113 internal +114 singleton +115 begin +116 end +117 internal +118 singleton +119 begin +120 end +121 internal +122 singleton +123 begin +124 end +125 internal +126 singleton +127 begin +128 end +129 internal +130 singleton +131 begin +132 end +133 internal +134 singleton +135 begin +136 end +137 internal +138 singleton +139 begin +140 end +141 internal +142 singleton +143 begin +144 end +145 internal +146 singleton +147 begin +148 end +149 internal +150 singleton +151 begin +152 end +153 internal +154 singleton +155 begin +156 end +157 internal +158 singleton +159 begin +160 end +161 internal +162 singleton +163 begin +164 end +165 internal +166 singleton diff --git a/vosk-model-small-en-us-0.15/ivector/final.dubm b/vosk-model-small-en-us-0.15/ivector/final.dubm new file mode 100644 index 0000000..db789eb Binary files /dev/null and b/vosk-model-small-en-us-0.15/ivector/final.dubm differ diff --git a/vosk-model-small-en-us-0.15/ivector/final.ie b/vosk-model-small-en-us-0.15/ivector/final.ie new file mode 100644 index 0000000..93737bf Binary files /dev/null and b/vosk-model-small-en-us-0.15/ivector/final.ie differ diff --git a/vosk-model-small-en-us-0.15/ivector/final.mat b/vosk-model-small-en-us-0.15/ivector/final.mat new file mode 100644 index 0000000..c3ec635 Binary files /dev/null and b/vosk-model-small-en-us-0.15/ivector/final.mat differ diff --git a/vosk-model-small-en-us-0.15/ivector/global_cmvn.stats b/vosk-model-small-en-us-0.15/ivector/global_cmvn.stats new file mode 100644 index 0000000..b9d92ef --- /dev/null +++ b/vosk-model-small-en-us-0.15/ivector/global_cmvn.stats @@ -0,0 +1,3 @@ + [ + 1.682383e+11 -1.1595e+10 -1.521733e+10 4.32034e+09 -2.257938e+10 -1.969666e+10 -2.559265e+10 -1.535687e+10 -1.276854e+10 -4.494483e+09 -1.209085e+10 -5.64008e+09 -1.134847e+10 -3.419512e+09 -1.079542e+10 -4.145463e+09 -6.637486e+09 -1.11318e+09 -3.479773e+09 -1.245932e+08 -1.386961e+09 6.560655e+07 -2.436518e+08 -4.032432e+07 4.620046e+08 -7.714964e+07 9.551484e+08 -4.119761e+08 8.208582e+08 -7.117156e+08 7.457703e+08 -4.3106e+08 1.202726e+09 2.904036e+08 1.231931e+09 3.629848e+08 6.366939e+08 -4.586172e+08 -5.267629e+08 -3.507819e+08 1.679838e+09 + 1.741141e+13 8.92488e+11 8.743834e+11 8.848896e+11 1.190313e+12 1.160279e+12 1.300066e+12 1.005678e+12 9.39335e+11 8.089614e+11 7.927041e+11 6.882427e+11 6.444235e+11 5.151451e+11 4.825723e+11 3.210106e+11 2.720254e+11 1.772539e+11 1.248102e+11 6.691599e+10 3.599804e+10 1.207574e+10 1.679301e+09 4.594778e+08 5.821614e+09 1.451758e+10 2.55803e+10 3.43277e+10 4.245286e+10 4.784859e+10 4.988591e+10 4.925451e+10 5.074584e+10 4.9557e+10 4.407876e+10 3.421443e+10 3.138606e+10 2.539716e+10 1.948134e+10 1.381167e+10 0 ] diff --git a/vosk-model-small-en-us-0.15/ivector/online_cmvn.conf b/vosk-model-small-en-us-0.15/ivector/online_cmvn.conf new file mode 100644 index 0000000..7748a4a --- /dev/null +++ b/vosk-model-small-en-us-0.15/ivector/online_cmvn.conf @@ -0,0 +1 @@ +# configuration file for apply-cmvn-online, used in the script ../local/run_online_decoding.sh diff --git a/vosk-model-small-en-us-0.15/ivector/splice.conf b/vosk-model-small-en-us-0.15/ivector/splice.conf new file mode 100644 index 0000000..960cd2e --- /dev/null +++ b/vosk-model-small-en-us-0.15/ivector/splice.conf @@ -0,0 +1,2 @@ +--left-context=3 +--right-context=3