Pocketsphinx Android 与 Phonegap 应用程序的集成

2024-01-16

我正在尝试将 Sphinx 与我的 Phonegap 应用程序集成,并遵循 pocketsphinx-android-demo,但在启动时出现 RuntimeException,详细信息如下:

E/OADemo  (15835): java.lang.RuntimeException: Decoder_setSearch returned -1
E/OADemo  (15835):  at edu.cmu.pocketsphinx.PocketSphinxJNI.Decoder_setSearch(Native    Method)
E/OADemo  (15835):  at edu.cmu.pocketsphinx.Decoder.setSearch(Unknown Source)
E/OADemo  (15835):  at edu.cmu.pocketsphinx.SpeechRecognizer.startListening(Unknown Source)
E/OADemo  (15835):  at cn.fsll.oademo.OADemo.switchSearch(OADemo.java:103)
E/OADemo  (15835):  at cn.fsll.oademo.OADemo.access$100(OADemo.java:22)
E/OADemo  (15835):  at cn.fsll.oademo.OADemo$1.onPostExecute(OADemo.java:53)
E/OADemo  (15835):  at cn.fsll.oademo.OADemo$1.onPostExecute(OADemo.java:34)
E/OADemo  (15835):  at android.os.AsyncTask.finish(AsyncTask.java:632)
E/OADemo  (15835):  at android.os.AsyncTask.access$600(AsyncTask.java:177)
E/OADemo  (15835):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
E/OADemo  (15835):  at android.os.Handler.dispatchMessage(Handler.java:102)
E/OADemo  (15835):  at android.os.Looper.loop(Looper.java:136)
E/OADemo  (15835):  at android.app.ActivityThread.main(ActivityThread.java:5050)
E/OADemo  (15835):  at java.lang.reflect.Method.invoke(Native Method)
E/OADemo  (15835):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
E/OADemo  (15835):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)

那么,我该如何解决这个问题呢?任何帮助表示赞赏。

package cn.fsll.oademo;

import static android.widget.Toast.makeText;
import static edu.cmu.pocketsphinx.SpeechRecognizerSetup.defaultSetup;

import android.content.Context;
import android.os.Bundle;
import android.os.AsyncTask;
import android.widget.Toast;
import android.util.Log;

import java.io.File;
import java.io.IOException;

import edu.cmu.pocketsphinx.Assets;
import edu.cmu.pocketsphinx.Hypothesis;
import edu.cmu.pocketsphinx.RecognitionListener;
import edu.cmu.pocketsphinx.SpeechRecognizer;

import org.apache.cordova.*;

public class OADemo extends CordovaActivity implements RecognitionListener {
    private static final String KWS_SEARCH = "wakeup";
    private static final String KEYPHRASE = "oa";

    private final String LOGTAG = "OADemo";
    private SpeechRecognizer recognizer;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        super.init();

        new AsyncTask<Void, Void, Exception>() {
            @Override
            protected Exception doInBackground(Void... params) {
                try {
                    Assets assets = new Assets(OADemo.this);
                    File assetDir = assets.syncAssets();

                    setupRecognizer(assetDir);
                } catch (IOException ex) {
                    Log.e(LOGTAG, Log.getStackTraceString(ex));
                    return ex;
                }

                return null;
            }

            @Override
            protected void onPostExecute(Exception ex) {
                if(null == ex) {
                    switchSearch(KWS_SEARCH);
                } else {
                    Log.e(LOGTAG, Log.getStackTraceString(ex));
                }
            }
        }.execute();

