首页 > 编程语言 >C#使用WhisperNet实现语音识别功能

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

时间:2024-01-22 12:11:46浏览次数:22  
标签:context prompt WhisperNet C# Whisper cla 语音 model

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

1.写在前面

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

Whisper 是 OpenAI 的一种自动最先进的语音识别系统,它已经接受了 680000 小时从网络收集的多语言和多任务监督数据的训练。这个庞大而多样化的数据集提高了对口音、背景噪音和技术语言的鲁棒性。此外,它还支持多种语言的转录,以及将这些语言翻译成英语。与 DALLE-2 和 GPT-3 不同,Whisper 是一种免费的开源模型。 Whisper的优势是开源免费、支持多语种(包括中文),根据不同的场景需求有不同模型可供选择,最终的效果比市面上很多音频转文字的效果都要好。 Whisper提供了五种型号尺寸,其中四种为纯英文版本,提供速度和准确性的权衡。以下是可用型号的名称及其大致的内存要求和相对速度。

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

2.下载地址

源码下载地址:https://github.com/Const-me/Whisper

模型下载地址:https://huggingface.co/sandrohanea/whisper.net/tree/main/classic

3.程序实现

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

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);

    //using Context context = model.createContext();
    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);
}

4.程序界面

5.功能

本地音频语音识别。

程序中包含WhisperDesktop.exe
下载地址:https://pan.baidu.com/s/1c8r7HO2XvGocEuVIwdddpQ?pwd=6666   提取码:6666

标签:context,prompt,WhisperNet,C#,Whisper,cla,语音,model
From: https://www.cnblogs.com/zhangwc/p/17979462

相关文章

  • CF-461-B-树形DP
    461-B题目大意给定一棵\(n\)个节点的树,节点编号从\(0\)开始,每个节点要么为白色要么为黑色,你需要删除一些边,使得剩下的各个连通块中有且仅有一个黑色节点。问有多少种删边方案数,答案对\(10^9+1\)取模。Solution考虑树形DP,令\(dp[x][0/1]\)表示节点\(x\)属于无黑色节点/有黑色......
  • CryptoJS 加密 解密
    npmicrypto-js--save加密和解密的方式要对应,比如都是Base64、CBC、Pkcs7constCryptoJS=require('crypto-js');//引入crypto-jsvarstr=JSON.stringify({a:1,b:2})varkey='o9oSSaSHMp7KD9S485vx5oThWKKR7vVsCXAl26xBz9w='variv=&......
  • k8s_client-go 构建客户端的几种方式
    kubernetesclient-go构建客户端的几种方式packagecallk8simport( "context" "log" metav1"k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/t......
  • Centos 静态IP网卡格式
    TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="static"修改该项dhcp为staticIPADDR=192.168.1.129增加静态IP地址NETMASK=255.255.255.0子网掩码GATEWAY=192.168.1.1子网网关DNS1=114.114.114.114DNSDE......
  • Microsoft Sentinel Workbooks
     MicrosoftSentinelWorkbooks是一种在MicrosoftSentinel中用于可视化、分析和探索安全数据的工具。这些工作簿提供了灵活的方式来创建自定义仪表板,其中包含图表、图形和表格,用于显示和解释来自各种数据源的数据。它们是理解和响应安全威胁的重要资源。 举例说明假设你......
  • CF1920E 题解
    CF1920E被这种题卡了,脸都不要了。仔细读题,发现序列可以分成两部分(\(0\)和\(1\))来考虑。在合法序列中,对于一个\(1\),它产生的子串贡献一定是(假设与上一个\(1\)之间有\(x\)个\(0\),与下一个\(1\)之间有\(y\)个\(0\)):\[(x+1)(y+1)\]如果去DP这\(n\)个\(1\),易得转......
  • Microsoft Sentinel Notebooks作用
    MicrosoftSentinelNotebooks是基于Jupyter笔记本的高级工具,用于深入分析、研究和响应网络安全事件。它们结合了代码、数据可视化和文档,使安全分析师可以更灵活、更深入地处理安全数据和情报。SentinelNotebooks的作用数据探索和分析:使用Python(或其他支持的语言)对安全数......
  • JavaScript 中的展开运算符是什么?
    展开运算符(SpreadOperator)是JavaScript中的一种语法,用于将可迭代对象(如数组或字符串)展开为独立的元素。它使用三个连续的点号(...)作为操作符。展开运算符可以在多种情况下使用,包括数组、对象和函数调用等。下面是一些展开运算符的用法示例:1:展开数组:使用展开运算符可以将一......
  • RHCE(第二周用户管理
    一:初识用户和用户组一:用户用户:就是能够登录系统,获得系统中的资源。执行命令,每一个用户都有唯一的uid,系统识别的是uid,不是用户名1:linux中用户的分类超级管理员:root用户,拥有最高的权限uid为0普通用户:有一定的权限,可以通过root用户分配 用户的uid为1000到60000系统用户:不能......
  • CSP2023 游记
    2023.10.22前言平凡的。Day0写了几道对我来说比较需要码力的题(序列操作/轻重边),虽然没有效率。提前住过去了。Day1J随便打打,然而挂分了。S记录如下:看了\(15-20min\)题,决定B\(\to\)A\(\to\)C(可能暴力)\(\to\)D。\(25\)minBAC\(\to\)A\(10\)m......