Android下PocketSphinx的离线语音识别

Posted sununs11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android下PocketSphinx的离线语音识别相关的知识,希望对你有一定的参考价值。

这篇文章对工具包有比较详细的介绍:

http://www.cnblogs.com/huanghuang/archive/2011/07/14/2106579.html

官方的这篇教程http://cmusphinx.sourceforge.net/2011/05/building-pocketsphinx-on-android/很详细,另外还有这篇:http://0ucla.jamesyxu.com/?p=118,根据这两篇教程应该可以成功运行起PocketSphinxandroidDemo。

其实我一开始找到的教程是这篇:

Android平台使用PocketSphinx做离线语音识别,小范围语音99%识别率

这个比较坑爹,第一个链接http://www.cnblogs.com/huanghuang/archive/2011/07/14/2106579.html说在线提交的方法对中文是没有用的,真心不知道他是怎么办到的。

另外,http://leiwuluan.iteye.com/blog/1287305这篇文章里有一个apk,装来能用,只对“中国,美国,英国”一类的词识别比较好。

http://www.cnblogs.com/yin52133/archive/2012/07/12/2588201.html这个博主比较厉害,这篇文章还没仔细看,等到有时间再研究中文的识别了,现在英文的离线语音识别已经搞定。

下面说具体方法:

1.搭建Android开发环境和NDK配置就不说了,网上教程很多。

2.下载sphinxbase – snapshot,pocketsphinx – snapshot和PocketsphinxAndroidDemo – snapshot,然后吧sphinxbase和pocketsphinx放到同一个文件夹下,用./autogen.sh &&./configure && make && make install的方法先安装sphinxbase,再安装pocketsphinx。

3.把PocketSphinxDemo导入Eclipse,进入PocketSphinxDemo/jni文件夹,把Android.mk里的SPHINX_PATH变量改成sphinxbase和pocketsphinx的父目录。

4.在jni文件夹运行ndk-build命令。(当然,需要先配置好ndk)

5.在Eclipse里,PocketSphinxDemo项目的Properties中,选择Builders,可以看到SWIG和NDK,NDK的build其实可以通过4中的命令来完成,也可以通过eclipse自动完成。
选择NDK,点击Edit按钮,出现的框中,在Location区域选择ndk文件夹,然后点击Refresh选项卡,选择“The project containing the selected resource”,点击Build Options选项卡,取消选择“Specify working set of relevant resources”。
选择SWIG,点击Edit,在Refresh选项卡中选择 “The folder containing the selected resource”,在Build Options选项卡中取消选择“Specifiy working set of relevant resources”。

6.把手机和电脑连接,把pocketsphinx/model/hmm/en_US里的hub4wsj_sc_8k,hmm/en_US,lm/en_US放入手机的某个文件夹,如用adb push把使手机存在如下文件或文件夹:

/sdcard/Android/data/edu.cmu.pocketsphinx/hmm/en_US/hub4wsj_sc_8k
/sdcard/Android/data/edu.cmu.pocketsphinx/lm/en_US/hub4.5000.dic
/sdcard/Android/data/edu.cmu.pocketsphinx/lm/en_US/hub4.5000.DMP

7.在PocketSphinxDemo项目中使 RecognizerTask.java里c.setString函数中的参数符合6中存放的文件和文件夹。

8.构建运行。


以上是关于Android下PocketSphinx的离线语音识别的主要内容,如果未能解决你的问题,请参考以下文章

我的 Android 应用程序中的离线语音识别

在我的应用程序中使用 Android 4.1 (Jelly Bean) 中的离线语音到文本?

ios应用中的离线语音输入

Vosk可以用于Unity的离线语音识别

Vosk可以用于Unity的离线语音识别

python语音唤醒-pocketsphinx