• Android语音识别


     

           语音识别技术在手机上应用得相当广泛,人类日常最频繁的沟通方式是语音,而在手机应用中,大部分是通过硬件手动输入,目前这依然是主要与手机互动的方 式。但是随着手机软硬件功能的不断提升,可以预见在不久的将来,语音交流将是人机交互的主要方式。IPhone手机内置的Siri语音助手就是一个很好的 例子。而鲜为人知的是其使用的语音识别技术来自于Google。而想而知,作为Google力推的Android自然被植入了最核心的语音识别技术,其还 整合了Google的云端技术以更好的实现人机语音互动。


         Android中主要通过RecognizerIntent来实现语音识别,它主要包括一些常量来表示语音的模式等,如下图所示:


    常量

    描述

    ACTION_RECOGNIZE_SPEECH

    开启语音活动

    ACTION_WEB_SEARCH

    开启网络语音模式,结果将以网页搜索显示

    EXTRA_LANGUAGE

    设置语言库

    EXTRA_LANGUAGE_MODEL

    语音识别模式

    EXTRA_MAX_RESULTS

    返回的最大结果

    EXTRA_PROMPT

    提示用户可以开始语音

    EXTRA _RESULTS

    将字符串返回到一个ArrayList中

    LANGUAGE_MODEL-FREE_FORM

    在一种语言模式上自由语言

    LANGUAGE_MODEL-WEB_SEARCH

    使用语言模型在Web上搜索

    RESULT_AUDIO_ERROR

    返回结果时,音频遇到错误

    RESULT_CLIENT_ERROR

    返回结果时,客户端遇到错误

    RESULT_NETWORK_ERROR

    返回结果时,网络遇到错误

    RESULT_NO_MATCH

    没有检测到语音的错误

    RESULT_SERVER_ERROR

    返回结果时,服务器遇到错误

     

    这里我们只需要通过Intent来传递一个动作以及一些属性,然后通过startActivityForResult来开始语音,代码如下:


    1. 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_PROMPT, "开始语音");  


    当然,如果找不到设置,就会抛出 ActivityNotFoundException,所以我们需要捕捉这个异常。在以下的例子中,我们实现了一个简单的语音识别程序,当我们点击“点击 使用语音识别”按钮之后,开始语音,然后在onActivityResult方法中取得结果并显示出来,其中如果当前手机没有连接到互联网则会显示连接问 题,运行效果如以下所示:

    点击按钮后:                                        如果没联网会出现连接错误:



        

    向话筒说完“电脑”一词后:



    具体实现的代码如下:



    1. <span style="font-size:16px;">public class RecognizerIntent_TestActivity extends Activity {  
    2.     private static final int VOICE_RECOGNITION_REQUEST_CODE = 1;  
    3.   
    4.     private ListView mList;  
    5.     Button mButton;  
    6.   
    7.     @Override  
    8.     public void onCreate(Bundle savedInstanceState) {  
    9.         super.onCreate(savedInstanceState);  
    10.         setContentView(R.layout.main);  
    11.   
    12.         mButton = (Button) findViewById(R.id.button1);  
    13.         mButton.setOnClickListener(new myRecognizerIntentListener());  
    14.   
    15.         mList = (ListView) findViewById(R.id.listView1);  
    16.     }  
    17.   
    18.     public class myRecognizerIntentListener implements OnClickListener {  
    19.         public void onClick(View v) {  
    20.             try {  
    21.                 // 用Intent来传递语音识别的模式,并且开启语音模式  
    22.                 Intent intent = new Intent(  
    23.                         RecognizerIntent.ACTION_RECOGNIZE_SPEECH);  
    24.                 // 语言模式和自由形式的语音识别  
    25.                 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,  
    26.                         RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);  
    27.                 // 提示语言开始  
    28.                 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请开始语音");  
    29.                 // 开始语音识别  
    30.                 startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);  
    31.             } catch (ActivityNotFoundException e) {  
    32.                 Toast.makeText(RecognizerIntent_TestActivity.this, "找不到语音设备",  
    33.                         Toast.LENGTH_LONG).show();  
    34.             }  
    35.         }  
    36.     }  
    37.   
    38.     // 语音结束时的回调函数  
    39.     @Override  
    40.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    41.         if (requestCode == VOICE_RECOGNITION_REQUEST_CODE  
    42.                 && resultCode == RESULT_OK) {  
    43.             // 取得语音的字符  
    44.             ArrayList<String> results = data  
    45.                     .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);  
    46.             // 设置视图的更新  
    47.             mList.setAdapter(new ArrayAdapter<String>(this,  
    48.                     android.R.layout.simple_list_item_1, results));  
    49.             String resultsString = "";  
    50.             for (int i = 0; i < results.size(); i++) {  
    51.                 resultsString += results.get(i);  
    52.             }  
    53.             Toast.makeText(this, resultsString, Toast.LENGTH_LONG).show();  
    54.         }  
    55.         super.onActivityResult(requestCode, resultCode, data);  
    56.     }  
    57. }  
    58. </span>  


  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/xgjblog/p/3843221.html
Copyright © 2020-2023  润新知