再最近做的一个项目中需要用到离线语音识别的功能,找了一些资料学习了一下,还不是很懂,只是能把PocketSphinxDemo 运行起来啦。效果不是很好,识别能力很差!但也花费了我好久的时间去运行成功!在这里总结一下!!!!

   1.前期准备(下载):

               AndroidNDK下载:     http://developer.android.com/tools/sdk/ndk/index.html#GetStarted

               Cygwin 下载:http://cygwin.com/install.html

               Sphinxbase 0.7下载:http://ucla.jamesyxu.com/custom_uploads/sphinxbase-0.7.tar.gz

               PocketSphinx 0.7下载:http://ucla.jamesyxu.com/custom_uploads/pocketsphinx-0.7.tar.gz

下载:http://ucla.jamesyxu.com/custom_uploads/PocketSphinxAndroidDemo.zip

    2.对Cygwin进行安装配置

          首先介绍一下Cygwin,cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从linux到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非常有用。

           如果你已经下载了Cygwin,会有一个setup-86.exe,双击打开出现如下界面






Android集成emq Android集成PocketSphinx_cygwin





毫无疑问,点击下一步喽


                

Android集成emq Android集成PocketSphinx_Android集成emq_02

               继续下一步

Android集成emq Android集成PocketSphinx_离线语音识别_03

在上图中黑色圈圈内点击Browse选择安装路径,图中为我的安装路径,选择完毕下一步

Android集成emq Android集成PocketSphinx_离线语音识别_04

continue

Android集成emq Android集成PocketSphinx_Android集成emq_05

选择默认的网络直连,continue

Android集成emq Android集成PocketSphinx_PocketSphinxDemo_06

 如上图,会让你选择一个下载站点,参考其他的博客,发现大家用的都是上图蓝色区域,就跟着用了这个,自认为还行,不知道其他的是什么速度。选择完毕,continue

Android集成emq Android集成PocketSphinx_Android集成emq_07

在上图中框框区域输入要下载的文件,就会自动搜索出你要下载的文件,此时我们需要下载的包括:autoconf、automake、binutils、gcc-core、gcc-g++、gdb、pcre、pcre-devel、gawk、make、libtool、swig,下面我将会为大家示范autoconf的下载,其他同理。

Android集成emq Android集成PocketSphinx_ndk_08

输入autoconf之后,界面如上图所示,其中最后一个圈圈内为要下载的文件名称,看好你要下载的文件,比如本例我选择第一个,那么点击第一个圈圈,直到第一个圈内的内容变成你要下载的版本号,此时,第二个圈内会变成差号,如下图所示:

Android集成emq Android集成PocketSphinx_离线语音识别_09

此时autoconf已选择完毕,可以在Search 框里继续搜索其他的要下载的文件,方法同理,最后全都选择完毕后,点击下一步,自动下载

Android集成emq Android集成PocketSphinx_ndk_10

这一步下载的会很慢,你可以去冲一杯咖啡,或者出去走走,放松一下自己,后面还有很多事要做。

好了,下载完成后是这个样子的

Android集成emq Android集成PocketSphinx_Android集成emq_11

点击完成即可。下面我们要检查一下下载是否成功

打开 Cygwin,在命令行下输入 gcc --version,g++ --version,make --version,gdb --version,依次显示信息,则安装正确;

最后不要忘记修改 cygwin/etc/passwd 文件中的 500:513 为 0:0,获得 root 权限;以至于为什么我也不太清楚,哈哈!

3.NDK的配置

打开 cygwin/etc/profile,修改如下地方:其中cygdrive 后边是盘符,然后就是路径了

Android集成emq Android集成PocketSphinx_PocketSphinxDemo_12

打开 Cygwin,输入 ndk-build,出现如下信息,代表配置正常:


Android集成emq Android集成PocketSphinx_cygwin_13

下面我们就来运行一下NDK自带的例子

我的例子位于E:\study\android\android-ndk32-r10b-windows-x86\android-ndk-r10b\samples\hello-jni,大家可以根据自己NDK下载的位置来寻找,启动Cygwin.bat,输入 cd /cygdrive/e/study/android/android-ndk32-r10b-windows-x86/android-ndk-r10b/samples/hello-jni(需要注意的是cd和他后面的/之间有一个空格哦,否则不能识别你的命令)进去之后如下

