C# 使用 WhisperNet 实现语音识别功能

453 阅读4分钟

前言

最近想做一下本地音频语音识别工具,在网上找了一些本地音频语音识别方面的资料。

Whisper 是 OpenAI 的一种自动最先进的语音识别系统,它已经接受了 680000 小时从网络收集的多语言和多任务监督数据的训练。

这个庞大而多样化的数据集提高了对口音、背景噪音和技术语言的鲁棒性

此外,它还支持多种语言的转录,以及将这些语言翻译成英语。与 DALLE-2 和 GPT-3 不同,Whisper 是一种免费的开源模型

Whisper的优势是开源免费、支持多语种(包括中文),根据不同的场景需求有不同模型可供选择,最终的效果比市面上很多音频转文字的效果都要好。

Whisper提供了五种型号尺寸,其中四种为纯英文版本,提供速度和准确性的权衡。

以下是可用型号的名称及其大致的内存要求和相对速度。

Whisper 的性能因语言而异。

下图显示了使用该模型的 Fleurs 数据集按语言的 WER(单词错误率)细分large-v2(数字越小,性能越好)。

中文为14.7%

下载地址

源码下载地址

github.com/Const-me/Wh…

模型下载地址

huggingface.co/sandrohanea…

程序实现

下面将贴出实现该程序的关键代码。

private async void buttonAsr_Click(object sender, EventArgs e)
{
    string[] list = Library.listGraphicAdapters();
    CommandLineArgs cla = new CommandLineArgs();
    cla.language = eLanguage.Chinese;
    cla.gpu = textGpu.Text;
    cla.model = textModel.Text;
    cla.fileName = textFile.Text;
    cla.prompt = "这是一段播客的内容。";
    cla.output_srt = true;

    using iModel model = await Library.loadModelAsync(cla.model, new CancellationToken(), eGpuModelFlags.Cloneable, cla.gpu);
    int[]? prompt = null;
    if (!string.IsNullOrEmpty(cla.prompt)) prompt = model.tokenize(cla.prompt);

    context = model.createContext();
    cla.apply(ref context.parameters);
    context.parameters.setFlag(eFullParamsFlags.NoContext, true);
    using iMediaFoundation mf = Library.initMediaFoundation();
    Transcribe transcribe = new Transcribe(cla);
    using iAudioReader reader = mf.openAudioFile(cla.fileName, cla.diarize);
    await context.runFullAsync(reader, transcribe, UpdateProgress, prompt);
}
private void UpdateProgress(double value)
{
    int pValue = (int)Math.Round(value, 2) * 100;
    progress.Value = pValue;
    foreach (sSegment seg in context.results(eResultFlags.Timestamps).segments)
    {
        string begin = Transcribe.printTimeWithComma(seg.time.begin);
        string end = Transcribe.printTimeWithComma(seg.time.end);
        string msg = string.Format("【{0} --> {1}】 {2}\r\n", begin, end, seg.text);
        if (!FindMsg(msg)) rtextMsg.AppendText(msg);
    }
    rtextMsg.Select(rtextMsg.Text.Length, 0);
    rtextMsg.ScrollToCaret();
}

程序界面

功能

本地音频语音识别。

程序中包含WhisperDesktop.exe

下载地址

pan.baidu.com/s/1dfCLtXde…

模型地址

pan.baidu.com/s/1kYfuRYJg…

源码地址

pan.baidu.com/s/1O1iegWMN…

总结

WhisperNet 是一个轻量级、高性能的语音识别库,为 C# 开发设计。它支持多种音频格式,并提供了丰富的 API 用于处理语音数据。该库基于先进的机器学习模型,能够实现实时和离线语音识别,具有高准确率和低延迟的特点。

通过本文的详细介绍,应该掌握了如何使用 WhisperNet 在 C# 中实现高效且可靠的语音识别功能。

只有对写程序充满热情,才能写出好的程序!

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!

作者:小熊吉米

出处:cnblogs.com/zhangwc/p/17979462

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!