【问题标题】:Can't start pocketsphinx in Unity3d game无法在 Unity3d 游戏中启动 Pocketsphinx
【发布时间】:2016-04-21 11:24:57
【问题描述】:

我正在尝试将 PocketSphinx 集成到我的 Unity3d 项目中。
为了做到这一点,我已将Android demo project 集成到 Unity3d 项目的 Android Studio 导出中。

尝试使用该应用时,我收到一个异常,指出以下函数返回 -1。

public static final native void Decoder_setSearch(long var0, Decoder var2, String var3);

当我开始收听语音命令时会调用此方法:

recognizer.startListening("hello app", 10000);

为什么会这样?我该如何解决? 它在 PocketSphinx 示例项目中完美运行。

我是如何设置识别器的:

Assets assets = new Assets(MyActivity.this);
File assetDir = assets.syncAssets();

recognizer = defaultSetup()
                .setAcousticModel(new File(assetDir, "en-us-ptm"))
                .setDictionary(new File(assetDir, "cmudict-en-us.dict"))
                .setRawLogDir(assetDir)
                .setKeywordThreshold(1e-45f)
                .setBoolean("-allphone_ci", true)
                .getRecognizer();

recognizer.addListener(MyActivity.this);
recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE);

...以及来自 logcat (complete file) 的更多信息:

01-29 18:01:12.989 4237-4237/com.myName.pocketSphinxTest I/SpeechRecognizer: Start recognition "hello app"
01-29 18:01:12.989 4237-4237/com.myName.pocketSphinxTest D/AndroidRuntime: Shutting down VM
01-29 18:01:12.989 4237-4237/com.myName.pocketSphinxTest W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4157fd58)
01-29 18:01:12.989 4237-4237/com.myName.pocketSphinxTest E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: com.myName.pocketSphinxTest, PID: 4237
                                                                             java.lang.Error: FATAL EXCEPTION [main]
                                                                             Unity version     : 5.2.2f1
                                                                             Device model      : Osterhout_Design_Group R7-W
                                                                             Device fingerprint: R7/apq8084/apq8084:4.4.4/KTU84P/ODG_R7_V3.1.12:user/release-keys
01-29 18:01:13.019 4237-4237/com.myName.pocketSphinxTest I/Process: Sending signal. PID: 4237 SIG: 9

【问题讨论】:

  • 您似乎在 setSearch 中错误地指定了资产的路径。您可以在 logcat 输出中找到详细信息
  • @NikolayShmyrev 我很确定我没有。请查看我附加到我的问题的附加代码。 :)
  • 你需要提供logcat输出,而不仅仅是代码
  • @NikolayShmyrev 我做到了。
  • @NikolayShmyrev ...这是完整的 logcat 文件:snippi.com/raw/e8tjh6k

标签: android unity3d pocketsphinx pocketsphinx-android


【解决方案1】:

setSearch 在startListening 中被调用,并带有搜索的名称。在您的情况下,搜索的名称是 "hello app"。如果搜索 "hello app" 在返回 -1 之前未添加并抛出异常。源代码在 pocketsphinx-android 源代码中可用。

该错误通常意味着您之前没有添加名称为"hello app" 的搜索,从您的代码中您说KWS_SEARCH 具有与"hello app" 相同的值,但我认为有一个错字。您需要仔细检查搜索名称是否使用相同的字符串。我建议您在startListening 调用中将“hello app”字符串替换为KWS_SEARCH。

【讨论】:

  • 谢谢,但我在其他地方发现了错误。 onPartialResult(Hypothesis) 是用一个空参数调用的,我没有检查它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 2021-06-24
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
相关资源
最近更新 更多