如何实现内网语音识别

想实现不需要连公网的智能音箱系统。
求语音识别这块的实现思路。

步骤:
  1) 安装Speech SDK
  2) 安装后设置
  3) 编写程序

1、安装Speech SDK
  本例以Speech SDK 5.1为例,需要安装两个文件SpeechSDK51和SpeechSDK51LangPack。
  下载地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=5e86ec97-40a7-453f-b0ee-6583171b4530&displaylang=en

2、安装后设置
  安装好后,进入“控制面板”—>“语音”,在“文字-语音转换”标签页中将“语音选择”选成“Microsoft Simplified Chinese”。

3、编写程序
  因Speech SDK在Asp.net无法像Winform一样直接使用,不过可以通过ActiveX的方式来实现。 实现方法是在aspx源码编写下边代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>

<script type="text/javascript">
//创建 Sapi SpVoice 对象
var VoiceObj =new ActiveXObject("Sapi.SpVoice");

//将文本读出来
function ReadVoice() {
var voice = document.getElementById("txtVoice").value;
VoiceObj.Speak(voice, 1);
returnfalse;
}
</script>

</head>
<body>
<form id="form1" runat="server">
<div>
<%--将要被读的文本--%>
<input id="txtVoice" type="text"/>
<br />
<%--读 按钮--%>
<input id="btnRead" type="button" value="读" onclick="return ReadVoice()"/>
</div>
</form>
</body>
</html>

  运行,在文本框中输入中文,点“读”就将文本就读出来了。

注:
  1)如果在运行后,出现“Microsoft JScript 运行时错误: Automation 服务器不能创建对象”错误。请在,IE的“工具”->“Internet 选项”->“本地Internet”->“自定义级别”->"本地Intranet"内“对未标记为可安全执行脚步本的ActiveX控件初始化并执行脚本”这一项设置为“启用”。
  如果你发布到其它机器运行,需要在“Internet 选项”->“Internet”中设置这一项。
  2)在“开始菜单”中“Microsoft Speech SDK 5.1”中有“Microsoft Speech SDK 5.1 Help”帮助文档。如果需配置,可以参考此文档。
  3)在Microsoft Speech SDK 5.1的安装目录下,有个“Samples”文件夹,里边提供了一些示例,可以参考。

可以和服务商谈 私有化部署,在你们内网部一个语音的服务

可以搭建一个开源的语音识别,看一下这个文档的
https://blog.csdn.net/qq_34049877/article/details/108809651?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165006828116781683942578%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165006828116781683942578&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-108809651.142^v9^pc_search_result_control_group,157^v4^control&utm_term=Kaldi%E6%90%AD%E5%BB%BA&spm=1018.2226.3001.4187

可以找找第三方的离线包

个人建议是可以用开源的语音识别引擎
如果想自己搞,下面这篇论文应该能帮到你
https://wenku.so.com/d/fbf39393066f32bdf188704d6c8458f4
望采纳哦

这种内网的项目只能搞一些别人公网的离线的低版本放到内网操作,然后在此基础上开发维护,确保安全策略能通过

语音识别正常也不要联网,联网是因为识别之后需要去处理。
题主的意思是不是,你说一句话,将你说的这句话转化成文字?

通过底层算法实现太难了。别人的代码也很难搞得到。有没有实在些的方法?

语音识别这些都是通过深度学习实现的,如果你能自己训练最好,这样能可以选择你需要识别的语音进行训练,这样识别准确率高,如果不想自己训练的话,就找第三方别人训练好的吧,这种一般都是普通话的正常识别,有一定的错误率,你直接下载别人训练好的模型,直接调用进行识别就好了

声纹识别吗?这一块的实现思路一般都是通过深度学习来实现的,将声纹转化为图像提取特征与数据库内的进行比对,比对后打分预测是谁的声纹

img

百度的你试试

参考论文:

可以下载一个开源的或者第三方的语音识别离线安装包,然后集成到项目中,或者自己搭建一个本地语音识别系统,自己调用

