zoukankan      html  css  js  c++  java
  • 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>  


  • 相关阅读:
    C语言关键字
    C语言返回值
    五、Vue:使用axios库进行get和post、用拦截器对请求和响应进行预处理、Mock(数据模拟)
    四、Vue过渡与动画、过渡css类名、自定义指定、过滤器
    三、深入Vue组件——Vue插槽slot、动态组件
    二、Vue组件(component):组件的相互引用、通过props实现父子组件互传值
    一、Vue环境搭建及基础用法
    Django(十三)状态保持 —— cookie与session+ajax异步请求+session记住登录状态+cookie记住登录名密码
    Django(十二)视图--利用jquery从后台发送ajax请求并处理、ajax登录案例
    Django(十一)视图详解:基本使用、登录实例、HttpReqeust对象、HttpResponse对象
  • 原文地址:https://www.cnblogs.com/xgjblog/p/3843221.html
Copyright © 2011-2022 走看看