Хочу создать голосовой ассистент на c# с использованием vosk. Протестировал код на офиц. гитхабе, но проблема в том что он распознает только некоторые слова. И как можно улучшить качество распознавания?
Модели:
vosk-model-ru-0.42
vosk-model-en-us-0.22
vosk-model-spk-0.4
using System;
using System.IO;
using Vosk;
public class VoskDemo
{
public static void DemoBytes(Model model)
{
// Demo byte buffer
VoskRecognizer rec = new VoskRecognizer(model, 16000.0f);
rec.SetMaxAlternatives(0);
rec.SetWords(true);
using (Stream source = File.OpenRead(@"C:\Users\123\Downloads\test2.wav"))
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
{
if (rec.AcceptWaveform(buffer, bytesRead))
{
Console.WriteLine(rec.Result());
}
else
{
Console.WriteLine(rec.PartialResult());
}
}
}
Console.WriteLine($"Final Text: {rec.FinalResult()}");
}
public static void DemoFloats(Model model)
{
// Demo float array
VoskRecognizer rec = new VoskRecognizer(model, 16000.0f);
using (Stream source = File.OpenRead(@"C:\Users\123\Downloads\test2.wav"))
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
{
float[] fbuffer = new float[bytesRead / 2];
for (int i = 0, n = 0; i < fbuffer.Length; i++, n += 2)
{
fbuffer[i] = BitConverter.ToInt16(buffer, n);
}
if (rec.AcceptWaveform(fbuffer, fbuffer.Length))
{
Console.WriteLine(rec.Result());
}
else
{
Console.WriteLine(rec.PartialResult());
}
}
}
Console.WriteLine($"Final Text: {rec.FinalResult()}");
}
public static void DemoSpeaker(Model model)
{
// Output speakers
SpkModel spkModel = new SpkModel(@"C:\Users\123\Downloads\vosk-model-spk-0.4\vosk-model-spk-0.4");
VoskRecognizer rec = new VoskRecognizer(model, 16000.0f);
rec.SetSpkModel(spkModel);
using (Stream source = File.OpenRead(@"C:\Users\123\Documents\test.wav"))
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
{
if (rec.AcceptWaveform(buffer, bytesRead))
{
Console.WriteLine(rec.Result());
}
else
{
Console.WriteLine(rec.PartialResult());
}
}
}
Console.WriteLine($"Final Text: {rec.FinalResult()}");
}
public static void Main()
{
// You can set to -1 to disable logging messages
Vosk.Vosk.SetLogLevel(0);
Model model = new Model(@"C:\Users\123\Downloads\vosk-model-en-us-0.22\vosk-model-en-us-0.22");
DemoBytes(model);
DemoFloats(model);
DemoSpeaker(model);
}
}