精华内容
下载资源
问答
  • 讯飞离线语音命令识别测试, 做的DEMO测试, 想交流的可以联系我。
  • 行业-电子政务-命令识别方法及使用该方法的电子设备.zip
  • 行业分类-物理装置-语音命令识别方法、装置、系统及存储介质.zip
  • htk 搭建语音命令识别工具包

    千次阅读 2014-04-29 14:03:25
    在这里,我们以一个常用命令(打开、关闭、开始、停止)的语音识别任务为例,介绍一下如何利用HTK快速地建立这样一个语音命令识别系统,让电脑识别出你所说的简单命令。当然,如果要想识别任何其它的词,原理及过程...

    摘要

    体验过百度语音产品的你一定能感受到语音交互的魅力。在这里,我们以一个常用命令(打开、关闭、开始、停止)的语音识别任务为例,介绍一下如何利用HTK快速地建立这样一个语音命令识别系统,让电脑识别出你所说的简单命令。当然,如果要想识别任何其它的词,原理及过程也完全相同。

     

    工具包介绍
    HTK的全称是”Hidden Markov Model Toolkit”,是英国剑桥大学工程学院开发的隐马尔可夫模型(后面简称为隐马模型)工具包,可以方便有效的建立及操作隐马模型。隐马模型在许多人工智能领域都有着成功的应用,比如语音识别,当前国际上主流的语音识别系统仍是基于隐马模型建立的。HTK的开发也主要是针对语音识别的应用及研究。

    HTK是一个开源工具包,可以在http://htk.eng.cam.ac.uk/进行免费下载,工具包中包含许许多多的模块及工具,都是用纯C代码写成的,基本都以H开头。其中也有非常详细的文档可供参考。

    建立语音训练数据
    首先我们需要录音以采集足够的语音数据,对于“打开、关闭、开始、停止”这四个命令都需要录一些相应的语音样本,同时也需要对录下的语音做一些简单的标注。录音和标注可以采用HTK工具包中的HSLab来完成。

    比如在命令行下运行“HSLab打开.sig”,然后点击“Rec”健开始录音,点击“Stop”键录音结束。这时就会在当前目录下生成一个名为“打开_0.sig”文件,再进行一次录音则生成“打开_1.sig”,以此类推。默认的录音采样率为16kHz,我们采用默认的设置就可以了。

    录音后需要对语音进行简单的标注,标注也是用HSLab工具,运行后按“Mark”键,选择需要标注的区域,按“Labelas”,输入标注的符号,然后回车确定即可。在本问的例子中,每个语音样本都是孤立的命令词,我们只需要标注出3个部分:起始静音部分(标记为sil),命令词语音部分(标记为命令词,如“打开”),结束静音部分(标记为sil)。标注完成,点击“Save”键保存,会生成一个后缀为“lab”的文件。

    特征提取
    语音识别系统并不直接在语音信号上进行识别,而是先要进行特征提取,包括分帧,加窗,求取频谱及倒谱,这样确保提取出的特征更加紧凑并尽可能多的保留语音内容的信息。

    HTK中负责提取特征的是HCopy工具,它将wav格式的语音文件转化为包含若干特征

    矢量的特征文件。具体命令如下:

    HCopy  –A  –D  –C  hcopy.conf  -S  hcopy.scp

    其中hcopy.conf是一个配置文件,用于对特征提取过程中的参数进行配置,如下所示: 

    hcopy.scp为待处理语音源文件与特征目标文件对的列表,格式如下:

     

    隐马模型结构定义

    在本文的例子中,有五个需要建模的声音单元:“打开”,“关闭”,“开始”,“停止”,“sil”。对于每一个声音单元都将采用一个对应的隐马模型来建模。需要确定的隐马模型结构参数包括:

      1.状态个数

      2.每个状态的输出函数形式

      3.状态间的跳转关系

    在本例中我们采用最常用的结构配置,如下所示:

     

    模型包括4个有输出的状态{S2,S3,S4,S5},第一个和最后一个状态{S1,S6}不产生输出,只是为了操作方便。每个状态的输出函数b采     用对角方差阵的混合高斯分布函数来描述。
    隐马模型训练

      1. 模型初始化

    在训练开始必须对模型参数进行初始化,初始化是会影响训练的收敛速度与准确性。HTK提供了两种初始化工具:HInit和HCompv.

        (1) 采用HInit初始化

       HInit -A -D -T 1 -S trainlist.txt -M model/hmm0 \

               -H model/proto/hmmfile -l label -L label_dir nameofhmm

      其中,nameofhmm是隐马模型的名称,如“开始”、“关闭”;hmmfile是一个描述隐马模型原型的文件,如拓扑结构,转移关系,特征维数等;model/hmm0为初始化生成的初始模型文件。

        (2) 采用HCompv初始化

       HCompv -A -D -T 1 -S trainlist.txt -M model/hmm0flat \

                    -H model/proto/hmmfile -f 0.01 nameofhmm

    2. 参数重估

    模型参数的估计采用HRest工具,调用该工具完成一轮参数的重新估计,具体命令行如下:

    HRest -A -D -T 1 -S trainlist.txt -M model/hmmi -H vFloors \

              -H model/hmmi-1/hmmfile -l label -L label.dir nameofhmm

    其中,trainlist.txt文件包含所有用于训练的mfcc特征文件列表,label_dir是存放标注文件(.lab)的目录,vFloors是由HCompv生成的最小方差值的文件。

    整个训练过程需要迭代多次,通常5-10轮次,每次迭代时,HRest程序可输出数据的似然值。

    识别任务语法及词典定义

    对于任意一个识别任务我们要定义该识别任务的语法,并生成待识别的网络,识别网络即包括所有可能识别的词或句子。在HTK中,支持用户写一个类似EBNF语法范式的文本文件,HParse工具可以自动对该文本文件进行解析,生成相应的识别网络文件。

    对于本文中的例子,描述其语法的文本文件“gram.txt”如下:

     

    其中,花括号表示允许0至多次出现,方括号表示0或1次出现。

    然后可通过HParse生成识别网络文件“net.slf”

    HParse -A -D -T 1 gram.txt net.slf

    生成的识别网络如下图所示:

     

    除了建立识别语法文件,还需要建立词典,词典是为了将最终识别的结果与隐马模型描述的单元名称建立对应关系,由于在本例中我们是直接以词为单元来建立模型,所以这里的词典就非常简单,词典“dict.txt”如下所示:

     

    识别及测试

    模型训练完成后就可以进行识别和测试了:

    1. 首先录入待识别的语音,如“input.sig”,利用HCopy将其转换为MFCC特征矢量文件input.mfcc(与训练时提取特征过程相同)。

    2. 识别是通过Viterbi算法在特征矢量上进行计算,与各个单词的隐马模型进行匹配。这一步是通过工具HVite进行的,具体命令行如下:
    HVite -A -D -T 1 -H hmmdef.mmf -i reco.mlf -w net.slf \

               dict.txt hmmlist.txt input.mfcc

      其中“reco.mlf”为输出识别结果的文件,其识别结果形式如下所示:

    识别及测试

    模型训练完成后就可以进行识别和测试了:

    1. 首先录入待识别的语音,如“input.sig”,利用HCopy将其转换为MFCC特征矢量文件input.mfcc(与训练时提取特征过程相同)。

    2. 识别是通过Viterbi算法在特征矢量上进行计算,与各个单词的隐马模型进行匹配。这一步是通过工具HVite进行的,具体命令行如下:
    HVite -A -D -T 1 -H hmmdef.mmf -i reco.mlf -w net.slf \

               dict.txt hmmlist.txt input.mfcc

      其中“reco.mlf”为输出识别结果的文件,其识别结果形式如下所示:

     

    3. 当然HTK也支持采用一种更自然的方式进行识别测试,即直接录音进行识别,具体命令行如下:

      HVite -A -D -T 1 -C directin.conf -g -H hmmsdef.mmf \

              -w net.slf  dict.txt hmmlist.txt  

      运行该命令后,命令行会出现“READY[1]>”,此时便可进行声音录入,按任意键结束录音,程序会进行识别并将结果显示在屏幕上,    然后出现“READY[2]>”进行下一次录音及识别。

      由于在这种识别方式里由程序自动进行特征提取,配置文件direction.conf中需包含录音音频格式及特征提取过程所需的各类参数,一个具体示例如下:

     

    展开全文
  • 环境配置: ... 通过vs1003的麦克风采集声音,然后将声音转码为讯飞要求的pcm格式,然后在树莓派中调用讯飞提供的在线命令识别API,完成语音识别功能. 碰到的问题:  开始时从网上找了比较流行的a

    环境配置:

        树莓派B+ ,     ubuntu 14.04,     ROS,   wiringPi,  vs1003B,  讯飞在线语音识别库  


    系统功能:

       通过vs1003的麦克风采集声音,然后将声音转码为讯飞要求的pcm格式,然后在树莓派中调用讯飞提供的在线命令识别API,完成语音识别功能.


    碰到的问题:

        开始时从网上找了比较流行的arm-linux-gcc 4.4.3版本的交叉编译器,在PC上所有代码和库都能编译通过.

        将交叉编译器交给讯飞开发人员后,他们免费提供了在线的命令识别动态库.

        将自己代码和讯飞语音库等编译通过,但是运行时发现找不到libmsc.so库.   通过ldd命令,可以看到找不到libmsc.so的提示.

        解决的过程:

        在网上搜索了很多帖子,大多是让修改LD_LIBRARY_PATH或者/etc/ld.so.conf文件,然后运行sudo ldconfig -v命令,但是依然无法找到.

        后来怀疑是我的树莓派B+运行的 arm-linux-gnueabihf  4.6.3版本的编译器,与提供给讯飞的编译器不一致,可能是库不一致,导致的问题.

        本来打算自己用crosstool-ng生成一个交叉编译器,但是考虑到时间成本,后来还是在网上搜到了树莓派本身提供的交叉编译器.

        可以参考帖子:

        http://www.cnblogs.com/emouse/archive/2013/06/07/3124063.html

        或者从CSDN下载:

        http://download.csdn.net/detail/canyue102/6725615


    验证:

        后来我在PC上自己用树莓派提供的交叉编译器和自己在网上找到的4.4.3的编译器,分别自己生成了2个动态库,在树莓派上运行发现,的确,用树莓派提供的交叉编译器,可以被

    在树莓派上编译生成的程序找到,4.4.3的则无法找到.



    展开全文
  • 在官网下载离线SDK,找到官方提供的帮助文档,其中Development Manual.pdf是关于API说明,用于帮助你理解demo中代码,BNF Grammar Development Manual.pdf比较关键,帮助你定义自己的离线命令语法格式。 下面是...


    开发环境时ubuntu 14.04


    在官网下载离线SDK,找到官方提供的帮助文档,其中Development Manual.pdf是关于API说明,用于帮助你理解demo中代码,BNF Grammar Development Manual.pdf比较关键,帮助你定义自己的离线命令语法格式。


    下面是SDK中readme.txt的说明

    1.doc目录下存放开发文档等;

     
    2.lib目录下存放SDK需要调用的动态库以及需要引用的头文件。
     
    3.example目录下存放提供的示例demo,每个例子下都有Makefile文件,在当前目录make即可;
     
    4.bin目录下存放符合标准的语音文件样例、配置文件和资源文件等,make之后的example可执行程序也会拷贝至此,请在此目录下运行,否则会运行失败;
     
    5.prj目录下提供make脚本,可以快速编译例子。

     

    下面时我使用过程中,自己总结的流程。

    =====================补充 =====================
    如何增加本地语音文件,支持新的的离线命令:
    1. 需要录制语音,语音文件格式要求:
       pcm/wav    16000/8000采样频率   16/8bit采样深度   单声道
       将文件存放在/bin/wave/  目录下
    2. 修改/bin目录下的call.bnf文件,将新增命令语法写入到语法格式文档中
    3. 修改/example/asrdemo/arsdemo.c文件,支持新的语音文件的读取
    4. 将/lib目录增加到系统$LD_LIBRARY_PATH环境变量中
    5. 在/example/asrdemo/目录下编译
    6. 到/bin目录下执行asrdemo可执行文件
    展开全文
  • 隐马模型在许多人工智能领域都有着成功的应用,比如语音识别,当前国际上主流的语音识别系统仍是基于隐马模型建立的。HTK的开发也主要是针对语音识别的应用及研究。 HTK是一个开源工具包,可以在http

    工具包介绍

    HTK的全称是“Hidden Markov Model Toolkit”,是英国剑桥大学工程学院开发的隐马尔可夫模型(后面简称为隐马模型)工具包,可以方便有效的建立及操作隐马模型。隐马模型在许多人工智能领域都有着成功的应用,比如语音识别,当前国际上主流的语音识别系统仍是基于隐马模型建立的。HTK的开发也主要是针对语音识别的应用及研究。

    HTK是一个开源工具包,可以在http://htk.eng.cam.ac.uk/进行免费下载,工具包中包含许许多多的模块及工具,都是用纯C代码写成的,基本都以H开头。其中也有非常详细的文档可供参考。

    建立语音训练数据

    首先我们需要录音以采集足够的语音数据,对于“打开、关闭、开始、停止”这四个命令都需要录一些相应的语音样本,同时也需要对录下的语音做一些简单的标注。录音和标注可以采用HTK工具包中的HSLab来完成。

    比如在命令行下运行“HSLab打开。sig”,然后点击“Rec”健开始录音,点击“Stop”键录音结束。这时就会在当前目录下生成一个名为“打开_0.sig”文件,再进行一次录音则生成“打开_1.sig”,以此类推。默认的录音采样率为16kHz,我们采用默认的设置就可以了。

    录音后需要对语音进行简单的标注,标注也是用HSLab工具,运行后按“Mark”键,选择需要标注的区域,按“Labelas”,输入标注的符号,然后回车确定即可。在本问的例子中,每个语音样本都是孤立的命令词,我们只需要标注出3个部分:起始静音部分(标记为sil),命令词语音部分(标记为命令词,如“打开”),结束静音部分(标记为sil)。标注完成,点击“Save”键保存,会生成一个后缀为“lab”的文件。

    特征提取

    语音识别系统并不直接在语音信号上进行识别,而是先要进行特征提取,包括分帧,加窗,求取频谱及倒谱,这样确保提取出的特征更加紧凑并尽可能多的保留语音内容的信息。

    HTK中负责提取特征的是HCopy工具,它将wav格式的语音文件转化为包含若干特征

    矢量的特征文件。具体命令如下:

    HCopy –A –D –C hcopy.conf -S hcopy.scp

    其中hcopy.conf是一个配置文件,用于对特征提取过程中的参数进行配置,如下所示:

    hcopy.scp为待处理语音源文件与特征目标文件对的列表,格式如下:

    隐马模型结构定义

    在本文的例子中,有五个需要建模的声音单元:“打开”,“关闭”,“开始”,“停止”,“sil”.对于每一个声音单元都将采用一个对应的隐马模型来建模。需要确定的隐马模型结构参数包括:

    1.状态个数

    2.每个状态的输出函数形式

    3.状态间的跳转关系

    在本例中我们采用最常用的结构配置,如下所示:

    模型包括4个有输出的状态{S2,S3,S4,S5},第一个和最后一个状态{S1,S6}不产生输出,只是为了操作方便。每个状态的输出函数b采 用对角方差阵的混合高斯分布函数来描述。

    隐马模型训练

    1. 模型初始化

    在训练开始必须对模型参数进行初始化,初始化是会影响训练的收敛速度与准确性。HTK提供了两种初始化工具:HInit和HCompv.

    (1) 采用HInit初始化

    HInit -A -D -T 1 -S trainlist.txt -M model/hmm0

    -H model/proto/hmmfile -l label -L label_dir nameofhmm

    其中,nameofhmm是隐马模型的名称,如“开始”、“关闭”;hmmfile是一个描述隐马模型原型的文件,如拓扑结构,转移关系,特征维数等;model/hmm0为初始化生成的初始模型文件。

    (2) 采用HCompv初始化

    HCompv -A -D -T 1 -S trainlist.txt -M model/hmm0flat

    -H model/proto/hmmfile -f 0.01 nameofhmm

    2. 参数重估

    模型参数的估计采用HRest工具,调用该工具完成一轮参数的重新估计,具体命令行如下:

    HRest -A -D -T 1 -S trainlist.txt -M model/hmmi -H vFloors

    -H model/hmmi-1/hmmfile -l label -L label.dir nameofhmm

    其中,trainlist.txt文件包含所有用于训练的mfcc特征文件列表,label_dir是存放标注文件(。lab)的目录,vFloors是由HCompv生成的最小方差值的文件。

    整个训练过程需要迭代多次,通常5-10轮次,每次迭代时,HRest程序可输出数据的似然值。

    识别任务语法及词典定义

    对于任意一个识别任务我们要定义该识别任务的语法,并生成待识别的网络,识别网络即包括所有可能识别的词或句子。在HTK中,支持用户写一个类似EBNF语法范式的文本文件,HParse工具可以自动对该文本文件进行解析,生成相应的识别网络文件。

    对于本文中的例子,描述其语法的文本文件“gram.txt”如下:

    其中,花括号表示允许0至多次出现,方括号表示0或1次出现。

    然后可通过HParse生成识别网络文件“net.slf”

    HParse -A -D -T 1 gram.txt net.slf



    生成的识别网络如下图所示:

    除了建立识别语法文件,还需要建立词典,词典是为了将最终识别的结果与隐马模型描述的单元名称建立对应关系,由于在本例中我们是直接以词为单元来建立模型,所以这里的词典就非常简单,词典“dict.txt”如下所示:

    识别及测试

    模型训练完成后就可以进行识别和测试了:

    1. 首先录入待识别的语音,如“input.sig”,利用HCopy将其转换为MFCC特征矢量文件input.mfcc(与训练时提取特征过程相同)。

    2. 识别是通过Viterbi算法在特征矢量上进行计算,与各个单词的隐马模型进行匹配。这一步是通过工具HVite进行的,具体命令行如下:

    HVite -A -D -T 1 -H hmmdef.mmf -i reco.mlf -w net.slf

    dict.txt hmmlist.txt input.mfcc

    其中“reco.mlf”为输出识别结果的文件,其识别结果形式如下所示:

    识别及测试

    模型训练完成后就可以进行识别和测试了:

    1. 首先录入待识别的语音,如“input.sig”,利用HCopy将其转换为MFCC特征矢量文件input.mfcc(与训练时提取特征过程相同)。

    2. 识别是通过Viterbi算法在特征矢量上进行计算,与各个单词的隐马模型进行匹配。这一步是通过工具HVite进行的,具体命令行如下:

    HVite -A -D -T 1 -H hmmdef.mmf -i reco.mlf -w net.slf

    dict.txt hmmlist.txt input.mfcc

    其中“reco.mlf”为输出识别结果的文件,其识别结果形式如下所示:

    3. 当然HTK也支持采用一种更自然的方式进行识别测试,即直接录音进行识别,具体命令行如下:

    HVite -A -D -T 1 -C directin.conf -g -H hmmsdef.mmf

    -w net.slf dict.txt hmmlist.txt

    运行该命令后,命令行会出现“READY[1]>”,此时便可进行声音录入,按任意键结束录音,程序会进行识别并将结果显示在屏幕上, 然后出现“READY[2]>”进行下一次录音及识别。



    由于在这种识别方式里由程序自动进行特征提取,配置文件direction.conf中需包含录音音频格式及特征提取过程所需的各类参数,一个具体示例如下:

    对本文中的事件或人物打分:
    展开全文
  • $ vi .bash_profile 加入如下几行: alias ll='ls -alFG' alias la='ls -AG' alias ls='ls -FGh' 最后source使其生效就好啦: $ source .bash_profile
  • 命令识别

    2017-03-07 02:47:42
    科大讯飞离线命令识别Demo
  • 命令语音识别范例

    2011-12-07 17:33:11
    命令语音识别范例
  • 简单命令语音识别

    2014-05-12 16:36:37
    一个封装好的语音识别类和xml文件,囊括了windows语音识别的基本操作,适合学习使用
  • 讯飞语音——离线命令识别

    万次阅读 热门讨论 2015-08-19 14:41:19
    离线命令识别 效果图示例源码 地址:http://download.csdn.net/detail/q4878802/9023825步骤:1. 下载SDK 前面文章有,就不在复述了。这里要选择离线命令词的服务以后,重新加载,因为需要下载离线命令识别的...
  • 本Demo首先基于科大讯飞离线命令识别示例Demo分析其工作流程,抽取了Demo中离线命令识别功能部分进行了开发使用,主要用于学习科大讯飞离线命令词接口调用和使用步骤
  • 语音命令识别

    千次阅读 2018-08-25 16:46:53
    语音命令识别的方案有:讯飞在线\离线语音命令识别,还有一个方案是基于TensorFlow的机器学习。后者不需要费用,但是需要训练(所谓训练不是像宠物一样,每个宠物都需要训练一遍,而一次训练生成模板后,所...
  • 讯飞离线语音命令识别语Demo
  • docker 命令无法识别

    千次阅读 2019-08-24 20:20:14
    安装完win10docker以后发现怎么敲命令都是无法识别, cmd “docker --version”,显示“不是内部或外部命令,也不是可运行的程序 或批处理文件”。 使用PowerShell更出现“无法将“docker”项识别为 cmdlet、函数...
  • 语音离线命令识别

    千次阅读 2017-03-07 02:54:55
    最近帮别人的车载系统整了一个小项目,分享一下最原始的Demo!**说明:**XF的语音服务很多,类似...如下简单的实现了命令控制,使用XF的离线命令识别+TTS服务。第一步:编写离线命令词文件,遵守它的语法规则 BNF
  • 讯飞离线语音命令识别

    万次阅读 2017-12-28 17:58:50
    讯飞离线语音命令识别 1、注册并下载sdk 2、创建工程 3、权限 4、拷贝jar包 5、初始化引擎 6、功能代码 7、打赏1、注册并下载sdk讯飞官网地址:http://www.xfyun.cn/*选择立即开通并登录* 弹出对话框,选择创建...
  • VsCode命令无法识别

    千次阅读 2020-03-04 12:02:59
    1.安装完VsCode后终端无法输入命令 解决办法: 选中VsCode快捷方式-右键-打开文件夹所在位置-右键属性-兼容性,勾选以管理员身份运行此程序 重新启动后就可以 2.可以输入指令但是输入指令未被识别,或者...
  • Android基于PocketSphinx的离线命令识别DEMO包含了离线命令词库.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 讯飞语音离线命令识别示例demo

    热门讨论 2015-08-19 14:31:45
    博客讲解离线命令识别的示例Demo源码
  • cmd识别java命令却不识别javac

    万次阅读 2019-05-26 21:38:57
    识别java却不识别javac这是因为路径没有配置好 第一开始我试了很多种方法,比如在path中把%JAVA_HOME%\bin 和%JAVA_HOME%\jre\bin路径分成两行,且中间没有; 可惜还是不行 后来发现应该是我的java路径写错了 如果你...
  • 语音识别操作命令demo

    2019-01-11 11:55:22
    通过语音唤醒和识别控制应用执行所需要的命令操作,简化用户操作
  • gradle命令无法识别

    千次阅读 2020-06-09 10:07:51
    ‘gradle’ is not recognized as an internal or external command 按照网络教程顺序 1.安装Java 2.配置Java环境变量 3.下载gradle 4.配置gradle环境变量 但是在终端执行gradle -v的时候仍然报错 ...
  • VScode终端命令无法识别

    千次阅读 2020-04-23 11:20:47
    无法将“###”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试 一次。 在cmd命令中不能运行,则需要配置环境变量; 许多小伙伴在cmd发现能运行,而...
  • 讯飞语音——离线命令词+语义识别

    万次阅读 2015-08-20 13:44:22
    说的话满足本地构建的语法—-离线命令识别 说的话离线命令词无法识别,走语义识别并且满足语义场景—-将语音转为语义 说话既不满足离线命令识别也不满足语义开通的场景—-将语音转为文字 程序和离线命
  • Shell出现cd命令无法识别

    千次阅读 2014-02-02 21:38:25
    出现cd 等命令无法识别的原因可能是: 当前文件实在windows环境下编辑的其换行结尾是 \r\n 和linux环境的 \n 不一致导致错误, 最好在linux系统上通过 VI 命令新建文件,然后通过 SSH 将本地代码粘贴...
  • hadoop命令无法识别

    千次阅读 2014-04-23 18:29:17
    在运行一段时间后,突然报出hadoop不识别指令的错误。因为yi

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 428,606
精华内容 171,442
关键字:

命令识别