2018-03-26 21:38:18 u012594175 阅读数 9342
  • Android开源项目实践之UI篇

    本课程主要展现了如何利用Android开源代码进行app的开发。例如: 1.异步网络请求(android-async-http); 2.百变圆形滚动条(ProgressWheel);3.滑动导航栏(PagerSlidingTabStrip);4.瀑布流与上拉刷新,下拉加载完美结合(PinterestLikeAdapterView)...

    21109 人正在学习 去看看 李忠义

声纹识别,也称为说话人识别,主要的开源工具有:

1.MSR Identity Toolkit ,微软开源的工具箱,MATLAB版本,包含GMM-UBM和I-vector的demo,简单易用。下载地址

2.Alize,主要包括GMM-UBM、I-vector and JFA三种传统的方法,C++版,简单易用。

3.kaldi,当下十分流行的语音识别工具包,也包括声纹识别:覆盖了主流的声纹识别算法(I-vector 、x-vector等),脚本语言,使用不易。

4.sidekit,Python工具包

声纹识别交流QQ群:875705987

2017-04-05 15:11:39 qq_38125123 阅读数 18217
  • Android开源项目实践之UI篇

    本课程主要展现了如何利用Android开源代码进行app的开发。例如: 1.异步网络请求(android-async-http); 2.百变圆形滚动条(ProgressWheel);3.滑动导航栏(PagerSlidingTabStrip);4.瀑布流与上拉刷新,下拉加载完美结合(PinterestLikeAdapterView)...

    21109 人正在学习 去看看 李忠义

1、概述

   通过微信小程序wx.startRecord()和wx.stopRecord()接口录音并上传silk录音文件至服务器,通过ffmpeg将silk录音文件转成wav录音文件,再通过百度语音识别 REST API 获取语音识别后的结果。

2、代码实现

   录音和语音文件上传


   node.js服务端接收语音文件代码

   silk文件转wav文件

   我使用的是silk-v3-decoder将silk文件转wav文件


silk-v3-decoder 使用方法


   百度语音识别 REST API识别wav文件

1、通过API Key和Secret Key获取的access_token


通过API Key和Secret Key获取的access_token文档


2、通过token 调用百度语音识别 REST API识别接口


3、语音识别优化

   通过上述操作后,发现识别的内容和实际内容差别很大


百度语音识别 REST API文档

   查看文档可知:采样率:8000/16000 仅支持单通道

   在ffmpeg里对应的设置方式分别是:

   -ar rate 设置采样率

   -ac channels 设置声道数

   修改converter.sh文件,修改为下图所示


修改后的converter.sh文件

2018-06-09 17:03:30 qq_23660243 阅读数 16932
  • Android开源项目实践之UI篇

    本课程主要展现了如何利用Android开源代码进行app的开发。例如: 1.异步网络请求(android-async-http); 2.百变圆形滚动条(ProgressWheel);3.滑动导航栏(PagerSlidingTabStrip);4.瀑布流与上拉刷新,下拉加载完美结合(PinterestLikeAdapterView)...

    21109 人正在学习 去看看 李忠义

最近准备开始进行语音识别算法的学习,所以决定拿kaldi进行解读,这样一方面更加增加自己C++的基本功,另一方面也可以让自己慢慢走入语音识别的大门,自己的路,决定了就走下去,不管有多难。

首先我决定从kaldi的官网入手,不多说进入主题。

kaldi是什么

kaldi是使用c++写的语音识别的工具,apache 授予了v2.0的证书(果真应验,apache旗下无弱将)。kaldi旨在供语音识别研究员使用。

kaldi的命名

据传说,kaldi是埃塞俄比亚人,他发现了咖啡。

kaldi相较于其他工具

kaldi在目标和范围上和HTK相似,目标是用c++写的现代灵活的代码易于修改和扩展。它包含以下重要特点:

  1. 与有限状态转换器的代码级集成(FSTs)。 【我们根据openFst工具包进行编译,将其用作库】
  2. 广泛的线性代数支持。【我们包含一个包装BLAS和LAPACK的矩阵库】
  3. 可扩展的设计。【尽可能的,我们以最通用的方式提供我们的算法。例如,我们的解码器在提供由(帧,fst-input-symbol)索引的分数的对象上进行模版化。这意味着解码器可以从任何合适的分数来源工作,例如神经网络。】
  4. 开放许可。【该代码在apache2.0下获得许可,这是限制最少的许可证之一】
  5. 完整的recipes。【我们的目标适用于构建语音识别系统的完整配方,从广泛使用的数据库(比如语言数据联合会提供的数据)开展工作。】

发布完整配方是kaldi的重要目标之一,由于代码在允许修改和重新发布的许可下公开获得,我们希望鼓励人们以kaldi自己的脚本类似的方式发布他们的代码以及脚本目录。

