理解 百度语音识别_python 百度语音识别语音识别代码 - CSDN
  • Android语音识别,简单的理解就是把语音转化为文字。 在日常中,语音识别,车载导航、语音输入等,虽然不一定准确,但用途广泛。 这里就介绍下谷歌原生的语音识别百度语音识别 谷歌语音识别 谷歌语音识别...

    Android语音识别,简单的理解就是把语音转化为文字。

    在日常中,语音识别,车载导航、语音输入等,虽然不一定准确,但用途广泛。

    这里就介绍下谷歌原生的语音识别与百度的语音识别

    谷歌语音识别

    谷歌语音识别做法很简单

    1、首先检测本地是否有语音识别工具,比如谷歌语音搜索,如果没有就结束;

    2、用intent意图表示语音识别;

    3、发送这个intent,并等待返回;

    4、显示返回的内容;

    具体的代码如下:

    package com.example.speak_csdn;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.Bundle;
    import android.speech.RecognizerIntent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    import android.app.Activity;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.content.pm.ResolveInfo;
    
    public class MainActivity extends Activity {
    
    	final int RESPONCERESULT=99;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		Button btnButton=(Button)findViewById(R.id.mybtn);
    		btnButton.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				speak();
    			}
    		});
    	}
    
    	public void speak()
    	{
                try{  
                 //通过Intent传递语音识别的模式,开启语音  
                 Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);  
                 //语言模式和自由模式的语音识别  
                 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);  
                 //提示语音开始  
                 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "开始语音");  
                 
                 //开始语音识别  
                 startActivityForResult(intent, RESPONCERESULT);  
                 }catch (Exception e) {  
                     // TODO: handle exception  
                     e.printStackTrace();  
                     Toast.makeText(getApplicationContext(), "找不到语音设备", 1).show();  
                 }  
    	}
    
    	@Override
    	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    		// TODO Auto-generated method stub
    		
    		//回调获取从谷歌得到的数据   
            if(requestCode==RESPONCERESULT && resultCode==RESULT_OK){  
                //取得语音的字符  
                ArrayList<String> results=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);  
                //谷歌可能有许多语音类似的返回,越往上优先级越高,这里列出所有的返回并拼接成字符串   
                String resultString="";  
                for(int i=0;i<results.size();i++){  
                    resultString+=results.get(i);  
                }  
                Toast.makeText(this, resultString, 1).show();  
            }  
    		super.onActivityResult(requestCode, resultCode, data);
    	}
    	
    	
    
    }
    

    代码完成了,注意要加上网络访问权限,因为这个是在线语音识读,代码关键的语句在以下几句:

     //通过Intent传递语音识别的模式,开启语音  
                 Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);  
                 //语言模式和自由模式的语音识别  
                 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);  
                 //提示语音开始  
                 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "开始语音");  
                 
                 //开始语音识别  
                 startActivityForResult(intent, RESPONCERESULT);  


    对应这个的布局语句很简单,只有一个button按钮。给这个按钮绑定事件,点击运行...


    这和我们预料的不同啊,网络没有问题,测试了WIFI和GPRS都是同样的结果。最终这只能归结为谷歌后台服务无法连接,你或者可以通过翻墙来看到效果。

    悲伤。

    那现在我们看看中国本地的语音识别,百度语音。

    百度语音识别

    百度语音识别,应用的是百度提供的SDK来实现。这个在百度的开放平台上可以看到很详细的说明。
    应用它的步骤如下:
    1、下载jar包;
    2、添加权限;
    3、在代码中,用给定的API来做语音识别;
    4、显示返回内容;

    jar包、so文件下载

    以下是从百度开放平台上下载的jar包以及so文件,用于后续的开发使用

    权限添加

    AndroidManifest.xml中添加需要的权限,如下:
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_SETTINGS" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <!-- 蓝牙录音 -->
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        <!-- 某些手机启动SCO音频连接需要此权限 -->
        <uses-permission android:name="android.permission.BROADCAST_STICKY" />
        <!-- 蓝牙录音检测耳机状态 -->
        <uses-permission android:name="android.permission.BLUETOOTH" />

    代码中使用API

    这个就是使用API的过程,如下代码:
    package com.example.baiduspeak_csdn;
    
    import java.util.ArrayList;
    
    import com.baidu.voicerecognition.android.ui.BaiduASRDigitalDialog;
    import com.baidu.voicerecognition.android.ui.DialogRecognitionListener;
    
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    import android.app.Activity;
    
    public class MainActivity extends Activity {
    
    	//百度自定义对话框
    	 private BaiduASRDigitalDialog mDialog = null;
    	 //对话框监听
    	 private DialogRecognitionListener mRecognitionListener;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		Button btnButton=(Button)findViewById(R.id.mybtn);
    		btnButton.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				speak_Baidu();
    			}
    		});
    		
    		mRecognitionListener = new DialogRecognitionListener() {
    
                @Override
                public void onResults(Bundle results) {
                    ArrayList<String> rs = results != null ? results.getStringArrayList(RESULTS_RECOGNITION) : null;
                    if (rs != null && rs.size() > 0) {
                    	Toast.makeText(MainActivity.this, rs.get(0), 1).show();
                    }
    
                }
            };
    	}
        //百度语音识别
    	public void speak_Baidu()
    	{
    		if (mDialog != null) {
                mDialog.dismiss();
            }
            Bundle params = new Bundle();
            //设置注册百度开放平台得到的值 API_KEY,SECRET_KEY
            params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, Constants.API_KEY);
            params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, Constants.SECRET_KEY);
            //设置对话框模式
            params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, Config.DIALOG_THEME);
            //根据设置新建对话框
            mDialog = new BaiduASRDigitalDialog(this, params);
            //设置对话框的监听
            mDialog.setDialogRecognitionListener(mRecognitionListener);
            //对话框设置
    	    mDialog.getParams().putInt(BaiduASRDigitalDialog.PARAM_PROP, Config.CURRENT_PROP);
    	    mDialog.getParams().putString(BaiduASRDigitalDialog.PARAM_LANGUAGE, Config.getCurrentLanguage());
    	    mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_START_TONE_ENABLE, Config.PLAY_START_SOUND);
    	    mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_END_TONE_ENABLE, Config.PLAY_END_SOUND);
    	    mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_TIPS_TONE_ENABLE, Config.DIALOG_TIPS_SOUND);
    	    mDialog.show();
    	}
    	 @Override
    	    protected void onDestroy() {
    	        if (mDialog != null) {
    	            mDialog.dismiss();
    	        }
    	        super.onDestroy();
    	    }
    
    }
    
    代码也只是简单的定义一个按钮,按钮绑定一个事件。
    事件发起时,我们设定了挺多参数,重要的有平台分配的APP_KEY,SECRET_KEY,PROP,语言的选择等。
    根据这些,百度对我们发出的声音,在服务端,得到匹配的内容并返回前端。
    效果如下:


    这个效果我们是能看到的。简单的用法就是这样的。类似谷歌语音,一个请求即可。

    源码

    源码包括以上的谷歌和百度语音识别,可供下载:

    展开全文
  • Android——百度语音识别

    万次阅读 多人点赞 2016-10-18 22:05:56
    百度语音识别的效果整体还不错,并且是免费的,很适合个人开发的APP,我这里先给大家简单介绍一下关于百度语音识别的开发,如果时间如许的情况下,我会把这两个平台的语音识别都给大家介绍一下。 现在我们开始吧!!...

    最近搞了一些关于语音的开发,我做的项目使用的讯飞的语音识别,但是有一个问题是讯飞的语音唤醒和离线语音合成是收费的,并且费用还不低,对于一般的小公司或者个人开发的小APP,还是很有压力的。百度语音识别的效果整体还不错,并且是免费的,很适合个人开发的APP,我这里先给大家简单介绍一下关于百度语音识别的开发,如果时间如许的情况下,我会把这两个平台的语音识别都给大家介绍一下。

    现在我们开始吧!!

    这是百度语音识别的文档 http://yuyin.baidu.com/docs/asr/166 。这里是百度文档给出的一部分解释:


    开发步骤:

    第一步:

    注册一个百度账号,这个我就不过多的说了。

    第二步:

    创建一个应用,设置相关内容和下载SDK,大体过程如下:





    第三步:

    创建一个Android工程,我这里是用的eclipse,如果使用Android studio 大体上是差不多的,我这里也不具体说了。

    第四步:

    下载SDK(链接http://yuyin.baidu.com/sdk)这里下载需要注意,如果你创建的应用太多,需要注意选择你需要的应用。

    下载后解压文件内容如下:


    这里是对下载的SDK的说明:


    将开发包中的libs和res目录分别合并到工程目录的libs和res目录。如果你不是用百度语音识别的界面可以不导入res文件的内容,我这里就不使用界面。

    第五步:

    配置AndroidManifest.xml,AndroidManifest.xml配置主要内容为:增加权限,填写鉴权信息,注册语音服务,注册对话框。具体示例如下:

    配置权限:

        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    配置其他事项:
    <pre name="code" class="html"> <span style="white-space:pre">	</span><!-- begin: baidu speech sdk-->
            <!-- 请填写应用实际的APP_ID -->
            <meta-data android:name="com.baidu.speech.APP_ID" android:value="你的ID"/>
            <!-- 请填写应用实际的API_KEY -->
            <meta-data android:name="com.baidu.speech.API_KEY" android:value="你的api_key"/>
            <!-- 请填写应用实际的SECRET_KEY -->
            <meta-data android:name="com.baidu.speech.SECRET_KEY" android:value="你的secret_key"/>
            <service android:name="com.baidu.speech.VoiceRecognitionService" android:exported="false" ></service>
    
    权限说明:
    

    这些东西可以在这里获取

    如果你使用百度语音识别的界面,需要配置下面的activity

             <activity
                    android:name="com.baidu.voicerecognition.android.ui.BaiduASRDigitalDialog"
                    android:configChanges="orientation|keyboardHidden|screenLayout"
                    android:theme="@android:style/Theme.Dialog"
                    android:exported="false"
                    android:screenOrientation="portrait">
                <intent-filter>
                    <action android:name="com.baidu.action.RECOGNIZE_SPEECH" ></action>
                    <category android:name="android.intent.category.DEFAULT" ></category>
                </intent-filter>
            </activity>


    接口的说明百度文档里面有具体说明(我感觉写的不如讯飞,链接http://yuyin.baidu.com/docs/asr/168)

    最后一步

    我这里直接上代码了。

    package com.BDXCW;
    import com.baidu.speech.VoiceRecognitionService;
    
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.speech.RecognitionListener;
    import android.speech.SpeechRecognizer;
    /**
     * 语音识别,将语音转换为文字
     * @author 莫谈天下
     *
     */
    public class MySpeechRecognizer {
    
    	public static final String TAG = MySpeechRecognizer.class.getSimpleName();
    	private SpeechRecognizer speechRecognizer;
    	@SuppressWarnings("unused")
    	private Context context;
    	private SpeechRecognizerCallBack callBack;
    	/**
    	 * MySpeechRecognizer的构造方法
    	 * @param context 上下文对象
    	 */
    	public MySpeechRecognizer(Context context)
    	{
    		this.context = context;
    		// 创建识别器
            speechRecognizer = SpeechRecognizer.createSpeechRecognizer(context, new ComponentName(context, VoiceRecognitionService.class));
            // 注册监听器
            speechRecognizer.setRecognitionListener(new MyRecognitionListener());
    	}
    	/**
    	 * 设置回调接口
    	 * @param callBack 是SpeechRecognizerCallBack对象
    	 */
    	public void setCallBack(SpeechRecognizerCallBack callBack)
    	{
    		this.callBack = callBack;
    	}
    	/**
    	 * 开始语音识别
    	 */
    	public void Start()
    	{
    		Intent intent = new Intent();
    		speechRecognizer.startListening(intent);
    	}
    	/**
    	 * 开始语音识别
    	 * @param intent Inetnt对象,所有识别的参数都需要在intent中设置
    	 */
    	public void Start(Intent intent)
    	{
    		speechRecognizer.startListening(intent);
    	}
    	/**
    	 * 停止录音,但是识别将继续
    	 */
    	public void Stop()
    	{
    		speechRecognizer.stopListening();
    	}
    	/**
    	 * 取消本次识别,已有录音也将不再识别
    	 */
    	public void cancel()
    	{
    		speechRecognizer.cancel();
    	}
    	/**
    	 * 销毁语音识别器,释放资源
    	 */
    	public void Destroy()
    	{
    		speechRecognizer.destroy();
    	}
    	
    	 private class MyRecognitionListener implements RecognitionListener
    	   {
    		 /**
    		  * 开始说话,当用户开始说话,会回调此方法。
    		  */
    		  @Override
    		  public void onBeginningOfSpeech() {
    			   
    		  }
    		  /**
    		   * 音量变化,引擎将对每一帧语音回调一次该方法返回音量值。
    		   */
    		   public void onRmsChanged(float rmsdB) {
    		    	
    		   }
    		   /**
    		    * 获取原始语音,此方法会被回调多次,buffer是当前帧对应的PCM语音数据,拼接后可得到完整的录音数据。
    		    */
    		   public void onBufferReceived(byte[] buffer) {
    		    	
    		    }
    		    /**
    		     * 说话结束,当用户停止说话后,将会回调此方法。
    		     */
    		    public void onEndOfSpeech() {
    		    	
    		    }
    		   /**
    		    * 识别出错,识别出错,将会回调此方法,调用该方法之后将不再调用onResults方法。
    		    * @param error 错误码
    		    */
    		    public void onError(int error) {
    		    	
    		    }
    		    /**
    		     * 识别最终结果,返回最终识别结果,将会回调此方法。
    		     * @param results 识别结果
    		     */
    		    public void onResults(Bundle results) {
    		       
    		    	String text =  results.get("results_recognition").toString().replace("]", "").replace("[", "");
    		    	callBack.getResult(text);
    		    	
    		    }
    		    /**
    		     * 识别临时结果,返回临时识别结果,将会回调此方法。
    		     * @param partialResults 临时结果
    		     */
    		    public void onPartialResults(Bundle partialResults) {
    		        
    		    }
    		    /**
    		     * 识别事件返回,返回识别事件,将会回调此方法。
    		     * @param eventType 事件类型
    		     * @param params 参数
    		     */
    		    public void onEvent(int eventType, Bundle params) {
    		        
    		    }
    		    /**
    		     * 识别准备就绪,只有当此方法回调之后才能开始说话,否则会影响识别结果。
    		     */
    			@Override
    			public void onReadyForSpeech(Bundle params) {
    				
    				
    			} 
    	   }
    	 /**
    	  * 识别结果回调接口
    	  * @author Administrator
    	  *
    	  */
    	 public interface SpeechRecognizerCallBack
    	 {
    		 /**
    		  * 返回结果
    		  * @param result String 结果
    		  */
    		 public void getResult(String result);
    	 }
    }
    


    我这里是对百度语音醉了一个简单的封装,大家可以根据自己的具体需求修改。

    百度语音识别就写到这里,转载希望标注出处,谢谢!

    -----------------------------更新与2016年10月17日-----------------------------------------------------

    这两天浏览了一下自己的这一篇博文,感觉里面少提了一些中要的东西,我这里补充一下。

    百度语音识别中有一个方法如下:

    void startListening(Intent recognizerIntent)
    这个方法中的recognizerIntent 是一个intent对象,百度语音的参数就是通过这一个对象,向百度语音识别引擎传递参数。这里可以传递的参数有狠多,大家可以参照百度语音文档的具体说明,网址为:http://yuyin.baidu.com/docs/asr/169 。我这里给大家聚义个简单的例子,这个例子就是开启百度语义解析,代码如下:
     <span style="white-space:pre">		</span>Intent intent = new Intent();
    		intent.putExtra("nlu", "enable");//开启语义理解
    		intent.putExtra("prop", 10060);//这里是与地图相关的语义
    		speechRecognizer.startListening(intent);</span>



    如果大家有什么问题,可以提出来,后期我会不断完善这篇博文,谢谢!!

    
    
    展开全文
  • 百度语音识别和合成

    2017-08-27 22:30:41
    百度语音识别和合成1、前言 最近智能语音很火呀,于是想在自己手机上也模拟智能音箱实现智能语音,利用语音控制手机,同时手机也能友好的回复。想想很高大上的感觉。目前很6的智能语音AIUI应该是讯飞了,各大帝国...

    百度语音识别和合成

    1、前言
    最近智能语音很火呀,于是想在自己手机上也模拟智能音箱实现智能语音,利用语音控制手机,同时手机也能友好的回复。想想很高大上的感觉。目前很6的智能语音AIUI应该是讯飞了,各大帝国也有。反正很火,原本打算直接使用讯飞的,看了哈,开发文档有点绕。还是先找个简单的平台练练手,再去找讯飞。嘿,百度,就它了,必须简单。直接搜索百度语音,不用想,第一个就是。再说一点,这是小白的第一篇CSDN博客,就是开发中遇到很多坑,还有很多想吐槽的,所以花了点时间共享出来,希望对很多小白们有点帮助!说干就干!
    这里写图片描述

    2、开发前准备
    1、Android studio,我是2.2.2的版本,集成gradle2.14的(台式机懒得升,笔记本是最新的,电脑性能你懂得),手机Android 5.1。
    2、要开发百度语音,去百度语音控制台注册一下,成为开发者还是必要的吧,这个很简单。百度一向人性化,简单,按他步骤来就行。完后你就你能看到这个界面。我账号很久前就注册了,开发必备各大平台后台。我这里已经创建好了两个应用。不慌,会重头来过,吹6 前还是得打草稿。
    这里写图片描述
    3、利用别人的平台开发无非就几个步骤:
    1. 创建应用,得到通行证(无非就是一些id,key什么的,套路)
    2. 与自己的应用建立联系(绑定包名或者有个license什么的)
    3. 下载SDK(注意,有些需要绑定后的SDK,比如百度语音,这就是我踩第一个坑,后面会说)
    4. 集成jar包或者libs或so(这个开发第二个坑)到项目中
    5. 配置同行证或者代码加载
    最后调用代码完事是不是很简单。是不是很简单。是不是很简单
    3、正式开发——百度语音识别
    来,跟着我,左手右手一个慢动作(不是该动作,出错别搭理我,我第一次)
    1、先用android studio创建一个项目,取名Test_BD_AIUI_1,包名就com.example.aiui。(讯飞别说我盗用名字)
    这里写图片描述
    2、去百度控制台,创建一个应用。跟着步骤,有坑(图片不好放,我就少放图了,后面再多放图)
    1、点击“创建新应用”,输入应用名称(没要求,咱开发的,取个能证明我们是程序的名字,我就去BD_AIUI_1,高大上的感觉),选择应用类型,随你了。
    2:选择服务,这里先做的是语音识别,咱把语音合成也选,反正可以多选呀。不存在,下一步。
    3:下载SDK,这里就只能单选了(百度做的不好,东西都没配置完,就下SDK,此处有坑,跟紧了),我们选择”语音识别离在线融合SDK”下载,他会弹出新的窗口(有些浏览器覆盖的,你懂的哈),不要慌,回去。点击下一步。。或者你不选择,直接点击下一步。
    4:重点来了。现在应该是集成开发了。有个平台选择和应用包名,重点,我开发Android,所以选择Android。应用包名非常重要,去我们工程下manifest下,把包名复制过来,我之前间工程包名是“com.example.aiui”,去应用中看哈,选择自己包名,我理解的是这是开发绑定证书,第一个坑解决。
    这里写图片描述
    5:就完成了,基本服务已经打通了,弹出的服务设置暂时不会用,要做很6的功能就要了。点击右上角的“X”吧。刷新一下就可以看到。进错地方的同志点击应用管理就能看到了。看看是不是样的,注意平台有不有,如没有,就是你没跟着我,左手右手一个慢动作。没事,还有救,右上角有个管理包名,把你应用的包名和平台选好,然后保存是一样的;
    这里写图片描述
    6:坑又来了。是不是很开心,每天一坑,点击顶上SDK下载。选择创建的应用,你不选下面是灰色的,UI做的不好。点击后感觉没反应,半天后才刷新,可以看到右上角有个图标了哈,下载Android 语音识别服务SDK,15M左右。应用平台这边搞定了。别关。等会还要用。刚才第三步不叫你下载,是有原因的,这就是我踩的坑。要是刚才下载SDK就会出现,包名没配置。是需要临时License这个文件。因为他得Demo中就有,管理包名中下载的。
    3:解压下载的SDK,里面有4个文件(夹)一个demo,两个我们应用中要用的资源,一个apk。demo是eclipse的。可以看哈。apk可以安装体验哈。不错的。
    4:体验完了,我们自己开发。大致可以实现它的功能
    1:回到我们的AS工程,切换到project界面,开始导入开发的资源。一个libs,一个res。先导入libs,打开看哈是啥东西,两个含so的文件夹,一个jar文件。有so文件呢。。我们是AS哦。别犯二。。首先:在项目的main目录下创建一个jniLibs文件夹,将资源文件夹中的arm64-v8a和armeabi复制到jniLibs中。然后将jar文件放到工程的libs目录下,记得右键add as Library。
    这里写图片描述
    2:此处是有坑,jar文件可以add as library,jniLibs的so文件怎么加载呢。。问了百度,全是在build.gradle中添加如下代码。然后点击 编译“”C的那把锤子“”(build-make project)然后切换到android界面就可以看到jniLibs加载成功了。我牙刷,一个个,把我坑的青痛。哎哟,不说,一把泪,害得我纠结了一晚上。直接告诉你们正确的做法。

    android {
        compileSdkVersion 24
        buildToolsVersion "24.0.3"
        defaultConfig {
            applicationId "com.example.aiui"
            minSdkVersion 15
            targetSdkVersion 24
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        sourceSets {
            main {
                //jniLibs.srcDirs = ['src/main/libs']     //设置目标的so存放路径
                jniLibs.srcDirs = ['libs']     //设置目标的so存放路径
            }
        }
    
    }

    把那行代码换成这个就行了,第二个坑解决了:jniLibs.srcDirs = [‘src/main/jniLibs’] //设置目标的so存放路径
    改了后再使用C的make project编译一下,切换到Android视图下就可以看到jniLibs加载成功了
    这里写图片描述
    3:libs导入完毕。再看哈资源文件有啥。drawable layout raw。可用可不用的文件,都明白,这个资源文件做UI和交互的。。可以导入也可以不导入,咱还是导入吧,先在项目下建立raw文件,这个是音频文件,然后把raw中的文件复制到我们工程的raw下。drawable,layout中的文件直接放进去就好。。预编译哈工程嘛。防止电脑太low,资源文件没有生成ID…所有资源导入完毕了哦。接下来。便是见证奇迹的时刻。
    4、跟我编程——简单几步搞定
    1:你可以看SDK中demo,也可以看百度的开发文档,demo必须看吧,学习别人优秀编程思想。过来开发,咱还是看开发文档,这有帮助。打开百度语音平台的文档中心,中间语音识别和语音合成都有开发文档,选择离在线语音识别Android SDK。开始阅读,建议把所有的文档,先过一遍。在定点过来。。文章不错的。。我就直接进去了。我读过了。
    这里写图片描述
    2:点击集成指南,由于之前的so文件和jar文件我们都成功集成到工程中。所以,这里我们就直接走不用管其他了。。在manifest 中 添加权限。。。配置appid和key和secret,还有添加服务,至于他还有个activity,放进去吧,。如果你的jar包和so成功加载,这里是不会报错的。。。。。记得appid和key和secret换成自己的哈。。在哪有,,在百度应用管理中”查看key”你的应用中去复制。。别傻傻的。
    这里写图片描述
    3:所有配置完了。先直接上代码,很简单的。只要前面配置没错。。后面就几行代码。我们先在界面放一个按钮和一个文本框显示我们说的话吧。为了简单,button直接设置了onclick

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.aiui.MainActivity">
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt_speek"
            android:onClick="doClick"
            android:text="点我说话"/>
    
        <TextView
            android:layout_width="match_parent"
            android:id="@+id/tv_show"
            android:text="我说:"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    主代码部分 说哈流程。初始化控件,初始化语音识别实例。设置监听器,实现接口方法,点击按键,设置参数,在监听结果中处理结果。就这么简单。

    package com.example.aiui;
    
    import android.content.ComponentName;
    import android.content.Intent;
    import android.speech.RecognitionListener;
    import android.speech.SpeechRecognizer;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import com.baidu.speech.VoiceRecognitionService;
    
    import java.util.ArrayList;
    
    public class MainActivity extends AppCompatActivity implements RecognitionListener
    {
        private static final String TAG = "MainActivity";
        private SpeechRecognizer speechRecognizer;
        private Button button;
        private TextView textView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            InitViews();//初始化页面控件
            InitASR();//初始化SpeechRecognizer
        }
    
        /**初始化页面控件*/
        private void InitViews()
        {
            button= (Button) findViewById(R.id.bt_speek);
            textView= (TextView) findViewById(R.id.tv_show);
        }
    
        /**初始化实例*/
        private void InitASR()
        {
            speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this,
                    new ComponentName(this, VoiceRecognitionService.class));
            speechRecognizer.setRecognitionListener(this);
    
    
        }
        public void doClick(View v)
        {
            switch (v.getId())
            {
                 case R.id.bt_speek:
                     Intent intent = new Intent();
                     bindParams(intent);//设置一些参数
                     speechRecognizer.startListening(intent);
                break;
            }
        }
        /**设置参数*/
        private void bindParams(Intent intent)
        {
            //就只设置声音吧,
            intent.putExtra("sound_start", R.raw.bdspeech_recognition_start);
            intent.putExtra("sound_end", R.raw.bdspeech_speech_end);
            intent.putExtra("sound_success", R.raw.bdspeech_recognition_success);
            intent.putExtra("sound_error", R.raw.bdspeech_recognition_error);
            intent.putExtra("sound_cancel", R.raw.bdspeech_recognition_cancel);
            //参数都有默认的 详细设置参考开发文档参数设置
        }
    
        @Override
        public void onReadyForSpeech(Bundle params)
        {
            //准备就绪
            Log.e(TAG, "onReadyForSpeech: " );
        }
    
        @Override
        public void onBeginningOfSpeech()
        {
            //监听到开始说话
            Log.e(TAG, "onBeginningOfSpeech: " );
        }
    
        @Override
        public void onRmsChanged(float rmsdB)
        {
            //音量变化
            Log.e(TAG, "onRmsChanged: " +rmsdB);
        }
    
        @Override
        public void onBufferReceived(byte[] buffer)
        {
            //获取原始语音
            Log.e(TAG, "onBufferReceived: " );
        }
    
        @Override
        public void onEndOfSpeech()
        {
            //结束说话
            Log.e(TAG, "onEndOfSpeech: " );
        }
    
        @Override
        public void onError(int error)
        {
            //错误
            Log.e(TAG, "onError: "+error);
        }
    
        @Override
        public void onResults(Bundle results)
        {
            //结果
            ArrayList<String> r = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
    
            textView.append(r.get(0)+"\n");
        }
    
        @Override
        public void onPartialResults(Bundle partialResults)
        {
            //临时结果
            Log.e(TAG, "onPartialResults: " );
        }
    
        @Override
        public void onEvent(int eventType, Bundle params)
        {
            //识别事件返回
            Log.e(TAG, "onEvent: " +eventType);
        }
    }
    

    简单的语音的识别就实现了。这里只实现了语音的识别。语音有很多参数。这里就不挨着实现了。都是效果问题,简单。讯飞能够与你对话,百度语音我就没做了。就在服务设置里面,我估计不是像讯飞那种动态的。你可以写个service或者线程让它随时监听,或者使用语音唤醒功能。后面我只给出了语音合成的代码。与之类型。切记一般不说话,或者不能识别,,,没报错的话就是so文件没加载、

    语音合成代码:你得按照步骤来。创建应用,选择服务。绑定包名,下载sdk,集成so和jar文件。然后使用下面代码就ok
    **再次提醒加载jar包,add as library
    加载so**

     sourceSets {
            main {
                jniLibs.srcDirs = ['src/main/jnilibs']     //设置目标的so
            }
        }

    主工程:

    package com.example.aiui;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import com.baidu.tts.auth.AuthInfo;
    import com.baidu.tts.client.SpeechError;
    import com.baidu.tts.client.SpeechSynthesizer;
    import com.baidu.tts.client.SpeechSynthesizerListener;
    import com.baidu.tts.client.TtsMode;
    import com.baidu.tts.tools.StringTool;
    
    import java.lang.reflect.Method;
    import java.util.Arrays;
    import java.util.Objects;
    
    public class MainActivity extends AppCompatActivity implements SpeechSynthesizerListener
    {
        private static final String TAG = "MainActivity";
        private SpeechSynthesizer speechSynthesizer;
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            startTTS();
        }
    
        private void startTTS()
        {
            speechSynthesizer = SpeechSynthesizer.getInstance();
            speechSynthesizer.setContext(this);
            speechSynthesizer.setSpeechSynthesizerListener(this);
    
            speechSynthesizer.setAppId("10057156");
            speechSynthesizer.setApiKey("112TBkbBZiOwdYhCG2uTQYiD", "59969108c07ad6e2206ef692ebcf5cbc");
    
            AuthInfo authInfo = speechSynthesizer.auth(TtsMode.ONLINE);
            speechSynthesizer.initTts(TtsMode.ONLINE);
    
            speechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME, "5");
            speechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED, "5");
            speechSynthesizer.setParam(SpeechSynthesizer.PARAM_PITCH, "5");
            speechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "3");
            speechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE, SpeechSynthesizer.MIX_MODE_DEFAULT);
            speechSynthesizer.setParam(SpeechSynthesizer.PARAM_AUDIO_ENCODE, SpeechSynthesizer.AUDIO_ENCODE_AMR);
            speechSynthesizer.setParam(SpeechSynthesizer.PARAM_AUDIO_RATE, SpeechSynthesizer.AUDIO_BITRATE_AMR_15K85);
            speechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOCODER_OPTIM_LEVEL, "0");
    
            Log.e(TAG, "startTTS: "+authInfo.isSuccess() );
        }
    
        public void doClick(View v)
        {
            switch (v.getId())
            {
                 case R.id.bt:
                     Log.e(TAG, "doClick: ");
                     int i = speechSynthesizer.speak("百度一下,你就知道");
                     Log.e(TAG, "doClick: "+i );
                break;
            }
        }
    
        @Override
        public void onSynthesizeStart(String s)
        {
            Log.e(TAG, "onSynthesizeStart: "+s );
        }
    
        @Override
        public void onSynthesizeDataArrived(String s, byte[] bytes, int i)
        {
            Log.e(TAG, "onSynthesizeDataArrived: "+s );
        }
    
        @Override
        public void onSynthesizeFinish(String s)
        {
            Log.e(TAG, "onSynthesizeFinish: "+s );
        }
    
        @Override
        public void onSpeechStart(String s)
        {
            Log.e(TAG, "onSpeechStart: "+s );
        }
    
        @Override
        public void onSpeechProgressChanged(String s, int i)
        {
            Log.e(TAG, "onSpeechProgressChanged: "+s );
        }
    
        @Override
        public void onSpeechFinish(String s)
        {
            Log.e(TAG, "onSpeechFinish: "+s );
        }
    
        @Override
        public void onError(String s, SpeechError speechError)
        {
            Log.e(TAG, "onError: "+s +""+speechError.code);
        }
    }

    展开全文
  • 百度语音识别

    千次阅读 2018-08-18 14:27:19
    最近公司做项目,需要用到语音识别,所以自己根据百度云文档以及从网上查找的一些资源作出以下总结: 一,准备工作 1,新建一个项目 2,在百度云开放平台创建应用,控制台&gt;产品服务&gt;人工智能&...

    最近公司做项目,需要用到语音识别,所以自己根据百度云文档以及从网上查找的一些资源作出以下总结:

    一,准备工作

    1,新建一个项目

    2,在百度云开放平台创建应用,控制台>产品服务>人工智能>百度语音

    3,创建完应用后获得APPID,APPKEY,APP秘密。

    二,配置环境

    1,下载百度云语音识别SDK文件及三方库文件,并将文件导入工程,注意:BDVoiceRecognitionClientResources文件选择创建文件夹参考这一项如下图所示

    2,导入依赖库文件,如图所示

    3,打开目标下建立设置,双击其他链接器标志,添加-ObjC,启用位码设置为否。

    如图4所示,打开构建阶段下编译源,双击BDVRSConfig.m文件,添加-fno-objc弧设置为弧可访问。

    三,最爱的上代码

    #import "ViewController.h"
    #import "BDRecognizerViewController.h"
    #import "BDVRSConfig.h"
    
    const NSString* API_KEY = @"v9y5Rr9qVRzx0ghomfqucP76";
    const NSString* SECRET_KEY = @"92EFloWuYlGqwc2cXVoNTdc9VZBLcqwW";
    const NSString* APP_ID = @"11678423";
    
    @interface ViewController ()<BDRecognizerViewDelegate>
    //创建识别控件
    @property (nonatomic, strong) BDRecognizerViewController *recognizerViewController;
    @property(nonatomic,strong)UIButton *voiceRecogButton;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        //在线语音识别
        [self createUI];
    }
    
    - (void)createUI{
        
        self.voiceRecogButton = [[UIButton alloc]initWithFrame:CGRectMake(20, 80, 375, 40)];
        self.voiceRecogButton.backgroundColor = [UIColor redColor];
        [self.voiceRecogButton setTitle:@"开始语音识别" forState:UIControlStateNormal];
        [self.voiceRecogButton addTarget:self action:@selector(startVoice:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:self.voiceRecogButton];
        
    }
    - (void)startVoice:(UIButton *)btn{
        //创建临时识别控件
        BDRecognizerViewController *tmpRecognizerViewController = [[BDRecognizerViewController alloc]initWithOrigin:CGPointMake(40, 120) withTheme:[BDVRSConfig sharedInstance].theme];
        //全屏UI
        if ([[BDVRSConfig sharedInstance].theme.name isEqualToString:@"全屏亮蓝"]) {
            tmpRecognizerViewController.enableFullScreenMode = YES;//全屏模式
        }
        //设置代理
        tmpRecognizerViewController.delegate = self;
        //将临时识别控件赋给全局识别控件
        self.recognizerViewController = tmpRecognizerViewController;
        
        //设置识别参数
        BDRecognizerViewParamsObject *paramObject = [[BDRecognizerViewParamsObject alloc]init];
        //开发者信息(在百度云开放平台创建应用获得)
        paramObject.apiKey = API_KEY;
        paramObject.secretKey = SECRET_KEY;
        //设置是否需要语义理解,只在搜索模式有效
        paramObject.isNeedNLU = [BDVRSConfig sharedInstance].isNeedNLU;
        //设置识别语言
        paramObject.language = [BDVRSConfig sharedInstance].recognitionLanguage;
        //设置识别模式,分为搜索和输入
        paramObject.recogPropList = @[[BDVRSConfig sharedInstance].recognitionProperty];
        //设置城市ID,当识别属性包含EVoiceRecognitionPropertyMap时有效
        paramObject.cityID = 1;
        //开启联系人识别
    //    paramObject.enableContacts = YES;
        //设置显示效果,是否开启连续上屏
        if ([BDVRSConfig sharedInstance].resultContinuousShow) {
            paramObject.resultShowMode = BDRecognizerResultShowModeContinuousShow;
        }else{
            paramObject.resultShowMode = BDRecognizerResultShowModeWholeShow;
        }
        //设置提示音开关是否打开,默认打开
        if ([BDVRSConfig sharedInstance].uiHintMusicSwitch) {
            paramObject.recordPlayTones = EBDRecognizerPlayTonesRecordPlay;
        }else{
            paramObject.recordPlayTones = EBDRecognizerPlayTonesRecordForbidden;
        }
        paramObject.isShowTipAfter3sSilence = NO;
        paramObject.isShowHelpButtonWhenSilence = NO;
    //    paramsObject.tipsTitle = @"可以使用如下指令记账";
    //    paramsObject.tipsList = [NSArray arrayWithObjects:@"我要记账", @"买苹果花了十块钱", @"买牛奶五块钱", @"第四行滚动后可见", @"第五行是最后一行", nil];
        paramObject.appCode = APP_ID;
        //识别模型模拟路径
        paramObject.datFilePath = [[NSBundle mainBundle] pathForResource:@"s_1" ofType:@""];
        if ([[BDVRSConfig sharedInstance].recognitionProperty intValue] == EVoiceRecognitionPropertyMap) {
            paramObject.LMDatFilePath = [[NSBundle mainBundle] pathForResource:@"s_2_Navi" ofType:@""];
        } else if ([[BDVRSConfig sharedInstance].recognitionProperty intValue] == EVoiceRecognitionPropertyInput) {
            paramObject.LMDatFilePath = [[NSBundle mainBundle] pathForResource:@"s_2_InputMethod" ofType:@""];
        }
        
        paramObject.recogGrammSlot = @{@"$name_CORE" : @"张三\n李四\n",
                                        @"$song_CORE" : @"小苹果\n朋友\n",
                                        @"$app_CORE" : @"QQ\n百度\n微信\n百度地图\n",
                                        @"$artist_CORE" : @"刘德华\n周华健\n"};
        //开始识别
        [self.recognizerViewController startWithParams:paramObject];
    }
    #pragma mark - delegate mathod
    //返回语音识别结果
    - (void)onEndWithViews:(BDRecognizerViewController *)aBDRecognizerViewController withResults:(NSArray *)aResults{
        if ([[BDVoiceRecognitionClient sharedInstance] getRecognitionProperty] != EVoiceRecognitionPropertyInput) {
            NSMutableArray *audioResultData = (NSMutableArray *)aResults;
            NSMutableString *tmpString = [[NSMutableString alloc]initWithString:@""];
            for (int i = 0; i < [audioResultData count]; i ++) {
                [tmpString appendFormat:@"%@\r\n",[audioResultData objectAtIndex:i]];
            }
            NSLog(@"识别结果: %@",tmpString);
            [self showWithResultString:tmpString];
        }else{
            NSString *tmpString = [[BDVRSConfig sharedInstance]composeInputModeResult:aResults];
            NSLog(@"识别结果: %@",tmpString);
            [self showWithResultString:tmpString];
        }
    }
    - (void)showWithResultString:(NSString *)resultStr{
        
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:resultStr preferredStyle:UIAlertControllerStyleAlert];
        [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:nil]];
        [self presentViewController:alert animated:YES completion:nil];
    }
    

    四,演示百度云下载地址:百度云语音识别    密码:x94g

    下篇:语音合成

    如果你觉得本文对你有所帮助,帮我点个小心心,鼓励我继续创作。

     

    展开全文
  • Python实现语音识别(基于百度语音识别

    万次阅读 多人点赞 2018-12-26 22:45:35
    我是一名16级电子信息工程的学生,这是第一次发博客,因为经常在这里查资料 ,自己也应该贡献一点经验... CHUNK = 1024 #wav文件是由若干个CHUNK组成的,CHUNK我们就理解成数据包或者数据片段。 FORMAT = pyaudio.p...
  • iOS-百度语音识别

    千次阅读 2017-09-27 21:11:01
    总监看我太无聊了,讯飞语音识别搞完了,就让我去搞一下百度语音识别。然后比较两种语音识别的准确率,哪种更高点。 个人认为吧,都差不多。百度稍微会好那么一点点。 不过,值得一提的是:虽然讯飞和百度的...
  • 语音识别、声纹识别的区别及测试

    万次阅读 多人点赞 2018-09-02 22:15:45
    很多除接触AI的小伙伴, 不清楚语音识别和声纹识别的区别,经常混淆概念,以为语音识别、声纹识别、语义识别是同一回事,其实不然。这篇文章主要为小伙伴普及一下这三者的区别, 并且分别讲一讲如何测试。   语音...
  • Python 实时语音识别

    千次阅读 2019-11-27 14:54:38
    Python 实时语音识别语音识别语音识别API语音识别步骤效果展示代码下载 最近自己想接触下语音识别,经过一番了解和摸索,实现了对语音识别API的简单调用,正好写文章记录下。目前搜到的帖子里,有现成的调用百度语音...
  • 如何用matlab调用百度语音识别API

    热门讨论 2020-03-03 13:54:23
    本文介绍了如何使用matlab调用百度语音识别的API接口,实现语音识别。
  • 玩转百度语音识别,就是这么简单

    万次阅读 2016-04-11 00:39:23
    我的理解就是技术界的头脑风暴,idea喷如泉涌的盛大节日。  对于这次活动每个人或者两三个人一组需要有个idea,针对当前的产品现状,提出自己的改进或者丰富产品的想法,我拿出自己的手机并登了经常去的网站
  • 百度Android语音识别SDK语义理解与解析方法

    千次阅读 多人点赞 2014-06-17 09:38:02
    介绍使用百度语音识别sdk时对JSON数据解析的使用方法
  • [百度收费] [优点] ).比起百度自家发布的免费版本,速度快很多,很好的解决了丢字(丢句、就是有的地方没有翻译) ).比起百度自家发布的免费版本,语义解析在有些方面增强了,翻译的更准确些 )....
  • 最近项目需要,需要调研几家语音识别(离线/在线),语义理解,TTS(在线/离线),离线命令词,甚至百度的UNIT上下文使用等,虽然看的不怎么深入,但是也确实调研的不是,主要有百度,科大讯飞,搜狗,云知声,奇梦者...
  • 近年来,语音识别技术取得了重大进展,并已开始从实验室走向人们的生活。 预计在未来10年内,语音识别技术将进入各个领域,如工业、家用电子产品、通信、汽车电子。今天小编就语音识别的公司来分析。 大致来看,语音...
  • Python实现语音识别百度baidu-API

    千次阅读 2020-01-01 16:23:27
    百度语音识别通过 REST API 的方式给开发者提供一个通用的 HTTP 接口。 上传需要完整的录音文件,录音文件时长不超过60s。 官方文档库:http://ai.baidu.com/docs#/ASR-Online-Python-SDK/top 调用方式 开发...
  • 前提条件是,已经通过程序编码实现了语音识别,即提交语音素材,可能是百度语音识别的结果,也可能是微信小程序或者是科大讯飞识别的结果。我们大多数情况下,只需要判断语音正确即可。 即“你好”,“妳好”,都...
  • 语音识别:深入理解CTC Loss原理

    万次阅读 多人点赞 2017-12-29 14:23:24
    最近看了百度的Deep Speech,看到语音识别使用的损失函数是CTC loss。便整理了一下有关于CTC loss的一些定义和推导。由于个人水平有限,如果文章有错误,还恳请各位指出,万分感谢~附上我的github,欢迎各位的follow...
  • 前些天项目需要集成一下语音识别,选了百度语音,进入文档中心,看了之后有点头大,从官网下载的Demo也是,很多项目集成在一起的,有点乱。 于是就想先在网上找找有没有已经集成好的拿来用,结果找个一个很有意思的...
1 2 3 4 5 ... 20
收藏数 11,508
精华内容 4,603
关键字:

理解 百度语音识别