基于 CMU sphinx 的 Edison 语音识别系统

本项目利用 Edison 强大的计算能力,将 CMU Sphinx 系统移植到 Edison 上,实现了简单的语音识别系统。使用该系统,可以识别 LEFT/RIGHT/FORWARD/BACKWARD 等指令,实现对小车的控制。

 

 

最新更新

  • 2015/03/25 06:46:43

    控制小车

    对于 sphinx 文字返回的识别结果,如何控制小车,这里我们使用了 expect 的脚本。

    通过 expect 监控控制台输出的文字,根据不同的文字,来 spawn 新的进程运行不同的程序。

    如果您需要这个脚本,请联系我们的管理员。


  • 2015/03/25 06:44:54

    训练自己的简单语音命令

    1. 创建一个语料库

    vi corpus.txt

    输入如下内容:

    search

    stop

    forward

    backward

    right

    left

    保存退出

    2. 利用在线工具 LMTool建立语言模型

    进入网址:http://www.speech.cs.cmu.edu/tools/lmtool-new.html

    点击 choose file 按钮, 选择之前创建的 corpus.txt, 最后点击 COMPILE KNOWLEDGE BASE 。

    生成一堆的文件,你只需要下载.dic 和.lm 文件。

    3. 测试结果

    进入安装 sphinx 的目录,下面有个 bin 目录,进入之后运行:

    ./pocketsphinx_continuous -lm xxxx.lm -dict xxxx.dic

    INFO: ngram_search_fwdflat.c(295): Utterance vocabulary contains 1 words

    INFO: ngram_search_fwdflat.c(912):       97 words recognized (2/fr)

    INFO: ngram_search_fwdflat.c(914):     2342 senones evaluated (38/fr)

    INFO: ngram_search_fwdflat.c(916):     1011 channels searched (16/fr)

    INFO: ngram_search_fwdflat.c(918):      167 words searched (2/fr)

    INFO: ngram_search_fwdflat.c(920):       47 word transitions (0/fr)

    WARNING: “ngram_search.c”, line 1087: not found in last frame, using instead

    INFO: ngram_search.c(1137): lattice start node .0 end node .56

    INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(:56:60) = -341653

    INFO: ps_lattice.c(1266): Joint P(O,S) = -341653 P(S|O) = 0

    000000000: STOP (-6531224)

    READY….

    Listening…

    Stopped listening, please wait…

    INFO: cmn_prior.c(121): cmn_prior_update: from < 37.45 -1.28 -0.16 -0.71  0.19 -0.19 -0.07  0.34  0.13 -0.07 -0.03 -0.42  0.19 >

    INFO: cmn_prior.c(139): cmn_prior_update: to   < 42.22 -0.51 -0.35 -0.28 -0.24 -0.37  0.02  0.38  0.03 -0.05  0.10 -0.32  0.05 >

    INFO: ngram_search_fwdtree.c(1513):      847 words recognized (9/fr)

    INFO: ngram_search_fwdtree.c(1515):    11452 senones evaluated (123/fr)

    INFO: ngram_search_fwdtree.c(1517):     4963 channels searched (53/fr), 534 1st, 3470 last

    INFO: ngram_search_fwdtree.c(1521):     1094 words for which last channels evaluated (11/fr)

    INFO: ngram_search_fwdtree.c(1524):      203 candidate words for entering last phone (2/fr)

    INFO: ngram_search_fwdflat.c(295): Utterance vocabulary contains 2 words

    INFO: ngram_search_fwdflat.c(912):      225 words recognized (2/fr)

    INFO: ngram_search_fwdflat.c(914):    10189 senones evaluated (110/fr)

    INFO: ngram_search_fwdflat.c(916):     5206 channels searched (55/fr)

    INFO: ngram_search_fwdflat.c(918):      329 words searched (3/fr)

    INFO: ngram_search_fwdflat.c(920):      164 word transitions (1/fr)

    WARNING: “ngram_search.c”, line 1087: not found in last frame, using RIGHT instead

    INFO: ngram_search.c(1137): lattice start node .0 end node RIGHT.48

    INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(RIGHT:48:91) = -647142

    INFO: ps_lattice.c(1266): Joint P(O,S) = -647271 P(S|O) = -129

    000000001: RIGHT (-12643528)

    READY….

    可以看到声音识别的结果通过文字返回出来。中文的识别,我们以后再说

     


    2015/03/25 06:37:21

    在 Edison 上安装 sphinx

    1. 安装 pulseaudio-dev,因为目 ww05 的 image 里面已经默认安装了 pulseaudio,这是一个声卡驱动和上层应用的中间层,可以理解为一个 server,应用发消息到 pulseaudio,pulseaudio 在发给驱动。sphinx 需要从声卡直接抓取音频数据,所以需要安装 pulseaudio 相应的头文件。opkg install pulseaudio-dev

      如果你之前更新过 opkg 的源,就没问题了。

    2. 从这里下载最新版本的 SphinxBase,这个是公共库:http://sourceforge.net/projects/cmusphinx/files/sphinxbase/0.8/

      安装 sphinx 之前,需要在 edison 上安装 bison,幸好 AlexT 的 repo 里面有,不用自己编译了。

      opkg install bison

      装完 bison 之后,就可以安装 sphinxbase 了。

      ./configure –prefix=/home/root/sphinx

      建议用—prefix,这个东东以后需要的空间很大,光语音识别的字典等等库,就 200M+。

      这个时候如果 make 的话,sphinxbase 会搜索你安装的库,因为你装过了 pulseaudio-dev,刚才 configure 会自动配置 make 的时候使用 pulseaudio 的库,但是这里用了 sphinxbase 里面的 libtool,这个 libtool 好像有问题,make 会出错。这里需要输入:

      libtoolize –force –automake

      用系统的 libtool 替换 sphinxbase 的 libtool,然后编译。

      make

      make install

    3. 下载最新版本的 pocketsphinx,这是一个小型的专门用于嵌入式系统的 sphinx 系统,比 sphinx3、4 要简单,速度快。http://sourceforge.net/projects/cmusphinx/files/pocketsphinx/0.8/

      export  LD_LIBRARY_PATH=/home/root/sphinx/lib

      export  PKG_CONFIG_PATH=/home/root/sphinx/pkgconfig

       

      同样,解压缩之后,需要:

      ./configure –prefix=/home/root/sphinx

      同样,这时需要用系统的 libtool 替换里面的。

      libtoolize –force –automake

      make

      make install

       

      还可以输入 make check,它不仅会编译,还会做代码的 unit test,虽然不是必须的,但是还是要赞一下这个代码写的不错。

      然后运行/home/root/sphinx/bin/pocketsphinx_continuous

      就可以识别基本的英文了。


      2015/03/25 06:31:52

      CMU Sphinx 介绍

      Sphinx 是由美国卡内基梅隆大学开发的大词汇量、非特定人、连续英语语音识别系统。Sphinx 从开发之初就得到了 CMU、DARPA 等多个部门的资助和支持,后来逐步发展为开源项目。

      目前 CMU Sphinx 小组开发的下列译码器:

      • Sphinx-2 采用半连续隐含马尔可夫模型(SCHMM)建模,采用的技术相对落后,使得识别精度要低于其它的译码器。
      • PocketSphinx 是一个计算量和体积都很小的嵌入式语音识别引擎。在 Sphinx-2 的基础上针对嵌入式系统的需求修改、优化而来,是第一个开源面向嵌入式的中等词汇量连续语音识别项目。识别精度和 Sphinx-2 差不多。
      • Sphinx-3 是 CMU 高水平的大词汇量语音识别系统,采用连续隐含马尔可夫模型 CHMM 建模。支持多种模式操作,高精度模式扁平译码器,由 Sphinx3 的最初版本优化而来;快速搜索模式树译码器。目前将这两种译码器融合在一起使用。
      • Sphinx-4 是由 JAVA 语言编写的大词汇量语音识别系统,采用连续的隐含马尔可夫模型建模,和以前的版本相比,它在模块化、灵活性和算法方面做了改进,采用新的搜索策略,支持各种不同的语法和语言模型、听觉模型和特征流,创新的算法允许多种信息源合并成一种更符合实际语义的优雅的知识规则。由于完全采用 JAVA 语言开发,具有高度的可移植性,允许多线程技术和高度灵活的多线程接口。

      针对不同的应用和平台选用不同版本的引擎。因为我们是需要在 Edison 上实现语音识别,所以暂时选择了,PocketSphinx 语音识别引擎来提供语音识别功能。

发布者:Cara,转载请注明出处:http://www.makercollider.com/project/5611

发表评论

登录后才能评论
QR code