考虑到时间的限制,我们尽可能的使kaldi的文档尽可能的完整。但是在短时间内,我们不能希望自己生成与HTK一样全面的的文档。特别是在HTKbooks中有很多介绍性资料,为外行人解释统计语音识别,这可能永远都不会出现在kaldi的文档之中。kaldi的大部分文档是这样写的,只有专家才能访问它。在未来,我们希望能够使得它更加的容易访问,同时铭记我们的目标受众是语音识别研究人员和语音识别培训人员。总的来说,kaldi并不是一个傻瓜式的语音识别工具包。他可以让你做很多没有意义的操作(PS:最后这句说的很有意思,大家自行理解)。

The flavor of kaldi

在本节中,我们试图总结kaldi工具包一些更加通用的特性。在某种程度上,他描述了当前开发人员的目标或者说当前项目的状态。这并不意味着排除不同风格的研究人员。

  1. 我们强调通用的算法和通用的组合配方。【我们说通用算法指的是像线性变换那样的东西,而不是专属于语音的内容。但是如果更具体的算法是有用的,我们不会那么教条。我们希望可以在任意数据集上运行的配方,而不是定制的数据集的配方。】
  2. 我们更喜欢证明正确的算法。【配方的设计原则是他们绝不会以灾难性的方式失败,一直在避免可能失败的配方和算法,即使他们在正常情况下没有失败。】
  3. kaldi的代码是经过全面测试的。【目标是让所有或几乎所有的代码都具有测试例程。】
  4. 我们尽量使简单的情况简单化。【在构造一个大型的语音工具包的时候,代码可能会成为很少替换的forest,这很危险。我们试图通过以下的方式来构建工具包,来避免这种情况。每一个命令行语句通常适用于有限的一组案例。例如解码器可能只适用于GMM。因此,当你添加新模型的类型时,您将创建一个新的命令行解码器。(调用相同的底层模版代码)。】
  5. kaldi代码很容易理解。【尽管kaldi工具包整体可能会变的非常庞大,但我们的目标是让每个单独的部分都可以毫不费力的理解。如果他提高了单个件的可理解性,我们将会重复书写代码。】
  6. kaldi代码很容易重构和重用。【我们希望工具包尽可能松散耦合,这意味着给定任何的头文件都应该尽量少#include其他的头文件,矩阵库尤其依赖于另一个子目录中的代码,所以他可以独立于其他所有的kaldi代码独立使用。(PS:不错,这个库想必是算法部分使用最多的了。)】

项目的状态

目前,我们拥有大多数标准结束的代码和脚本,包括所有的标准线性变换,MMI,增强的MMI和MCE判别式训练,以及特征空间判别式训练。我们为华尔街日报和资源管理以及配电盘提供配方,由于词汇和语言模型问题,交换机配方尚未提供最新的结果。因此我们不使用任何的外部数据源。

以上是关于About the kaldi project的部分(省去了最后的引用),看到这里个人相信广大第一次接触他的人都有很多细节不懂,比如什么解码器,什么FSTs,还有那些c++矩阵包到底是如何使用的等等等等。其实我也是存在同样的很多问题,那么我们必须把问题分解,分为多个子任务从分别击破。我的想法是按照官网的理论走一遍,然后针对各个模型走一遍,然后针对模型的论文走一遍,最后代码走一遍。至于里面的第三方的包的使用方法和细节,我则利用业余时间进行测试学习,如果有可能,我会写博客进行介绍。那么今天就先到这里,与诸君共勉。

2018-11-22 14:23:00 weixin_30443075 阅读数 62
  • Android开源项目实践之UI篇

    本课程主要展现了如何利用Android开源代码进行app的开发。例如: 1.异步网络请求(android-async-http); 2.百变圆形滚动条(ProgressWheel);3.滑动导航栏(PagerSlidingTabStrip);4.瀑布流与上拉刷新,下拉加载完美结合(PinterestLikeAdapterView)...

    21109 人正在学习 去看看 李忠义

声纹识别,也称为说话人识别,主要的开源工具有:

1.MSR Identity Toolkit ,微软开源的工具箱,MATLAB版本,包含GMM-UBM和I-vector的demo,简单易用。

2.Alize,主要包括GMM-UBM、I-vector and JFA三种传统的方法,C++版,简单易用。

3.kaldi,当下十分流行的语音识别工具包,也包括声纹识别:覆盖了主流的声纹识别算法(I-vector 、x-vector等),脚本语言,使用不易。

这个是在CSDN上找到的,方便后续查阅,就做个记录.

转自: https://blog.csdn.net/u012594175/article/details/79704115

转载于:https://www.cnblogs.com/dylancao/p/10000825.html

