语音识别 订阅
语音识别是一门交叉学科。近二十年来,语音识别技术取得显著进步,开始从实验室走向市场。人们预计,未来10年内,语音识别技术将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。 语音识别听写机在一些领域的应用被美国新闻界评为1997年计算机发展十件大事之一。很多专家都认为语音识别技术是2000年至2010年间信息技术领域十大重要的科技发展技术之一。 语音识别技术所涉及的领域包括:信号处理、模式识别、概率论和信息论、发声机理和听觉机理、人工智能等等。 展开全文
语音识别是一门交叉学科。近二十年来,语音识别技术取得显著进步,开始从实验室走向市场。人们预计,未来10年内,语音识别技术将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。 语音识别听写机在一些领域的应用被美国新闻界评为1997年计算机发展十件大事之一。很多专家都认为语音识别技术是2000年至2010年间信息技术领域十大重要的科技发展技术之一。 语音识别技术所涉及的领域包括:信号处理、模式识别、概率论和信息论、发声机理和听觉机理、人工智能等等。
信息
外文名
Voice recognition
发展史
1952年贝尔研究所Davis
中国发展
中国的语音识别研究起始
中文名
语音识别
简    介
与机器进行语音交流
语音识别简介
与机器进行语音交流,让机器明白你说什么,这是人们长期以来梦寐以求的事情。中国物联网校企联盟形象得把语音识别比做为“机器的听觉系统”。语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高技术。 语音识别技术主要包括特征提取技术、模式匹配准则及模型训练技术三个方面。语音识别技术车联网也得到了充分的引用,例如在翼卡车联网中,只需按一键通客服人员口述即可设置目的地直接导航,安全、便捷。
收起全文
精华内容
下载资源
问答
  • 语音识别

    千次阅读 2016-10-29 08:27:58
    语音识别 语音识别的意思是将人说话的内容和意思转换为计算机可读的输入。语音识别的目的就是让机器听懂人类口述的语言,包括了两方面的含义:第一是逐字逐句听懂而不是转化成书面的语言文字;第二是对口述语言中所...

    语音识别

    语音识别的意思是将人说话的内容和意思转换为计算机可读的输入。语音识别的目的就是让机器听懂人类口述的语言,包括了两方面的含义:第一是逐字逐句听懂而不是转化成书面的语言文字;第二是对口述语言中所包含的命令或请求加以领会,做出正确回应,而不仅仅只是拘泥于所有词汇的正确转换。

    语音识别系统的分类

    • 从说话者与识别系统的相关性考虑:

      • 特定人语音识别系统
      • 非特定人语音系统
      • 多人的识别系统
    • 从说话的方式考虑:

      • 孤立词语音识别系统
      • 连接词语音识别系统
      • 连续语音识别系统
    • 从识别系统的词汇量大小考虑:

      • 小词汇量语音识别系统
      • 中等词汇量的语音识别系统
      • 大词汇量语音识别系统

    语音识别
    语音识别的方法

    目前具有代表性的语音识别方法主要有动态时间规整技术(DTW)、隐马尔可夫模型(HMM)、矢量量化(VQ)、人工神经网络(ANN)、支持向量机(SVM)等方法。

    1. 动态时间规整算法
      动态时间规整算法(Dynamic TIme Warping,DTW)是在非特定人语音识别中一种简单有效的方法,该算法基于动态规划的思想,解决了发音长短不一的模板匹配问题,是语音识别技术中出现较早、较常用的一种算法。在应用DTW算法进行语音识别时,就是将已经预处理和分帧过的语音测试信号和参考语音模板进行比较以获取他们之间的相似度,按照某种距离测度得出两模板间的相似程度并选择最佳路径。

    2. 隐马尔可夫模型
      隐马尔可夫模型(HMM)是语音信号处理中的一种统计模型,是由Markov链演变来的,所以它是基于参数模型的统计识别方法。由于其模式库是通过反复训练形成的与训练输出信号吻合概率最大的最佳模型参数而不是预先储存好的模式样本,且其识别过程中运用待识别语音序列与HMM参数之间的似然概率达到最大值所对应的最佳状态序列作为识别输出,因此是较理想的语音识别模型

    3. 矢量量化
      矢量量化(Vector QuanTIzaTIon)是一种重要的信号压缩方法。与HMM相比,矢量量化主要适用于小词汇量、孤立词的语音识别中。其过程是将若干个语音信号波形或特征参数的标量数据组成一个矢量在多维空间进行整体量化。把矢量空间分成若干个小区域,每个小区域寻找一个代表矢量,量化时落入小区域的矢量就用这个代表矢量代替。矢量量化器的设计就是从大量信号样本中训练出好的码书,从实际效果出发寻找到好的失真测度定义公式,设计出最佳的矢量量化系统,用最少的搜索和计算失真的运算量实现最大可能的平均信噪比。
      多种降低复杂度的方法,包括无记忆的矢量量化、有记忆的矢量量化和模糊矢量量化方法。

    4. 人工神经网络
      人工神经网络(ANN)是一个自适应非线性动力学系统,模拟了人类神经活动的原理,具有自适应性、并行性、鲁棒性、容错性和学习特性,其强大的分类能力和输入—输出映射能力在语音识别中都很有吸引力。其方法是模拟人脑思维机制的工程模型,它与HMM正好相反,其分类决策能力和对不确定信息的描述能力得到举世公认,但它对动态时间信号的描述能力尚不尽如人意,通常MLP分类器只能解决静态模式分类问题,并不涉及时间序列的处理。尽管学者们提出了许多含反馈的结构,但它们仍不足以刻画诸如语音信号这种时间序列的动态特性。由于ANN不能很好地描述语音信号的时间动态特性,所以常把ANN与传统识别方法结合,分别利用各自优点来进行语音识别而克服HMM和ANN各自的缺点。

    5. 支持向量机
      支持向量机(Support vector machine)是应用统计学理论的一种新的学习机模型,采用结构风险最小化原理(Structural Risk Minimization,SRM),有效克服了传统经验风险最小化方法的缺点。兼顾训练误差和泛化能力,在解决小样本、非线性及高维模式识别方面有许多优越的性能,已经被广泛地应用到模式识别领域。

    语音识别技术发展现状

    语音识别系统的性能受到许多因素的影响,包括不同说话人的发音方式、说话方式、环境噪音、传输信道衰落等等。

    具体要解决的问题有四点:
    ①增强系统的鲁棒性,也就是说如果条件状况变得与训练时很不相同,系统的性能下降不能是突变的。
    ②增加系统的适应能力,系统要能稳定连续的适应条件的变化,因为说话人存在着年龄、性别、口音、语速、语音强度、发音习惯等方面的差异。
    ③寻求更好的语言模型,系统应该在语言模型中得到尽可能多的约束,从而解决由于词汇量增长所带来的影响。
    ④进行动力学建模,语音识别系统提前假定片段和单词是相互独立的,但实际上词汇和音素的线索要求对反映了发声器官运动模型特点的整合。

    语音识别

    展开全文
  • 实现语音识别波形,通过录一段语音,用matlab识别波形并对语音信号进行处理
  • 基于模板匹配的语音识别算法,交互式语音系统研究
  • 百度语音识别和生成百度语音识别和生成百度语音识别和生成.zip
  • 是用VB语言编写的小程序,可以帮助我们进行语音识别
  • 实现语音识别波形,通过录一段语音,用matlab识别波形并对语音信号进行处理
  • 谷歌语音识别-百度语音识别 [注:本内容来自网络,在此分享仅为帮助有需要的网友,如果侵犯了您的权利,麻烦联系我,我会第一时间删除,谢谢您。]
  • 语音识别
  • 离线语音识别,树莓派语音识别科大讯飞语音识别离线包。
  • 语音识别系统的代码,MATLAB版本,该语音识别系统可以实现说话人的语音识别功能,同时也可以实现识别不同的单词。
  • 本系列实验即面向语音识别基本任务,由浅入深,循序渐进地设计完善语音识别系统,包括时域法、频域法、说话人识别三个具体实验。
  • rnn循环神经网络训练数据集及进行语音识别实现语音输出
  • 基于GMM的语音识别,能辨别出文件的声音性别,并且打印出来,可以一次性读入很多音频文件,结果通过文本档案显示
  • 语音识别系统-语音识别系统.rar 语音识别系统 所含文件: Figure41.jpg
  • 语音识别、人机交互、离线语音识别
  • 语音识别相关语音识别相关语音识别相关语音识别相关语音识别相关语音识别相关语音识别相关语音识别相关语音识别相关语音识别相关语音识别相关语音识别相关语音识别相关
  • 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
  • Unit接入百度语音识别。 跟之前写过的接入讯飞语音识别一样,都要去官网下载对应的SDK 所以我们去官网下载SDK,大家都是聪明人 怎样获取SDK部分就不做过多介绍了,进入官网按照介绍。
    • 📢博客主页:https://blog.csdn.net/zhangay1998
    • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
    • 📢本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉
    • 📢未来很长,值得我们全力奔赴更美好的生活✨

    请添加图片描述


    📢前言

    • 最近有小伙伴在我之前写过的一篇怎样接入讯飞语音识别的文章下面留言
    • 说这篇文章有许多地方细节不到位,导致自己看不明白
    • 所以我就写了三篇系列文章从一个新手角度写了一篇接入讯飞语音的教程!在本文最后也有链接介绍!

    注意:本文教程使用的Unity版本是2018.4.32,其他版本可能有出入,一般问题不大


    🍉接入百度语音识别

    • 跟之前文章写过的接入讯飞语音识别一样,都要去官网下载对应的SDK
    • 所以我们去官网下载SDK,大家都是聪明人

    百度语音SDK获取网址

    • 怎样获取SDK部分就不做过多介绍了,进入官网按照介绍
    • 注册登录获取语音识别的SDK就好了,然后创建一个应用
      在这里插入图片描述
      在这里插入图片描述
      这样应用就创建成功了,这里要记住APPID,后面会用到!
      在这里插入图片描述
      找到SDK下载一个语音识别的SDK
      在这里插入图片描述

    那接下来就是获取到语音识别SDK后的部分了!


    🍓Android Studio端操作步骤

    1.工程开始

    老规矩,新建项目,修改名字和路径,准备开始!
    在这里插入图片描述
    在这里插入图片描述

    然后新建一个module,起一个名字
    File-new-new Module(下图)
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述


    2.接入Unity的classes.jar包

    • 把Unity的class接入,路径在安装Unity客户端的路径下
    • Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
    • 把Unity的jar包复制到AS的libs目录下,如下图:
      在这里插入图片描述

    3.接入讯飞语音的classess.jar包

    • 同样的方法,将百度语音的jar包也放进去
    • ar包位置就在我们在官网下载的SDK解压后的core->libs路径下
    • 直接也复制到AS的libs目录下就行!
      在这里插入图片描述
      效果如下:
      在这里插入图片描述

    4.关联两个classes.jar包

    • 选中两个jar包,右键Add As Libray…
    • 等待编译完就好了
      在这里插入图片描述
    • 也可以右键iflytevoice,Open Module Settings
    • 将.jar文件手动添加,添加完了记得点apply应用一下
      在这里插入图片描述
      如果点击后这里显示已经有了这两个jar包,那说明就关联好了
      在这里插入图片描述

    5.添加libmsc.so

    还是在我们下载的SDK目录下找到这个文件夹jniLibs
    在这里插入图片描述

    • 然后把这个文件夹直接复制到AS的src->main目录下

    如下图所示:
    在这里插入图片描述


    6.写SDK的接口

    好了,到这一步才是写代码的阶段,前边做的几个步骤都是为了为最后的操作搭建一个"台子"

    • 我们接下来新建四个类,分别是CientBaiDuVoiceMainActivity、RecognHandler、RecognListener和GetActivity
    • 怎样新建就不说了,我这里还新建了两个文件夹Recogn和Util为了区分脚本类别,照着我这个做就行

    直接看一下最终效果:
    在这里插入图片描述
    然后直接上各个脚本的代码,直接放进去就行
    CientBaiDuVoiceMainActivity:

    package com.example.baidu;
    
    
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
    
    import com.example.baidu.Recogn.RecognHandler;
    import com.example.baidu.Recogn.RecognListener;
    import com.unity3d.player.UnityPlayerActivity;
    
    public class CientBaiDuVoiceMainActivity   {
    
        public static CientBaiDuVoiceMainActivity _instance;
    
        public static CientBaiDuVoiceMainActivity getInstance() {
            if (_instance == null) {
                _instance = new CientBaiDuVoiceMainActivity();
            }
            return _instance;
        }
        //语音识别
        RecognHandler mRecognHandler;
    
        //语音识别初始化
        public void InitRecogn(Context context) {
            Log.i("@@@", "安卓端开始初始化语音识别了 ");
            RecognListener listener=new RecognListener();
            mRecognHandler=new RecognHandler(context,listener);
        }
        //开始语音识别
        public void StartRecogn() {
            mRecognHandler.Start();
        }
        //停止语音识别
        public void StopRecogn() {
            mRecognHandler.Stop();
        }
        //释放语音识别实例
        public void ReleaseRecogn() {
            mRecognHandler.Release();
            mRecognHandler=null;
        }
    
    
    }
    
    

    RecognHandler:

    package com.example.baidu.Recogn;//自己的包名
    
    import android.Manifest;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.os.Build;
    import android.util.Log;
    
    import com.baidu.speech.EventListener;
    import com.baidu.speech.EventManager;
    import com.baidu.speech.EventManagerFactory;
    import com.baidu.speech.asr.SpeechConstant;
    
    import org.json.JSONObject;
    
    import java.util.LinkedHashMap;
    import java.util.Map;
    import static com.example.baidu.Util.GetActivity.getActivityByContext;
    
    public class RecognHandler {
    
        private boolean mIsInit = false;
        private EventManager asr;
        private EventListener mEventLisener;
    
        public RecognHandler(Context context, EventListener listener) {
            if (mIsInit) {
                listener=null;
                return;
            }
            mIsInit = true;
            mEventLisener = listener;
            //动态申请权限
            initPermission(context);
            asr = EventManagerFactory.create(context, "asr");
            asr.registerListener(listener);
        }
        //开始识别
        public void Start() {
            Log.i("@@@", "点击开始语音识别了 ");
            Map<String, Object> params = new LinkedHashMap<String, Object>();
            // 基于SDK集成2.1 设置识别参数
            params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, true);
            params.put(SpeechConstant.DISABLE_PUNCTUATION, false);
            params.put(SpeechConstant.ACCEPT_AUDIO_DATA, false);
            params.put(SpeechConstant.PID, 1537); // 中文输入法模型,有逗号
            String json = null; // 可以替换成自己的json
            json = new JSONObject(params).toString(); // 这里可以替换成你需要测试的json
            asr.send(SpeechConstant.ASR_START, json, null, 0, 0);
        }
        //停止识别
        public void Stop() {
            asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0);
        }
        //释放实例
        public void Release() {
            asr.unregisterListener(mEventLisener);
            mIsInit = false;
            asr=null;
        }
    
        /**
         * android 6.0 以上需要动态申请权限
         */
        private void initPermission(Context context) {
            String permissions[] = {Manifest.permission.RECORD_AUDIO,
                    Manifest.permission.ACCESS_NETWORK_STATE,
                    Manifest.permission.INTERNET,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            };
    
            PackageManager pm = getActivityByContext(context).getPackageManager();
            boolean permission_readStorage = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.RECORD_AUDIO", "com.cientx.tianguo"));
            boolean permission_network_state = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.ACCESS_NETWORK_STATE", "com.cientx.tianguo"));
            boolean permission_internet = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.INTERNET", "com.cientx.tianguo"));
            boolean permission_writeStorage = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.WRITE_EXTERNAL_STORAGE", "com.cientx.tianguo"));
    
            if (!(permission_readStorage && permission_writeStorage && permission_network_state && permission_internet)) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    getActivityByContext(context).requestPermissions(permissions, 0x01);
                }
            }
    
        }
    
    }
    

    RecognListener:

    package com.example.baidu.Recogn;//填写自己的包名
    
    import android.util.Log;
    
    import com.baidu.speech.EventListener;
    import com.baidu.speech.asr.SpeechConstant;
    import com.unity3d.player.UnityPlayer;
    
    public class RecognListener implements EventListener {
    
    
        @Override
        public void onEvent(String name, String params, byte[] data, int i, int i1) {
            if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) {
                Log.i("@@@", "进入开始语音识别的方法了 ");
                // 识别相关的结果都在这里
                if (params == null || params.isEmpty()) {
                    return;
                }
                if (params.contains("\"partial_result\"")) {
                    UnityPlayer.UnitySendMessage("NetLogic", "RecognResult", name + "&" + params);
                    // 一句话的临时识别结果
                } else if (params.contains("\"final_result\"")) {
                    UnityPlayer.UnitySendMessage("NetLogic", "RecognResult", name + "&" + params);
                    // 一句话的最终识别结果
                } else {
                    // 一般这里不会运行
                    if (data != null) {
                    }
                }
            } else {
                // 识别开始,结束,音量,音频数据回调
                if (params != null && !params.isEmpty()) {
                }
                if (data != null) {
                }
            }
        }
    };
    
    
    

    GetActivity:

    package com.example.baidu.Util;//自己的包名
    
            import android.app.Activity;
            import android.content.Context;
            import android.content.ContextWrapper;
    
    public class GetActivity {
    
    
        public static Activity getActivityByContext(Context context){
            while(context instanceof ContextWrapper){
                if(context instanceof Activity){
                    return (Activity) context;
                }
                context = ((ContextWrapper) context).getBaseContext();
            }
            return null;
        }
    }
    
    

    这四个脚本就是核心类,语音识别就是AS端这几个脚本实现的!
    下面来看一下AndroidManifest怎样修改吧!


    7.修改AndroidManifest文件

    直接把我这个代码复制到自己的AndroidManifest中就好了

    • 这里要注意两个问题
    • package要填写正确,填写自己的!
    • 下面的APPIDAPI_KEYSECRET_KEY都要填写自己在百度语音识别平台上创建的那个应用的
    • 如果忘记了就往上翻看一下哦,这个要在百度语音平台看一下自己的!每个人的都不同~
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.xxx.xxx">   <!-- 填写自己的包名 -->
        <!-- 通用权限 -->
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     
        <!-- 语音识别权限 -->
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     
        <!-- 语音合成权限 -->
     
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        <uses-permission android:name="android.permission.WRITE_SETTINGS"
            tools:ignore="ProtectedPermissions" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
     
        <application android:allowBackup="true">
            <activity android:name=".Wakeup.WakeUpResult"></activity>
            <activity android:name=".Wakeup.WakeupHandler" />
            
            <activity
                android:name=".CientBaiDuVoiceMainActivity"
                android:launchMode="singleTask" />
     <!-- 请填写真实的APP_ID API_KEY SECRET_KEY -->
            <meta-data
                android:name="com.baidu.speech.APP_ID"
                android:value="xxxxx" />
            <meta-data
                android:name="com.baidu.speech.API_KEY"
                android:value="xxxxx" />
            <meta-data
                android:name="com.baidu.speech.SECRET_KEY"
                android:value="xxxxx" />
     
            <service
                android:name="com.baidu.speech.VoiceRecognitionService"
                android:exported="false" />
        </application>
     
    </manifest>
    

    8.打包aar

    • 好了,如果确定上面一步里的包名、ID和KEY等都填写正确了
    • 那在AS端的操作也就算完成了,接下来就是打包成aar给Unity使用就好了!
    • 按照下图所示,先选中baidu这个文件夹,然后Build - > Make Module “baidu”
    • 开始这三布之前先点击右边那个小按钮编译一下最好!
      在这里插入图片描述
    • 然后就会看到baidu这个文件夹下多了一个Build文件夹!
    • 我们把下图中这个aar文件复制出来就好了,准备下一步中放到Unity中使用!!
      在这里插入图片描述

    🍑Unity端操作步骤

    1.新建一个Unity工程

    打开UnityHub新建一个Unity工程,我这里使用的Unity版本是2018.4.32
    在这里插入图片描述


    2.导入aar包

    • UnityAssets文件夹下新建一个文件夹 Plugins->Android
    • 别问为什么,照做就好啦~
    • 然后将我们在AS端打包的aar文件放到Unity中,就如下图所示:
      在这里插入图片描述

    3.简单搭建一个UI用做测试

    新建一个画布,里面放两个Button按钮和一个Text文本就好了!
    在这里插入图片描述

    3.新建脚本写代码!

    • 这里我们新建一个空游戏对象,名字改为NetLogic
    • 名字一定要是这个,因为我们这次AS给Unity交互采用的是发消息机制UnityPlayer.UnitySendMessage
    • 是通过名字来找到这个对象的!(因为我写的讯飞语音中使用的是代理模式Proxy,所以这里换个方法体验一下!)
      在这里插入图片描述
    • 然后新建一个脚本BD,代码如下,将两个ButtonText文本拖到脚本上即可!

    如下图:
    在这里插入图片描述

    using LitJson;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    public class BD : MonoBehaviour
    {
        AndroidJavaObject m_AndroidPluginObj;
        AndroidJavaClass _androidJC;
        AndroidJavaObject m_Android;
        public Text mRecognRes;
        public Button startASR_Btn;
        public Button stopASR_Btn;
    
        void Start()
        {
            AndroidJavaClass _androidJC = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            if (_androidJC == null)
            {
                Debug.Log("JNI initialization failure.");
                return;
            }
            m_AndroidPluginObj = _androidJC.GetStatic<AndroidJavaObject>("currentActivity");
            startASR_Btn.onClick.AddListener(StartRecogn);
            stopASR_Btn.onClick.AddListener(StopRecogn);
    
            Invoke("InitAsr", 3);
        }
    
        public void InitAsr()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.example.baidu.CientBaiDuVoiceMainActivity");//包名加类名
            AndroidJavaObject m_Android = jc.CallStatic<AndroidJavaObject>("getInstance");
            if (m_Android != null)
            {
                m_Android.Call("InitRecogn", m_AndroidPluginObj);
            }
            else
                Debug.Log("AndroidPlugin is Null");
        }
        public void StartRecogn()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.example.baidu.CientBaiDuVoiceMainActivity");
            AndroidJavaObject m_Android = jc.CallStatic<AndroidJavaObject>("getInstance");
            if (m_Android != null)
            {
                m_Android.Call("StartRecogn");
            }
            else
                Debug.Log("AndroidPlugin is Null");
        }
        public void StopRecogn()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.example.baidu.CientBaiDuVoiceMainActivity");
            AndroidJavaObject m_Android = jc.CallStatic<AndroidJavaObject>("getInstance");
            if (m_Android != null)
            {
                m_Android.Call("StopRecogn");
            }
            else
                Debug.Log("AndroidPlugin is Null");
        }
    
        /// <summary>
        /// 百度语音识别结果反馈
        /// </summary>
        /// <param name="res"></param>
        void RecognResult(string res)
        {
            string[] ress = res.Split('&');
            JsonData jsonData = JsonMapper.ToObject(ress[1]);
            string resStr = "";
            if (jsonData["result_type"].ToString() == "partial_result")
            {
                resStr = "临时识别结果:";
            }
            else
            {
                resStr = "最终识别结果:";
            }
    
            resStr += jsonData["best_result"].ToString();
            mRecognRes.text = resStr;
        }
    }
    
    
    • 脚本中定义了两个Button点击事件和四个方法

    • 分别是语音识别初始化开始语音识别停止语音识别语音识别内容接收

    • 这里值得一提的是,接收语音识别内容的方法,得到的是Json字符

    • 我们需要解析完才能看到我们想要的内容

    • 那这里就需要导入一个解析Json的dll文件——LitJSON

    • 还要把它放到Plugins目录下

    • 那我这里也是在网上下载了然后放到这里使用了!
      在这里插入图片描述

    • 然后代码中还要引用一下命名空间,上述脚本代码中也添加了,这里只是简单说一下!

    using LitJson;
    

    4.打包成apk真机测试

    • 这里只需要将产品名改成AndroidManifest中的Package包名即可
    • 就比如我这里的包名就改为baidu就可以了,然后Build打包就行
    • 我自己真机测试过了,是可以识别到的!
      在这里插入图片描述

    🥭源码工程下载

    • 本文教程源码工程下载链接在这
    • 可以直接下载打开使用

    Unity接入百度语音源码工程下载


    💬总结

    • 那到这里就结束了,本文对百度语音接入做了一个教程

    相比前面三篇接入讯飞语音的要写的少,因为整理过程是有些相似的!

    • 在实际操作过程中,会出现一些问题是肯定的
    • 包括我在做这个百度语音识别的时候也遇到了困难
    • 因为我之前做过讯飞的语音识别,所以感觉百度的应该也很简单,道理应该差不多
    • 但是我实际操作起来,包括自己写代码和写文章总结发现,这两者差别还是挺大的!
    • 反正遇到困难就解决就好了,多尝试几次找一下哪里出现问题
    • 这个过程就是程序员必备的,也是最脑壳痛的问题,加油!

    之前也写过三篇很详细的教程介绍怎样接入科大讯飞的语音识别SDK,感兴趣的小伙伴也可以俩看一下!

    Unity 实战项目 ☀️| 接入科大讯飞语音SDK(一)如何在科大讯飞平台搞到SDK!系列共两万多字超级新手教程!
    Unity 实战项目 ☀️| 接入科大讯飞语音SDK(二)在Android Studio该如何操作! 系列共两万多字超级新手教程!
    Unity 实战项目 ☀️| 接入科大讯飞语音SDK(三)在Unity端该如何操作! 系列共两万多字超级新手教程!

    请添加图片描述

    展开全文
  • 语音识别,语音识别转文字,matlab源码
  • java 语音识别

    2018-04-26 17:46:07
    java 语音识别 讯飞 语音识别
  • 语音识别到言语识别

    2018-10-24 13:59:37
    语音识别的理论,主要从语音识别技术更新讲解语音的发展历程
  • 本文采用百度云语音识别API接口,实现低于60s音频的语音识别,也可以用于合成文本长度小于1024字节的音频,此外采用snowboy离线语音唤醒引擎可实现离线语音唤醒,实现语音交互。基于本内容可实现语音控制小车,语音...

    本文采用百度云语音识别API接口,实现低于60s音频的语音识别,也可以用于合成文本长度小于1024字节的音频,此外采用snowboy离线语音唤醒引擎可实现离线语音唤醒,实现语音交互。基于本内容可实现语音控制小车,语音控制音箱、语音交互。。。
    可以查看我的github获取更多信息:https://github.com/dalinzhangzdl/AI_Car_Raspberry-pi
    一、 百度云语音识别 python-SDK的安装
    工欲善其事必先利其器,下面先来武装一下自己,申请属于自己的百度AI开发者账号,安装SDK(Software Development Kit,软件开发工具包)。
    1、进入百度云平台,进入百度语音控制台后,创建自己的应用,获取属于你的ID号和密钥:
    APP_ID = ‘114xxxx5’
    API_KEY = ‘NYIvd23qqGAZxxxxxxxxxxxxxxx’
    SECRET_KEY = ‘DcQWQ9Hxxxxxxxxxxxxxxxxxxxxxx’
    2、SDK的下载与安装
    应用创建完成后下载相应的开发SDK,这里采用python开发,下载python-SDK即可
    在这里插入图片描述
    SDK的安装:
    将下载的SDK包拷贝到树莓派pi目录下,终端界面解压安装,安装过程如下:
    解压包:unzip aip-python-sdk-2.0.0.zip
    安装SDK包: sudo pip install baidu-aip
    在这里插入图片描述
    在这里插入图片描述
    遵循以上步骤操作,就搭建好属于自己的语音识别和语音合成平台,再添加一个麦克风和一个喇叭或者音箱就可以进行语音识别方面的开发了,语音控制小车,控制智能家电等。

    二、Python-SDK 实现语音识别和语音合成
    1、python-SDK实现语音识别
    遵循SDK文档进行快速开发,务必阅读文档。如果对自己的录音进行测试,需先采用格式工厂对录音文件进行转换,确保录音的音频参数符合云语音识别的要求。单通道、采样频率为16K PCM格式,也可先直接采用官方的音频进行测试。
    程序如下:

    #_*_ coding:UTF-8 _*_
    # @author: zdl 
    # 百度云语音识别Demo,实现对本地语音文件的识别。
    # 需安装好python-SDK,录音文件不不超过60s,文件类型为wav格式。
    # 音频参数需设置为 单通道 采样频率为16K PCM格式 可以先采用官方音频进行测试
    
    # 导入AipSpeech  AipSpeech是语音识别的Python SDK客户端
    from aip import AipSpeech
    import os
    
    ''' 你的APPID AK SK  参数在申请的百度云语音服务的控制台查看'''
    APP_ID = '114xxxx5'
    API_KEY = 'NYIvd23qqGAZxxxxxxxxxxxxxxx'
    SECRET_KEY = 'DcQWQ9Hxxxxxxxxxxxxxxxxxxxxxx'
    
    # 新建一个AipSpeech
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    
    
    # 读取文件
    def get_file_content(filePath):   #filePath  待读取文件名
        with open(filePath, 'rb') as fp:
            return fp.read()
    
    		
    def stt(filename):         # 语音识别
        # 识别本地文件
        result = client.asr(get_file_content(filename),
                            'wav',
                            16000,
                            {'dev_pid': 1536,}      # dev_pid参数表示识别的语言类型 1536表示普通话
                            )
        print result
    
    	# 解析返回值,打印语音识别的结果
        if result['err_msg']=='success.':
            word = result['result'][0].encode('utf-8')       # utf-8编码
            if word!='':
                if word[len(word)-3:len(word)]==',':
                    print word[0:len(word)-3]
                    with open('demo.txt','w') as f:
                        f.write(word[0:len(word)-3])
                    f.close()
                else:
                    print (word.decode('utf-8').encode('gbk'))
                    with open('demo.txt','w') as f:
                        f.write(word)
                    f.close()
            else:
                print "音频文件不存在或格式错误"
        else:
            print "错误"
    
    # main函数 识别本地录音文件yahboom.wav
    if __name__ == '__main__':
        
        stt('test.wav')
        
    

    2、python-SDK实现语音合成
    语音合成较语音识别简单,合成文本长度必须小于1024字节,如果本文长度较长,可以采用多次请求的方式。下面是合成本地文件demo程序:

    #_*_ coding:UTF-8 _*_
    # @author: zdl 
    # 百度云语音合成Demo,实现对本地文本的语音合成。
    # 需安装好python-SDK,待合成文本不超过1024个字节
    # 合成成功返回audio.mp3 否则返回错误代码
    
    # 导入AipSpeech  AipSpeech是语音识别的Python SDK客户端
    from aip import AipSpeech
    import os
    
    ''' 你的APPID AK SK  参数在申请的百度云语音服务的控制台查看'''
    APP_ID = '114xxxx5'
    API_KEY = 'NYIvd23qqGAZxxxxxxxxxxxxxxx'
    SECRET_KEY = 'DcQWQ9Hxxxxxxxxxxxxxxxxxxxxxx'
    
    # 新建一个AipSpeech
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    
    # 将本地文件进行语音合成
    def tts(filename):
        f = open(filename,'r')
        command = f.read()
        if len(command) != 0:
            word = command
        f.close()
        result  = client.synthesis(word,'zh',1, {
            'vol': 5,'per':0,
        })
    	
    # 合成正确返回audio.mp3,错误则返回dict 
        if not isinstance(result, dict):
            with open('audio.mp3', 'wb') as f:
                f.write(result)
            f.close()
            print 'tts successful'
    
    # main
    
    if __name__ == '__main__':
    
    tts('demo.txt')
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 148,781
精华内容 59,512
关键字:

语音识别