二、PocketSphinx-Android编译与运行 PocketSphinx是CMU Sphinx开发的一款轻量级基于嵌入式应用开发的离线语音识别开源工具,其源代码由C实现并且支持linux/Android平台开发。PocketSphinx官方文档及工具下载:http://cmusphinx.sourceforge.net/wiki/download/,其中:
  • sphinxbase-0.8 :Pocketsphinx和Sphinxtrain所需的支持库
  • pocketsphinx-0.8 :为C编写的语音识别库
  • sphinxtrain-1.0.8: 声学模型训练工具
  • sphinx4-5prealpha:Java实现的语音识别库
  • cmuclmtk-0.7: 语言模型训练工具

1.解压pocketsphinx-0.8、PocketSphinxAndroidDemo、sphinxbase-0.8 到D:\Android(可自行更改),并将pocketsphinx-0.8、sphinxbase-0.8文件夹改名为pocketsphinx、sphinxbase(注意:由于是通过Cygwin来模拟linux运行环境,因此选择pocketsphinx-0.8.tar.gz和sphinxbase-0.8.tar.gz)另外,训练工具为cmuclmtk-0.7.tar.gz和sphinxtrain-1.0.8.tar.gz;
2.编译安装pocketsphinx、sphinxbase sphinxbase为例:运行Cygwin terminal,切换到sphinxbase所在的目录下分别执行"./autogen.sh" "./configure" "make" "mnake install"命令. 注:此时可能会提示错误,说明文件没装全,回 Cygwin 的 setup.exe 去下载
3.利用SWIG生成.java文件并拷贝至PocketSphinxAndroidDemo 的 jni 文件夹 (1)运行Cygwin终端,切换至pocketsphinx/swig 文件夹,执行make生成edu目录。 程序会提示jni.h不存在,这里可以先忽略。这步的主要目的是生成pocketsphinx/swig目录下一个edu目录,该目录下包含下列.java文件。
(2)将pocketsphinx/swig 文件夹下的edu目录,复制到 PocketSphinxAndroidDemo 中的 jni 文件夹,然后修改jni目录下的Android.mk。 (a)修改SPHIX_PATH路径,注意路径格式
(b)修改 LOCAL_STATIC_LIBRARIES,把后边的单词顺序改为 pocketsphinx sphinxlm sphinxfeat sphinxfe sphinxutil
(3)打开 Cygwin,进入 PocketSphinxAndroidDemo /jni 目录,执行ndk-build生成libpocketsphinx_jni.so。 位于D:\Android\pocketsphinx\PocketSphinxAndroidDemo\libs\armeabi\libpocketsphinx_jni.so.
注意:如果出现问题,则重复第2~3步骤,重新生成libpocketsphinx_jni.so
4.配置Eclipse(这步比较容易出错,重点在于配置DNK!) (1)导入 PocketSphinxAndroidDemo 工程文件,导入过程提示错误,无视即可。 导入方法详见: (2)打开Eclipse,Project->properties->builder:右侧会发现 SWIG 和 NDK a.配置SWIG 选择SWIG,点击Edit,在Refresh选项卡中选择 “The folder containing the selected resource”,在Build Options选项卡中取消选择“Specifiy working set of relevant resources”
b.配置NDK 选择NDK,点击Edit按钮,出现的框中,在Location区域选择ndk文件夹,然后点击Refresh选项卡,选择“The project containing the selected resource”,点击Build Options选项卡,取消选择“Specify working set of relevant resources”
c.配置好SWIG和NDK后,执行"build project"。出现warning可以不用理会,如果出现errors就需要检查Eclipse中SWIG和NDK配置是否正确。PS:之前我也参照过一些人些的博客和官方文档,但是发现最后都不行。出现问题的主要因素是DNK的配置问题,经过多次调试,我在官方文档http://ucla.jamesyxu.com/?p=118基础上,将DNK配置的Location改为bash.exe所在的路径。执行run as,成功实现Demo.
5.真机调试-给APP应用程序添加"声学模型"和"语言模型"(动态加载) (1) 在 PocketSphinxAndroidDemo 项目中使 RecognizerTask.java 里 c.setString 函数中的参数符合上述路径 (2) 代码编译成功后,在运行之前把 pocketsphinx/model/hmm/en_US 里的 hub4wsj_sc_8k,hmm/en_US,lm/en_US 放入手机的某个文件夹,在手机/sdcard/Android/data/目录下新建一个edu.cmu.pocketsphinx目录,再依次创建如下文件夹。
PS:"声学模型"、"语言模型"、APK下载: http://yunpan.cn/csxQgpjwP38PH提取码 9da5
6.遇到的一些问题 (1)编译pockeshinx时执行./autogen.sh,出现"You must have 'automake' installed"错误? 运行Cygwin下载器,发现已经安装了automake,更换automake版本后仍出现上述情况。通过查阅资料发现autooconf版本太低导致automake、 autoconf版本不匹配。为此,下载automake()、 autoconf()即可解决问题。详见automake、autoconf作用:http://wenku.baidu.com/linkurl=9ggAr3TnE0mvNsAqNK6zpHZIZrUYonI7l7m8z0gL__5X73BazYF6932n5nHFkjICeetKSQ3RVFXMJ-FdRakJzZNO9dZ0h6e_Idie8UH5X5a
(2)编译pockeshinx时执行./configure时候出现bison错误? 利用Cygwin 的 setup.exe 去下载bison即可解决。
(3)编译pockeshinx时执行"make"命令出现libtool错误? 将D:\Android\pocketsphinx\sphinxbase目录下的ltmain.sh文件中所有的"$echo"改为"$ECHO",重新./congfigure->make即可。
参考http://blog.csdn.net/eqera/article/details/7658031 (4)切换到...pocketsphinx/swig目录,执行"make"命令无法生成D:\Android\pocketsphinx\PocketSphinxAndroidDemo \libs\armeabi\libpocketsphinx_jni.so。 解决:libpocketsphinx_jni.so主要是在..pocketsphinx/swig执行make中生成,出现这个问题主要是由于swig版本不对,应使用swig.1.3.40这个版本,具体的安装方法详见我上一篇博客。然后,重新解压pocketsphinx到指定目录并运行cygwin终端,切换到pocketsphinx目录再次执行"./autogen.sh" "./configure" "make" "mnake install"命令,在切换到..pocketsphinx/swig执行make即可生成该文件. (5)在Eclipse执行"build project"出现"libpocketsphinx_jni.so"不存在或者出现其他错误? 解决:"build project"提示Error错误,主要考虑两个原因:一是,因为swig版本问题(要swig-1.3.40)导致没有生成libpocketsphinx_jni.so;二是,Eclipse中的DNK配置不正确。 (6)将apk程序安装到手机中运行是出现"闪一下"就退出了? 解决:两个原因,一是在因为NDK没有配置好;二是在运行程序之前,须在 手机/sdcard/Android/data/目录下新建一个edu.cmu.pocketsphinx目录,再依次创建如下文件夹存放已经下载好的"声学模型"和"语言模型"。
参考资料: http://gaebolg.blog.163.com/blog/static/19826906820136232810723/(重要参考) http://www.eoeandroid.com/thread-298033-1-1.html http://ucla.jamesyxu.com/?p=118(官方文档) http://leiwuluan.iteye.com/blog/1287305 http://blog.csdn.net/aaaeee2011/article/details/12884117

更多相关文章

  1. android 上傳圖片的幾種方法
  2. Android之DatePicker和TimePicker实现以及自定义大小
  3. Android中使用代码截图的各种方法总结
  4. android延时执行的几种方式
  5. Android(安卓)资源名获取R文件id
  6. Android(安卓)ViewPager+Fragment多层嵌套(使用问题处理)
  7. android DDMS 连接真机(己ROOT),用file explore看不到data/data文
  8. 关于Android(安卓)SDK包里没有/docs文件夹帮助文档的处理方法
  9. android中对apk文件反编译的方法(详细)

随机推荐

  1. android dumpsys
  2. Android学习笔记001_布局01
  3. android dumpsys
  4. android画布_Android画布
  5. Failed to find an AVD compatible with
  6. Android(安卓)的设计模式---观察者模式
  7. 在Android(安卓)studio中用网格布局做计
  8. android全景图
  9. android调用系统自带资源的两种方式
  10. android:windowIsTranslucent 导致 Activ