2019-12-23 12:19:39 c12345678999 阅读数 10
  • Android开源项目实践之UI篇

    本课程主要展现了如何利用Android开源代码进行app的开发。例如: 1.异步网络请求(android-async-http); 2.百变圆形滚动条(ProgressWheel);3.滑动导航栏(PagerSlidingTabStrip);4.瀑布流与上拉刷新,下拉加载完美结合(PinterestLikeAdapterView)...

    21109 人正在学习 去看看 李忠义

kaldi 简介:

kaldi 是到目前为止,一款非常优秀的语音识别开源建模软件。顺带一下八卦,其作者,Dan Povey 也是来到了中国发展。
kaldi 是一个建模工具,而建出来什么样的模型,完全依赖于个人。kaldi 的底层是基于 C,用户可以通过钓调用各种样例脚本进行建模。因为是开源的,所以高级玩法是可以自己修改代码编译。初级玩法是调用现有脚本进行编译。这里说的,只是初级玩法。
这里参考github上的 https://github.com/kaldi-asr/kaldi,来说明。

kaldi 建模流程概述:

1.了解脚本位置

kaldi 里面建模一般是在 egs 目录下新建自己的项目,而后在里面新建 s5,而后将其相关脚本从其他项目的 s5 中拷贝到此目录下,进行修改,如从 cp -r kaldi/egs/wsj/s5 egs/test/ 拷贝之后,删除部分不相关数据,如 data, exp,mfcc 中的数据,只保留空文件夹。kaldi/egs/wsj/s5里面比较干净,所以只要新建这三个文件夹即可。其中data里面是待建模数据,exp里面是建模后的模型,mfcc是中间提取的特征。conf里面是配置参数。

2.音频数据准备

在data目录下面,一般是新建 train 和 test 两个文件夹,里面放的分别是建模训练数据和测试数据。其实,里面只要放数据目录和标记文本就好了。这两个文件夹里面放的数据的格式是一模一样的。下面以 train 为例。
train 要准备的是以下几个文件, wav.scp、utt2spk、text、segments、spk2utt、(utt2lang, utt2gender … )。括号里面的根据具体情况而定,前五个一般都需要。

wav.scp

里面的格式是:
音频名称 该音频对应路径
eg:
01.wav /a/b/c/01.wav

需要注意的是这里的左边一列音频名称 ID 必须唯一
此外,对应的该音频路径下的音频需要与conf配置参数一致,如采样率,否则会报错不匹配。

utt2spk

里面的格式是:
音频片段 对应音频片段+说话人ID
eg:
01.wav-1 01.wav-1-1
01.wav-2 01.wav-2-1
01.wav-3 01.wav-3-2

text

里面的格式是:
音频片段 音频标记文本
eg:
01.wav-1 昨天晚上下雪了
01.wav-2 我们去故宫玩吧
01.wav-3 好啊

segments

里面的格式是:
音频片段 音频名称 (时间节点等)
eg:
01.wav-1 01.wav 0.001 3.151
01.wav-2 01.wav 3.501 6.985
01.wav-3 01.wav 7.218 7.832

spk2utt

里面的格式是:
音频片段+说话人ID 对应音频片段
也就是 utt2spk 的相反

其他

如果说音频已经做过vad并切成片段,那么segments前两列写成一样即可。如果音频是长语音,那么segments中需要有时间节点。
产生这几个准备文件的脚本需要自己写,因为数据形式命名方式各不相同,所以就不详细写具体内容了。一般来说,音频名称就是存储的音频名字,音频片段是音频名字后面加上起止时间节点。

3.发音词典准备

发音词典是模型的核心,模型好坏取决于发音词典。建好的发音词典放置于与 s5/local/dict/lexicon.txt,
分成两列,如,拼音 音素
而后可用 s5/local 内的脚本(前人积累的脚本一般都在这里面了),在data/local/内生成相应文件。
生成的文件,主要包括 nonsilence_phones.txt silence_phones.txt

nonsilence_phones.txt

内包 lexicon.txt 中,除 sil 的全部内容

silence_phones.txt

内包 lexicon.txt 中,只有 sil 的内容

4.训练

根据想要的训练过程,选择对应的脚本进行训练即可。

小结

使用 kaldi 在于两点,一个是准备数据,另一个是熟悉脚本语音。实际操作中,因为数据和脚本不匹配的情况肯定会发生,根据真实情况,报错信息,修改相应脚本,才能使其能正常运行。在 kaldi/egs/wsj/s5 中,可以从先熟悉 run.sh 中开始,而后结合本文所述,了解其调用功能。

语音预加重

阅读数 2974

kali源代码简单说明

阅读数 2051

Kaldi的安装与测试

阅读数 428

没有更多推荐了,返回首页