当前位置:   article > 正文

关于Windows 环境下,Android 平台使用PocketSphinx做离线语音识别_android edu.cmu.pocketsphinx

android edu.cmu.pocketsphinx

        折腾了一天终于把这个Demo跑起来,虽然我还是不太明白,还是想把它记录下来,免得很快又忘记了。有一篇博客很详细地介绍这个:http://blog.csdn.net/zouxy09/article/details/7978108 

一、搭建NDK编译环境和安装cygwin


        搭建NDK编译环境和安装cygwin:http://blog.csdn.net/pengchua/article/details/7582949cygwin的下载和安装过程会比较久,耐心等待。安装后,例如

        cygwin目录为:D:\Program Files\cygwin   
        android-ndk-r9解压后的目录:E:\software\android-ndk-r9

        在cygwin的安装目录中修改 home\<你的用户名>\.bash_profile 文件中最后添加环境变量,我这里的配置是 
NDK=/cygdrive/e/software/android-ndk-r9,
打开Cygwin就可以输入:
cd $NDK
       能够进入工作目录表示OK。

二、编译语音识别文件

(1)Sphinxbase和pocketsphinx的下载链接: (下载.tar.gz版本,不要下win32的)


(2)demo的下载地址:

PocketSphinxAndroidDemo    http://sourceforge.net/p/cmusphinx/code/HEAD/tree/

已经上传到csdn了,找不到的到这里下: http://download.csdn.net/detail/aaaeee2011/6425963

将前2个文件放到相应目录去,例如 E:\Sphinx 解压后 去掉0.8版本号 ,得到pocketsphinx和sphinxbase文件夹,demo也放进里面,如下:


       
(3)安装swig(You need swig 1.3, for now we do not support newer swig like 2.0,老外说这个不支持2.0以上的版本,下载swig-1.3.40)
swig-1.3.40http://sourceforge.net/projects/swig/files/swig/swig-1.3.40/  解压到相应目录,例如我放在:E:\software\Tools\swigwin-1.3.40
设置电脑上的环境变量,右键我的电脑-属性-高级系统设置-环境变量,在PATH中添加swig的存放目录。打开cgywin安装swig,cd进去存放目录
cd /cygdrive/e/software/Tools/swigwin-1.3.40
然后依次执行
  1. sh autogen.sh
  2. ./configure
  3. make
  4. make install
输入swig -version能查看相应版本表示已安装成功
(4)编译,打开cygwin进入到该目录,下面的make install指令好像需要root权限,(切换到root权限的办法是:修改cygwin/etc/passwd文件中的 500:513 0:0 ,出自这位博主:root),打开之前可以先修改这个。 下面就是编译的工作了,cd进去两个文件夹分别执行(老外说windows下sphinxbase不用编译,我都编译了一下,好像没关系)
  1. sh autogen.sh
  2. ./configure
  3. make
  4. make install
编译完这两个后,查看pocketsphinx\swig文件夹里面应该只有三个文件,还需要编译出来一个edu的文件夹,进入swig目录
cd /cygdrive/e/Sphinx/pocketsphinx/swig
执行make, 然后报错,说找不到包,大神说这样解决: http://cgwxyz.blog.163.com/blog/static/262806020105307929424/ 。进去pocketsphinx文件夹和sphinxbase文件夹分别将里面的*.pc文件拷贝进cygwin安装目录pkgconfig文件夹里面,如 D:\Program Files\cygwin\lib\pkgconfig。 回来继续make

还是报错,不清楚是什么原因,不过edu文件夹已经生成了,把这个文件夹拷贝到Demo程序的jni文件夹下,用linux执行也可以

cp -r ./pocketsphinx/swig/edu ./PocketSphinxAndroidDemo/jni/


(5)执行ndk-build
用ndk编译前要设置Android.mk的路径,在PocketSphinxAndroidDemo/jni/找到Android.mk,记事本修改里面内容
5 行改为sphinxbase和pocketsphinx所在的目录,如(去掉$HOME,路径前加上/cygdrive/)
SPHINX_PATH := /cygdrive/e/Sphinx
第162行将(之前一直编译出错,好像就是因为这个,在stack overflow上说这样解决的)
LOCAL_STATIC_LIBRARIES := sphinxutil sphinxfe sphinxfeat sphinxlm pocketsphinx
改为:
LOCAL_STATIC_LIBRARIES := pocketsphinx sphinxlm sphinxfeat sphinxfe sphinxutil
保存后,在cygwin中进入到PocketSphinxAndroidDemo/jni/目录
cd /cygdrive/e/Sphinx/PocketSphinxAndroidDemo/jni

使用NDK build,

$NDK/ndk-build -B


终于 生成了.so文件( libs/armeabi/libpocketsphinx_jni.so

三、导入Demo到Eclipse中


打开Eclipse-ImortProjects,导入PocketSphinxAndroidDemo,会报错没关系

右键工程-Properties-Builders,点击NDK Build Edit编辑,Main标签
 Location修改为cygwin的bash.exe所在目录,Working Directory修改为cygwin的bin文件夹,Arguments修改为
--login -c "cd /cygdrive/f/MyCode/Android/voice/PocketSphinxDemo && $NDK/ndk-build"
    (/cygdrive/f/MyCode/Android/voice/PocketSphinxDemo为当前工程所在的文件夹,注意修改)


Refresh标签选择“The project containing the selected resource”,Build Options标签去掉“Specify working set of relevant resources”
SWIG的Edit也类似,Main标签不用修改,
Refresh标签选择“The folder containing the selected resource”Build Options标签去掉“Specifiy working set of relevant resources”

到此为止,如果工程没报错,PC端的设置已经完成

四、往手机SDcard添加文件


在手机的/sdcard/Android/data/下添加文件夹edu.cmu.pocketsphinx,在RecognizerTask.java文件里面说的很清楚,需要使用到这个目录下的文件
  1. public RecognizerTask() {
  2. pocketsphinx
  3. .setLogfile("/sdcard/Android/data/edu.cmu.pocketsphinx/pocketsphinx.log");
  4. Config c = new Config();
  5. /*
  6. * In 2.2 and above we can use getExternalFilesDir() or whatever it's
  7. * called
  8. */
  9. c.setString("-hmm",
  10. "/sdcard/Android/data/edu.cmu.pocketsphinx/hmm/en_US/hub4wsj_sc_8k");
  11. c.setString("-dict",
  12. "/sdcard/Android/data/edu.cmu.pocketsphinx/lm/en_US/hub4.5000.dic");
  13. c.setString("-lm",
  14. "/sdcard/Android/data/edu.cmu.pocketsphinx/lm/en_US/hub4.5000.DMP");
  15. /*
  16. c.setString("-hmm",
  17. "/sdcard/Android/data/edu.cmu.pocketsphinx/hmm/zh/tdt_sc_8k");
  18. c.setString("-dict",
  19. "/sdcard/Android/data/edu.cmu.pocketsphinx/lm/zh_TW/mandarin_notone.dic");
  20. c.setString("-lm",
  21. "/sdcard/Android/data/edu.cmu.pocketsphinx/lm/zh_TW/gigatdt.5000.DMP");
  22. */
  23. .....
  24. .....
  25. }


   
 对应程序在edu.cmu.pocketsphinx目录下创建两个文件夹lm和hmm,将pocketsphinx/model/hmm下的en_US文件夹放进hmm,pocketsphinx/model/lm下的en_US文件夹放进lm。
然后就可以运行程序到手机中了,不对词典和模型文件进行修改,识别率还是比较低的。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/465294
推荐阅读
相关标签
  

闽ICP备14008679号