建议采用第三方库来实现,自己做不太现实。仅仅解决内网问题底层开发未免代价太大。

github有很多现成的项目,并且有不少是比较成熟的,你可以自己训练一个,比如:https://github.com/nl8590687/ASRT_SpeechRecognition
https://github.com/yeyupiaoling/PPASR

img

img

img

什么?你没有显卡?
那你准备好数据,去网吧,找一台3080或者3090的电脑应该不难吧,搭配环境,顺便通个宵。完事儿后,把模型保存下来,就可以了。另外,上面网站也有部署到web上的介绍,你可以部署到自己的电脑或者服务器上,甚至手机上都是可以的。

我看了一下,准确度也是相对可以的,你可以动起手来了。

如有帮助,请采纳,多谢!

自己训练一个模型

端到端的语音识别
传统的机器学习中,往往包含多个独立的模块。以NLP问题举例——包括分词、标注、分析句法和语义等部分。每一个模块的输出好坏会影响下一个结果,从而影响整个训练的结果,这是非端到端;
而在E2E只分为输入端的语音特征和输出端的文本信息。输入经过一个 RNN 生成一个向量(这一步类似计算 sentence embedding),之后用另一个 RNN ,从向量中解码出我们需要的文本信息;第一个过程称之为 encoding,第二个过程称之为 decoding,整个模型不需要词对齐,不需要额外的语言模型。这就是端到端;
E2E将传统语音识别系统的三大部分——发音词典、声学模型和语言模型,被融合为一个E2E模型,直接实现输入语音的文本化;
Encoder-Decoder 模型虽然在结构上很简单且大部分序列到序列的预测问题,都可以使用该模型,这个序列甚至没有必要是语音,图像或者文字同样适用。
E2E模型通常包含以下的具体模型:

CTC:主要负责声学模型的训练(补充,引用微软亚洲研究院的资料,CTC是最早的端到端ASR模型);
RNN-T:为了联合优化声学模型与语言模型,由于RNN-T是针对每帧输入特征进行预测输出,即不用等语音全部说完再出结果,因此可应用于流识别,特别是在嵌入式设备。
Attention:主要负责声学部分训练;
Transformer:并行计算的特征提取器(主要可用于提取声学特征)。
由于接下来的ESPNet模型中,主要使用了CTC和Attention来进行训练和解码,所以我会主要介绍这两部分:

1、CTC(连接时序分类)
CTC算法全称叫:Connectionist temporal classification。顾名思义,是用来解决时序类数据的分类问题。在训练声学模型的时候,能够自动对齐输出标签和输入序列,不再像DNN-HMM模型那样需要对齐标注。
标注对齐与传统声学模型训练:

传统语音识别的声学模型训练,对于每一帧,需要知道对应的label才能进行有效的训练。而且,在训练数据之前需要做语音对齐的预处理,而对齐的过程需要进行反复多次的迭代,来确保对齐更准确,是一个比较耗时的工作;
不对数据进行调整处理,那就意味着不能用一些简单方法进行训练,所以必须进行标注对齐操作;
举例什么是对齐标注:如果我的发音为“你好”,第1,2,3,4帧对应n的发音,第5,6,7帧对应i的音素,第8,9帧对应h的音素,第10,11帧对应a的音素,第12帧对应o的音素。如图所示:

img


使用CTC训练声学模型:

与传统的声学模型相比,CTC可让网络自动学会对齐,适合语音识别和书写识别等任务;
至于有关于CTC具体的原理,毕竟本文是介绍ESPNet的文章,同时CTC中涉及损失函数、前向后向算法等大量数学内容。篇幅有限,我在这里就不阐述了。
总而言之,CTC最核心的特点是:

CTC中的前向后向算法可以令输出序列和输入序列自动按时间顺序对齐;
但缺点是,为了提高效率,CTC做出了重要的独立性假设——不同帧的网络输出有条件地独立。同时从CTC模型中获得良好的性能,往往还需要使用外部语言模型;
它和接下来介绍的Attention模型各有优点,最终会相互结合,并被ESPNet所使用。