        super.loadUrl(Config.getStartUrl());
    }

    @Override
    public void onPartialResult(Hypothesis hypothesis) {
        Log.d(LOGTAG, "onPartialResult");
        onResult(hypothesis);
    }

    @Override
    public void onResult(Hypothesis hypothesis) {
        Log.d(LOGTAG, "onResult");

        String text = hypothesis.getHypstr();

        if(text.equals(KEYPHRASE)) {
            recognizer.stop();
            // TODO: start iflytek speech recognizator
        }
    }

    @Override
    public void onBeginningOfSpeech() {
        Log.d(LOGTAG, "onBeginningOfSpeech");
    }

    @Override
    public void onEndOfSpeech() {
        Log.d(LOGTAG, "onEndOfSpeech");

        switchSearch(KWS_SEARCH);
    }

    private void toast(final String msg) {
        makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
        Log.e(LOGTAG, msg);
    }

    private void switchSearch(final String searchName) {
        Log.d(LOGTAG, "switchSearch");

        try {
            recognizer.stop();
            recognizer.startListening(searchName);
        } catch(Exception ex) {
            Log.e(LOGTAG, Log.getStackTraceString(ex));
        }
    }

    private void setupRecognizer(final File assetsDir) {
        Log.d(LOGTAG, "setupRecognizer");

        File modelsDir = new File(assetsDir, "models");
        recognizer = defaultSetup()
            .setAcousticModel(new File(modelsDir, "hmm/en-us-semi"))
            .setDictionary(new File(modelsDir, "dict/cmu07a.dic"))
            .setRawLogDir(assetsDir).setKeywordThreshold(1e-20f)
            .getRecognizer();

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

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pocketsphinx Android 与 Phonegap 应用程序的集成 的相关文章

随机推荐

  • 如何使用R连接两台计算机?

    是否可以在两台不同计算机上的两个 R 会话之间打开通信流 如果会话位于同一台计算机上 我使用套接字来连接会话 我想对于两台不同的计算机 我应该尝试网络套接字 httpuv支持 R 作为 Web 套接字服务器 但不幸的是 我找不到任何支持 R
  • WPF MVVM 在代码后面绑定动态控件并传入View

    我正在使用 MVVM 开发 WPF 应用程序 我有两页 我在第 1 页中有多个 UserControl 在从第 1 页选择 UserControl 时 我想在第 2 页中显示所选的 userControl 下面是我的代码 视图模型代码 pu
  • 无法在 Android Studio 中启动模拟器

    我尝试在 ubuntu 14 04 中的 android Studio 模拟器中启动应用程序 它显示以下错误 gradle 构建过程中显示错误 home next NTE MachineSetup android sdk linux too
  • JSF 和 f:ajax 用于隐藏/显示 div

    我正在考虑在我的网络应用程序上制作一个可隐藏 可显示的菜单 在此之前 我为此目的广泛使用了 PHP 和 AJAX 然而 由于 HTML 元素 id 在 JSF 框架中重新生成 我发现这种方法至少在我的范围内不再可行 我已经阅读了 JSF 中
  • AMD 结构化网络应用程序中的 Mixpanel 2.2 - 例如需要.js

    我正在尝试在基于 Backbone js 和 require js 的单页面站点中使用 Mixpanel 事件跟踪 看着snippet https mixpanel com help reference tracking an event
  • PHP - preg_match - 如何将字符串大写/小写与其之前或之后的任何内容匹配?

    我有一个函数的一部分 如下所示 if preg match bscript b userInput bannedWord script logHax return TRUE 这给我想要完成的任务带来了问题 因为它只会匹配确切的单词 scri
  • C# 自定义属性必需如果

    我刚刚开始接触自定义属性 我非常喜欢它们 我想知道是否可以创建一个应用于属性并表示同一对象中另一个属性的名称的属性 如果会检查引用的属性是否有值 如果有 则需要装饰属性 像这样的东西 RequiredIfNotNull ApprovedDa
  • 距某一点最近的地点

    我有下表 create table places lat lng point place name varchar 50 insert into places values POINT 126 4 45 32 Food Bar 要获取靠近特
  • toDF 的值不是 org.apache.spark.rdd.RDD 的成员

    我在其他帖子中读到过这个问题 但我仍然不知道我做错了什么 原则上 添加这两行 val sqlContext new org apache spark sql SQLContext sc import sqlContext implicits
  • 拍照后如何从 ImageView 保存图像

    我从图库中挑选照片或用相机拍摄 如果我将图片放入 imageView 中 然后单击确认按钮 我该如何保存该图片 我必须使用 saveState 吗 请发表一些评论 谢谢 protected void onActivityResult int
  • 错误页面上的错误报告表格

    我在 JBoss 7 1 和 Richfaces 4 1 中有一个 JSF Web 应用程序 我尝试在 web xml 中配置自定义错误页面 但遇到了问题 这不适用于 AJAX 请求 作为我尝试使用的解决方案Omnifaces FullAj
  • 空无限循环和GC(JVM)。请说明一下效果

    我的空无限循环 public static void main String args while true And profiling in Java VisualVM picture 正如你所看到的 我不创建对象 为什么要改变堆 请解释
  • 对于给定的密码和盐,Python 不会派生出与 Keycloak 或在线密码哈希器相同的哈希键

    我的用例是我需要将一些密码从 Keycloak 迁移到 Django 我在 Keycloak 上的示例密码是 qwerty123 Keycloak DB中生成的对应哈希是这样的 value PQzhC1QBMBHY wBUZB4iWV0jt
  • 使用 libcurl 下载目录中的所有文件

    我是 libcurl 的新手 找到了一种从 ftp 服务器下载单个文件的方法 现在我的要求是下载目录中的所有文件 我猜 libcurl 不支持它 请建议 libcurl 如何下载目录中的所有文件 或者是否有其他类似于 libcurl 的库
  • 如何在 Liferay 中获取全局(公司)组 ID?

    如何在不访问的情况下获取Liferay中的全局 公司 组IDThemeDisplay PS 与ThemeDisplay很简单 themeDisplay getCompanyGroupId 当你只有一个时Company在您的门户中 Compa
  • 在 JavaScript 中交换数组元素

    有没有更简单的方法来交换数组中的两个元素 var a list x b list y list y a list x b 您只需要一个临时变量 var b list y list y list x list x b Or with ES6
  • 使用eclipse和maven 2,如何获取sqljdbc4的依赖关系?

    我正在使用 eclipse 和 maven 2 插件 我想添加 sqljdbc4 的依赖项 我该怎么做 似乎无法通过 Eclipse 中的 添加依赖项 选项找到它 If sqljdbc4是 Microsoft SQL Server JDBC
  • 如何获取 Redshift 中的 UDF 列表?

    有没有一种简单的方法来获取 Redshift 中可用的所有 UDF 的列表 此外 我想查找具有参数类型的 UDF 并按名称搜索 UDF 您可以查询pg proc表以获取所有可用的 UDF 按名称过滤 您可以使用以下命令按名称进行过滤pron
  • unique_ptr 成员、私有复制构造函数与移动构造函数

    给定多个派生类的基类 目标是创建一个包装类 该包装类允许 STL 容器查看具有基接口的对象 尽管实际上可能会将不同的派生类添加到容器中 看从异构 std list 检索数据 https stackoverflow com q 1579634
  • Pocketsphinx Android 与 Phonegap 应用程序的集成

    我正在尝试将 Sphinx 与我的 Phonegap 应用程序集成 并遵循 pocketsphinx android demo 但在启动时出现 RuntimeException 详细信息如下 E OADemo 15835 java lang