Voskで会話を文字起しする①
過去記事の「会話の間が空いたときに文字起しする」は、あまりいい結果を残せず実践で使ってません。Discordの音声受信もとん挫してしまっているので何とかせねばと思っていた矢先。
Voskというよさげなものがあるみたいなので早速Exsampleを実行してみました。
Alpha Cephei incのVoskのダウンロード:https://alphacephei.com/vosk/models
Japaneseを探して大きいのか小さいのか、お好きな方をダウンロード
Nuget情報
概要
VoskDemoのDemoBytesのみに編集。所定の場所にあるtest01.wavを読み込んで文字起しをする。
modelにはダウンロードしたzipを解凍した「vosk-model-ja-xxx」のディレクトリパスを設定する。
test01.wav
using Vosk;
public class VoskDemo
{
private static string wavPath = Environment.GetEnvironmentVariable("TESTDATA", System.EnvironmentVariableTarget.User) +"test01.wav";
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(wavPath))
{
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(rec.FinalResult());
}
public static void Main()
{
// You can set to -1 to disable logging messages
Vosk.Vosk.SetLogLevel(0);
Model model = new Model(Environment.GetEnvironmentVariable("LLMPATH", System.EnvironmentVariableTarget.User)+@"vosk\vosk-model-ja-0.22");
DemoBytes(model);
}
}
テスト結果
ちゃんと認識しているようです