语音识别技术研究

发布时间:2013-08-30 15:05:02   来源:文档文库   
字号:

基于Google技术的语音识别实现

前言

语音识别技术在手机上应用得相当广泛,我们日常最频繁的沟通方式是语音,在手机应用中,大部分是通过硬件手动输入,目前这依然是主要与手机互动的方式,然而对于像手机这种小巧的移动设备来说,使用键盘甚至是虚拟键盘打字是一件非常不爽的事情。于是, Google推出了强大的语音搜索业务。200811月,Google的语音搜索已经在iPhone平台上线,而Android1.5 SDK版本中也加强了语音识别功能,并应用到了搜索功能上,这的确是一个非常让人惊喜的更新。

Android语音识别

Android系统集成了Google的语音识别技术,我们只需要实现少量代码便可以是使用语音识别。

android语音识别方法一:使用intent调用语音识别程序

1、通过intent传递语音识别的模式

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

2、语言模式和自由形势的语音识别

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

3、设置语言库

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.CHINA.toString());

4、开始执行intent、语音识别

intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请开始说话");

5、开始

startActivityForResult(intent, 1234);

RecognizerIntent包括的常量:

android语音识别方法二:应用程序自己调用语音识别库

try {

InputStream audio = new MicrophoneInputStream(11025, 11025 * 5); //实现录音

String cdir = Recognizer.getConfigDir(null); // 获取语音识别配置目录

Recognizer recognizer = new Recognizer(cdir + "/baseline11k.par");

Recognizer.Grammar grammar = recognizer.new Grammar(cdir + "/grammars/VoiceDialer.g2g");

grammar.setupRecognizer();

grammar.resetAllSlots();

grammar.compile();

recognizer.start(); // 开始识别

while (true) { // 循环等待识别结果

switch (recognizer.advance()) {

case Recognizer.EVENT_INCOMPLETE:

case Recognizer.EVENT_STARTED:

case Recognizer.EVENT_START_OF_VOICING:

case Recognizer.EVENT_END_OF_VOICING:

continue; // 未完成,继续等待识别结果

case Recognizer.EVENT_RECOGNITION_RESULT:

for (int i = 0; i < recognizer.getResultCount(); i++) {

String result = recognizer.getResult(i,Recognizer.KEY_LITERAL);

mText.setText(result);

} // 识别到字串,显示并退出循环

break;

case Recognizer.EVENT_NEED_MORE_AUDIO:

recognizer.putAudio(audio) // 需要更多音频数据;

continue;

default:

break;

}

break;

}

recognizer.stop();

recognizer.destroy();

audio.close(); // 回收资源

} catch (IOException e) {

Log.d(TAG, "error", e);

}

android语音识别方法三:使用Service调用语音识别程序

// 回调类的实现  

class listener implements RecognitionListener {  

public void onReadyForSpeech(Bundle params){}  

public void onBeginningOfSpeech(){}  

public void onRmsChanged(float rmsdB){}  

public void onBufferReceived(byte[] buffer){}  

public void onEndOfSpeech(){}  

public void onError(int error) {}  

public void onResults(Bundle results) / 返回识别到的数据 

{

String str = new String();  

Log.d(TAG, "onResults " + results);  

List data = results.getStringList(SpeechRecognizer.RESULTS_RECOGNITION);  

for (int i = 0; i < data.size(); i++)  

{  

Log.d(TAG, "result " + data.get(i));  

str += data.get(i);  

}

mText.setText(str);        // 显示被识别的数据  

}

public void onPartialResults(Bundle partialResults){}  

public void onEvent(int eventType, Bundle params){}  

1、初始化识别工具,得到句柄  

SpeechRecognizer  sr = SpeechRecognizer.createSpeechRecognizer(this); 

2 注册回调类及函数  

sr.setRecognitionListener(new listener());

3、开始监听

sr.startListening(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)); 

主要原理:

首先将语音发送到google云端,然后云端处理,匹配相应的数据,发送到客户端。

注意问题:

语音识别技术,需要硬件的支持,如果我们的手机不支持语音识别,那么会抛出ActivityNotFoundException异常,所以我们需要针对不同的机型做好异常处理,在语音识别过程中,也需要网络的支持,所以我们也必须加上访问网络的权限。

本文来源:https://www.2haoxitong.net/k/doc/2bf6a0d79e314332396893ac.html

《语音识别技术研究.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式