Android集成emq Android集成PocketSphinx_PocketSphinxDemo_14

若不成功显示

Android集成emq Android集成PocketSphinx_Android集成emq_15

此时可能是你将目录输入错误,好吧,本人就是输入错误好多次,要细心哦!

之后输入 ndk-build

Android集成emq Android集成PocketSphinx_ndk_16

执行成功后,它会自动在 hello-jni目录下生成一个 libs 目录,把编译生成的 .so 文件放/libs里面的四个文件夹下。

Android集成emq Android集成PocketSphinx_离线语音识别_17

4. pocketsphinx,sphinxbase,PocketSphinxAndroidDemo的处理

首先,将这三个文件夹放在同一个文件夹下,我命名为sphinx。打开 Cygwin,依次编译 sphinxbase、pocketsphinx:(以 sphinxbase 为例,pocketsphinx 同理)键入下图中所示命令:

Android集成emq Android集成PocketSphinx_PocketSphinxDemo_18

中间会有一堆checking.........各种东西,结束状态如下图:

Android集成emq Android集成PocketSphinx_cygwin_19

接下来

Android集成emq Android集成PocketSphinx_Android集成emq_20

状态就不为大家展示啦,结束之后,继续

Android集成emq Android集成PocketSphinx_cygwin_21

我执行make之后出现了如下提示:

Android集成emq Android集成PocketSphinx_ndk_22

一直也没找到原因,不过好像对后来也没有什么影响!但一直想知道是怎么回事,请各位指教。

接下来:

Android集成emq Android集成PocketSphinx_Android集成emq_23

如果没有错误,就OK!

下一步:

同样在 Cygwin 下,进入 pocketsphinx/swig 文件夹,make:

Android集成emq Android集成PocketSphinx_cygwin_24

提示出现了错误,不用管他,我们想要的是swig里面生成的edu文件夹。将edu复制到PocketSphinxAndroidDemo 中的 jni 文件夹下。完成之后打开E:\study\android\sphinx\PocketSphinxAndroidDemo\jni文件夹下的Android.mk,修改下图中加深部分及圈中部分

Android集成emq Android集成PocketSphinx_Android集成emq_25

其中,cygdrive 后面为pocketsphinx,sphinxbase,PocketSphinxAndroidDemo的父文件夹

Android集成emq Android集成PocketSphinx_离线语音识别_26

打开 Cygwin,进入 PocketSphinxAndroidDemo 的 jni 文件夹,执行 ndk-build,没错的话 OK !!

到这,已经完成的差不多啦。

5.Eclipse微改

导入PocketSphinxAndroidDemo 工程文件,如果出现一个红色的叹号,右键-Android tools-fix project properties。如果出现红叉,但是程序中没有提示出是哪里出错,则有可能是可能是jar包引入问题,在build path里面看看有没有多余的jar包,有的话删掉!我在配置eclipse的时候出现了这样的一个问题,就是在第一遍配置的时候有点乱,我就想重新配置,于是将这个项目删除,同时delete project contents on disk.重新解压出了一个PocketSphinxAndroidDemo再导入的时候RecognizerTask里面有各种错误,很矛盾,后来在心里默默地骂了自己一通,重新解压出的文件没有做上图中的处理。(哎,大家不要像我一样啊),在这里曾看到一篇文章说接下来需要进行:右键工程,打开属性,构建器,右侧会发现 SWIG 和 NDK,对SWIG和NDK的参数进行了配置,在这里我没有改那些也是可以运行的!!

最后一步,将把 pocketsphinx/model/hmm/en_US 里的 hub4wsj_sc_8k,pocketsphinx/model/lm 放入手机的某个文件夹

Android集成emq Android集成PocketSphinx_离线语音识别_27

将RecognizerTask类里的圈圈中部分改成你自己的位置!!!运行程序出现下图则大功告成

Android集成emq Android集成PocketSphinx_ndk_28

推荐:

1.http://gaebolg.blog.163.com/blog/static/19826906820136232810723/

2.http://ucla.jamesyxu.com/?p=118