2

我正在尝试Pocket Sphinx Library.

我的方法是,

我刚刚下载了他们的 Android 演示项目。在 Eclipse 中导入它,进行干净构建并在设备上运行它。它运行成功。

在此之后,我将libs文件夹从演示项目复制到我自己的项目中。我复制了我自己项目中assets文件夹内容。然后我根据这篇文章编辑了文件内容。digits.gram

然后Listener在我的活动中实现并添加addKeywordSearch到它。

我的问题:

  1. 这种方法在我们自己的项目中实现这个库是否正确?我们可以复制粘贴所有文件,.gram根据需要修改文件并运行它吗?还是我们需要做一些其他的步骤来生成.gram文件?

  2. 当我尝试使用上述方法时,项目在设备上成功运行了几次。但在那之后它开始显示以下错误。

    E/cmusphinx(10470): ERROR: "kws_search.c", line 158: The word '/1e-20/' is missing in the dictionary
    E/AndroidRuntime(10470): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.uwemo.myvdemo/com.uwemo.myvdemo.MainActivity}: java.lang.RuntimeException: Decoder_setSearch returned -1
    

但是/1e-20/存在于我的digits.gram文件中。

digits.gram文件内容:

up /1e-20/
down /1e-15/
left /1e-15/
right /1e-15/
here /1e-15/
  1. 我注意到一件事,当我对 Pocket Sphinx 的演示项目进行干净构建并运行它时,它会重新创建digits.gram.md5文件。但是当我将所有内容复制粘贴到我自己的项目中并进行 cleant-build 时,这些文件并没有重新创建。这是正常的吗?

  2. 我们项目中的所有文件是否需要像演示项目中一样?或者我可以从我自己的项目中删除一些未使用的文件吗?任何必要文件的列表(在资产文件夹或库或其他文件中)都将非常有帮助。

请让我知道我应该用什么方法在我自己的项目中成功实施它。

我的活动代码

public class MainActivity extends Activity implements RecognitionListener{

    private static final String DIGITS_SEARCH = "digits";
    private SpeechRecognizer recognizer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try
        {
            Assets assets = new Assets(MainActivity.this);
            File assetDir = assets.syncAssets();
            setupRecognizer(assetDir);

            Toast.makeText(getApplicationContext(), "Speech Recognizer Started", Toast.LENGTH_SHORT).show();
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }

    @Override
    public void onBeginningOfSpeech() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onEndOfSpeech() {
        // TODO Auto-generated method stub
        reset();
    }

    @Override
    public void onPartialResult(Hypothesis arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onResult(Hypothesis hypothesis) {
        // TODO Auto-generated method stub
        if (hypothesis != null){
            String text = hypothesis.getHypstr();
            Toast.makeText(getApplicationContext(), "you got ::"+text, Toast.LENGTH_SHORT).show();
        }
    }

    private void setupRecognizer(File assetsDir){
        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);

        File digitsGrammar = new File(modelsDir, "grammar/digits.gram");
        recognizer.addKeywordSearch(DIGITS_SEARCH, digitsGrammar);

        reset();
    }

    private void reset(){
        recognizer.stop();
        recognizer.startListening(DIGITS_SEARCH);
    }
}

我的项目结构如下

在此处输入图像描述

4

0 回答 0