在我自己的Android应用程序中设置PocketSphinx库

时间:2015-07-21 15:04:20

标签: java android pocketsphinx pocketsphinx-android

我正试图在Pocket Sphinx Library的帮助下实施语音识别

我的方法是什么,

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

在此之后,我将libs文件夹从演示项目复制到我自己的项目中。 我在自己的项目中复制了assets文件夹内容,因为它是。 然后我根据this post编辑了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
    
  3. /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个文件。但是,当我在我自己的项目中复制粘贴并完成其清晰构建时,这些文件不会重新创建。这是正常的吗?

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

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

      我的活动代码

      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);
          }
      }
      

      我的项目结构如下

      enter image description here

0 个答案:

没有答案