Flutter plugin for Vosk speech recognition.
Android | iOS | MacOS | Web | Linux | Windows |
---|---|---|---|---|---|
✔ | ➖ | ➖ | ➖ | ✔ | ✔ |
Follow the instruction at the Installing page of the package.
Add this pro guard rules in android/app/proguard-rules.pro
(if the file does not exist - create it):
-keep class com.sun.jna.* { *; }
-keepclassmembers class * extends com.sun.jna.* { public *; }
If you want to use a microphone input, add the microphone permission to your AndroidManifest.xml
:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
flutter:
assets:
- assets/models/
final vosk = VoskFlutterPlugin.instance();
final enSmallModelPath = await ModelLoader()
.loadFromAssets('assets/models/vosk-model-small-en-us-0.15.zip');
final recognizer = await vosk.createRecognizer(
model: model,
sampleRate: sampleRate,
);
final recognizerWithGrammar = await vosk.createRecognizer(
model: model,
sampleRate: sampleRate,
grammar: ['one', 'two', 'three'],
);
Uint8List audioBytes = ...; // audio data in PCM 16-bit mono format
List<String> results = [];
int chunkSize = 8192;
int pos = 0;
while (pos + chunkSize < audioBytes.length) {
final resultReady = await recognizer.acceptWaveformBytes(
Uint8List.fromList(audioBytes.getRange(pos, pos + chunkSize).toList()));
pos += chunkSize;
if (resultReady) {
print(await recognizer.getResult());
} else {
print(await recognizer.getPartialResult());
}
}
await recognizer.acceptWaveformBytes(
Uint8List.fromList(audioBytes.getRange(pos, audioBytes.length).toList()));
print(await recognizer.getFinalResult());
final speechService = await vosk.initSpeechService(recognizer);
speechService.onPartial().forEach((partial) => print(partial));
speechService.onResult().forEach((result) => print(result));
await speechService.start();
Use any suitable plugin to get the microphone input and pass it to a recognizer