2012-01-25 38 views
3

争取做语音识别,而无需使用PocketSphinx referrring到现场网络,Android的离线语音识别使用PocketSphinx

http://swathiep.blogspot.com/2011/02/offline-speech-recognition-with.html

遵循同样的,因为它是什么。

在模拟器中运行该程序,因为它不会支持音频,崩溃(不强制关闭)。但在试图在手机上运行时,应用程序刚刚打开和关闭(不强制关闭)。是否需要添加任何更多的库来运行这个应用程序????????? 请快回复任何人........

+0

我有同样的问题,你找到解决方案吗?我试过调试,但似乎崩溃的地方是pocketsphinx C代码。 – pzo

回答

1

CMUSphinx wiki上提供了关于android上pocketsphinx的最新文档。

基本上你需要从Github拉动演示,将它导入到android studio并运行,这样你就可以测试基本的功能。

要开始集成到自己的应用程序执行以下操作:

引用该库在Android项目

图书馆分布结构无关的pocketsphinx-Android的5prealpha-nolib.jar和二进制。所以文件适用于不同的硬件架构。

在Android Studio中,您需要将jar文件放在app/libs文件夹中,并将jni .so文件放入app/src/main/jniLibs文件夹中。

包括资源文件

的标准方式运送资源文件与您的Android应用是把它们放在你的项目的资产/目录。但是为了让它们可用于pocketsphinx文件应该有物理路径,只要它们在.apk中就没有。来自pocketsphinx-android的资产类提供了一种方法来自动将资产文件复制到目标设备的外部存储。 edu.cmu.pocketsphinx.Assets#syncAssets同步从位于顶部assets/的assets.lst文件中读取项目的资源。在复制之前,如果存在相同的名称,则匹配资产的MD5校验和和外部存储上的文件。如果存在不完整的信息(外部存储器上没有文件,没有任何两个.md5文件),或者存在散列不匹配,它只会进行实际的复制。 PocketSphinxAndroidDemo包含生成assets.lst和.md5文件的ant脚本,查找assets.xml。

请注意,如果ant构建脚本在构建过程中无法正常运行,资产可能不同步。确保脚本自己运行或创建md5文件和assets.lst。

要在应用程序执行以下操作

包括应用程序/ asset.xml构建文件到您的应用程序 编辑的build.gradle构建文件运行资产整合资产同步。XML:

ant.importBuild 'assets.xml' 
    preBuild.dependsOn(list, checksum) 
    clean.dependsOn(clean_assets) 

这应该做的伎俩

示例应用程序

的类和方法pocketsphinx,机器人被设计成类似于在pocketsphinx使用相同的工作流程中,除了组织为基本的数据结构使用它们的类和函数被转换成相应类的方法。所以,如果你熟悉pocketsphinx,你也应该对pocketsphinx-android感到舒服。

SpeechRecognizer是访问解码器功能的主要类。它是在SpeechRecognizerSetup构建器的帮助下创建的。 SpeechRecognizerBuilder允许配置主要属性以及解码器的其他参数。参数键和值与通过命令行传递给pocketsphinx二进制文件的参数相同。阅读更多关于调整pocketsphinx性能的信息。

recognizer = defaultSetup() 
     .setAcousticModel(new File(assetsDir, "en-us-ptm")) 
     .setDictionary(new File(assetsDir, "cmudict-en-us.dict")) 
     .setRawLogDir(assetsDir).setKeywordThreshold(1e-20f) 
     .getRecognizer(); 
recognizer.addListener(this); 

解码器配置是漫长的过程,包括IO操作,所以建议以异步任务内运行英寸

解码器支持多个命名的搜索,你可以在运行时

// Create keyword-activation search. 
recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE); 
// Create grammar-based searches. 
File menuGrammar = new File(assetsDir, "menu.gram"); 
recognizer.addGrammarSearch(MENU_SEARCH, menuGrammar); 
// Next search for digits 
File digitsGrammar = new File(assetsDir, "digits.gram"); 
recognizer.addGrammarSearch(DIGITS_SEARCH, digitsGrammar); 
// Create language model search. 
File languageModel = new File(assetsDir, "weather.dmp"); 
recognizer.addNgramSearch(FORECAST_SEARCH, languageModel); 

切换一旦你安装了解码器,并添加所有你就可以开始识别搜索与

recognizer.startListening(searchName); 

你会得到语音通知在识别器侦听器的onEndOfSpeech回调中结束事件。然后你可以调用recognizer.stop或者recognitionizer.cancel()。后者将取消认可,前者会导致最终结果通过你的onResult回调。

在识别期间,您将在onPartialResult回调中获得部分结果。

您还可以访问swig中包装有Java类的其他Pocketsphinx方法,查看解码器,假设,Segment和NBest类的详细信息。

+2

无法理解他们的文档。 –

+1

复制粘贴的答案也会很快失效。 –