img


2、Attention(注意力机制)
在介绍Attention之前,要简单介绍一下Encoder-Decoder,它是 NLP 领域里的一种模型框架(而不是特质某一类算法/模型),被广泛用于机器翻译、语音识别等领域。

Encoder是将输入的音频,转化为向量,方便之后的数学计算;
Decoder是将数学化的数据,最终输出为我们最终的ASR目标——文字。

img


Attention模型:

而Attention 模型的特点是 Eecoder 不再将整个输入序列编码为固定长度的中间向量 ,而是编码成多个向量(或者说一个向量的序列),并为不同的向量根据实际需要赋予不同的权重,以此来影响输出结果;
当然,以上Encoder和Decoder是为了引出Attention,Attention本身并不一定要在 Encoder-Decoder 框架下使用的,他是可以脱离 Encoder-Decoder 框架的。

img


3、Attention与CTC
首先这两个模型负责的都是声学部分的训练,和语言模型没有关系;
相比于CTC模型,Attention模型的对齐关系没有先后顺序的限制,完全靠数据驱动得到;
因此CTC和Attention模型各有优势,可把两者结合来,构建Hybrid CTC/Attention模型,采用多任务学习,通过CTC避免对齐关系过于随机,以加快训练流程。
ESPNet
介绍了很多基础知识,终于要讲到今天的正题——ESPNet了:

ESPNet是一套基于E2E的开源工具包,可进行语音识别等任务。从另一个角度来说,ESPNet和HTK、Kaldi是一个性质的东西,都是开源的NLP工具;
引用论文作者的话:ESPnet[1]是基于一个基于Attention的编码器-解码器网络,另包含部分CTC组件;
个人理解:在ESPNet出现之前,已经出现了CTC、Transformer等端到端ASR模型,ESPNet以这两种模型为核心,将这两个模型串了起来,利用二者优点,并外加了Kaldi等数据准备、特征提取的工具,最终封装成一个ASR的工具包,命名为ESPNet。
1、ESPNet 架构
ESPNet中使用了ATT+CTC的架构,其可分为两大部分[2]:

1、Shared encoder(共享编码器):

包括了VGG卷积网络和BLSTM(双向长短时记忆网络)层,来完成语音到向量的转化。
2、Joint Decoder(联合解码器):

联合解码器实现向量到最终文本结果的输出;
联合解码器包括CTC(负责标签和序列的自动对齐)、Attention(为不同序列赋予不同权重)和RNN-LM(语言模型,生成最优字词句);
其中CTC和Attention二者共同使用一个Loss来使模型收敛,最终的损失函数LossMTL为CTC损失

img


函数和Attention损失函数的加权求和
联合解码中,使用one-pass beam search(剪枝搜索)方法来消除不规则的序列与标签的对齐。

img


2、ESPNet 实现ASR的具体流程

img


数据准备:下载数据与解压缩数据;
特征提取:使用Kaldi(Kaldi也是个开源ASR工具)来提取语音特征,输出为80维的FBank特征,加上3维的pitch特征,总共83维。然后进行均值归一化,让网络更容易对语音特征进行学习;
转换数据格式:将中间数据转化为JSON格式;
语言模型的训练:语言模型使用的RNN-LM模型,其中RNN-LM训练有无字的字符序列水平知识。尽管注意解码器暗含像等式中一样包含语言模型。 RNN-LM概率用于与解码器网络一起预测输出标签。基于注意力的解码器会先学会使用LM。此外,RNN-LM可以与编码器一起训练解码器网络
声学模型的训练:使用字典、训练集和测试集,基于CTC模型、Attention的架构和Transformer的解码器进行声学部分的训练;
识别与打分:联合Transformer模型、CTC模型和RNN语言模型进行打分:

img


img