将语音识别限制为字母数字单词
Posted
技术标签:
【中文标题】将语音识别限制为字母数字单词【英文标题】:Restrict speech Recognition to Alpha-numeric words 【发布时间】:2014-07-16 10:53:54 【问题描述】:我想使用语音识别来处理我的应用程序中的命令。我知道 在我的应用程序的任何给定点上,有效的命令是什么 那时想限制语音识别的结果 匹配反对。
我的意思是在我的应用程序中 .. 有效单词只有数字加字母。我的意思是像A13FG6
这样的数字。
我愿意 希望能够将语音识别限制为仅尝试匹配 alphaNumeric 话..限制词汇会增加成功的机会..
如何修改给定的代码以满足我的要求
提前谢谢..
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity
private TextView mText;
private SpeechRecognizer sr;
private static final String TAG = "MyStt3Activity";
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button speakButton = (Button) findViewById(R.id.btn_speak);
mText = (TextView) findViewById(R.id.textView1);
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
getClass().getPackage().getName());
SpeechRecognizer recognizer = SpeechRecognizer
.createSpeechRecognizer(this.getApplicationContext());
RecognitionListener listener = new RecognitionListener()
@Override
public void onResults(Bundle results)
ArrayList<String> voiceResults = results
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
if (voiceResults == null)
Log.e(TAG, "No voice results");
else
Log.d(TAG, "Printing matches: ");
for (String match : voiceResults)
Log.d(TAG, match);
mText.setText("results: " + match);
@Override
public void onReadyForSpeech(Bundle params)
Log.d(TAG, "Ready for speech");
@Override
public void onError(int error)
Log.d(TAG,
"Error listening for speech: " + error);
@Override
public void onBeginningOfSpeech()
Log.d(TAG, "Speech starting");
@Override
public void onBufferReceived(byte[] buffer)
// TODO Auto-generated method stub
@Override
public void onEndOfSpeech()
// TODO Auto-generated method stub
@Override
public void onEvent(int eventType, Bundle params)
// TODO Auto-generated method stub
@Override
public void onPartialResults(Bundle partialResults)
// TODO Auto-generated method stub
@Override
public void onRmsChanged(float rmsdB)
// TODO Auto-generated method stub
;
recognizer.setRecognitionListener(listener);
recognizer.startListening(intent);
/* speakButton.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
Intent intent = new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
// intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
getClass().getPackage().getName());
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
sr.startListening(intent);
// startActivityForResult(intent, 1010);
Log.i("111111", "11111111");
);*/
【问题讨论】:
您有没有找到更好的解决方案? google 是如何做到“ok google”的? 不,我没有找到任何解决方案。 【参考方案1】:您不能在 Android Speech API 中限制识别,它不支持语法。但是,您可以尝试CMUSphinx。请参阅链接下的示例,您可以定义一个仅使用字母数字的语法,它将离线工作,因此响应会非常快,您也可以调整准确性以获得最佳匹配。
【讨论】:
以上是关于将语音识别限制为字母数字单词的主要内容,如果未能解决你的问题,请参考以下文章