有没有办法通过我自己的短语进行语音激活?

时间:2014-12-12 09:15:21

标签: android voice-recognition

我想创建一个简单的应用程序,它将通过语音命令完成一些任务。我想开始用我自己的短语来监听命令,例如" Hello设备"。 Android语音识别API是否可行?如何通过我自己的短语实现激活?

我在询问之前正在搜索此内容,但无法找到有关激活的信息。我知道口袋里的狮身人面像,但我需要用Google API来实现它。

3 个答案:

答案 0 :(得分:3)

CMUSphinx是解决此问题的真正解决方案,连续语音识别需要占用太多资源,并且会在一小时内耗尽电池电量,而关键字定位模式的速度足以检测到一个关键短语。

您可能会对Google在v21中为类似任务引入新API感兴趣:

http://developer.android.com/reference/android/service/voice/AlwaysOnHotwordDetector.html

您可以使用它,但会严重限制您的用户群。

答案 1 :(得分:1)

发送RecognizerIntent

Here您有一个如何实施语音识别的教程。

  

我想开始用我自己的短语来监听命令,如a   “你好设备”。是否可以使用Android语音识别API?

您无法录制短语,但您可以收听所有内容,然后向识别引擎询问其听到的单词。

教程中的相关代码片段:

// Populate the wordsList with the String values the recognition engine thought it heard
ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

所以,你可以检查它是否听说过你的普通英语命令,比如“你好设备”,如果是的话,你可以做点什么。

答案 2 :(得分:0)

import android.speech.RecognizerIntent;

import android.content.Intent;

import java.util.ArrayList;

import java.util.List;

步骤1:将其放入一个启动语音识别器的方法中,你可以命名任何有意义的东西,如void startSpeech()或其他东西。

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass().getPackage().getName());
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);

第2步:这将要求我们覆盖onActivityResult()方法以使用上述方法。

然后开始实现下面的onActivityResult()方法:

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{

String wordStr = null; 

    String[] words = null;
    String firstWord = null;
    String secondWord = null;

    ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

    if(requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK)

    {
        wordStr = matches.get(0);
        words = wordStr.split(" ");
        firstWord = words[0];
        secondWord = words[1];
    }

    if (firstWord.equals("open"))
    {

      // DO SOMETHING HERE
    }

}