unity3d 语音人工智能_unity3d 语音识别 - CSDN
  • 最近在研究神经网络+遗传算法在Unity给NPC用(一个可以学习训练的NPC是不是很酷) 说一下神经网络真的不复杂,多看一看是能理解的;如果有不对的地方欢迎指出批评。立马修改以免误人; 神经网络定义的东西我就浅表...
    最近在研究神经网络+遗传算法在Unity给NPC用(一个可以学习训练的NPC是不是很酷)
    说一下神经网络真的不复杂,多看一看是能理解的;如果有不对的地方欢迎指出批评。立马修改以免误人;
    神经网络定义的东西我就浅表的谈一谈:
       计算机的人工神经网络简单分为三层:输入层、隐藏层、输出层;
       这三个层的用意用形象的实例描述一下:
          输入层就代表人的感官;
          隐藏层(其实也是多了一层输出变成了下一组的输入)大脑中的神经元;
          输出层用来接收处理后的信息进行分类反应;
       简单的说输入和输出两层连,中间过程执行一个公式:
    [url=][/url]加权
       [url=][/url]进行激活函数(f())
    假设
    输入:一局王者荣耀里
    1、  你看见对面5人调戏大龙:
    2、  其中3人残血;
    3、  自身满血;
    隐藏层:
    1也就是输出层 就是下一层的输入层;
    隐藏层就是再分类再判断比如队友距离、队友血量、队友支援、敌方支援再和上一次的输出进行处理;(一般情况下一层就够了)
    最后输出层:
    1、  如果判断过去: 你将会操作人物移动靠近
    2、  如果判断不过去:你将操作人物离开;
    这么讲应该能理解这三个层的用意把;神经网络这个词我就不解释了 麻烦,想当初我看的时候废话一大堆,然后我并没看明白;
    其实人的行为就是受到神经的刺激而产生的;在我的理解中权重就是这个人的情绪偏向;
    [url=][/url]
    一张图看一下:
       其实人工的神经网络很难真正实现生物神经网络;
    看一下输入层的 图例中输入值为(1、0、1、1);权重就是这个参数影响判断的绝对能力:取决主观意向;
    假设第一层的权重为(0.3、-0.5、0.9、1);
    根据激励函数求出(不加偏移)=0.3+0+0.9+1=2.2D  有人会问 这个2.2D有什么作用;这个是这个激励函数对于输入函数和每个输入函数在神经中的重要性来得出的;在输出函数中需要一个阈值来判断这些值需要执行的动作;可能大于2.2D需要执行一系列动作;
    看图讲什么原理什么都太虚;我直接贴代码讲解代码实现 (毕竟我是一个连复制粘贴都嫌麻烦的人)
    神经网络铺建:
    using System;
    using System.Collections.Generic;
    
    
        public class NeNetwork {
            public double[][][] _NetWeights;
            public int[] _Layers;
            public double[][] _Offset;
            public double[][] _Outputs;
            public NeurFunction[][] Functions;
    
            public NeNetwork(params int[] Layers) {//(5,3)  5输入  3输出
                
                var layersLength = Layers.Length;
                this._Layers = Layers;//各层数量={5,3}
    
                _Outputs = new double[layersLength][];//输出={[5个],[3个]}
               
                for (var i = 0; i < layersLength; i++) {
                    _Outputs[i] = new double[this._Layers[i]];
                }
                 Functions = new NeurFunction[layersLength - 1][];//方法={[5个]}
                _NetWeights = new double[layersLength - 1][][];//权重={[[3个][3个][3个][3个][3个]]}
                _Offset = new double[layersLength - 1][];//偏移={[3个]}
    
                var func = new SiFunction();
                for (var i = 0; i < layersLength - 1; i++) {
                    _NetWeights[i] = new double[this._Layers[i]][];
                    Functions[i] = new NeurFunction[this._Layers[i]];
                    for (var j = 0; j < this._Layers[i]; j++) {
                        _NetWeights[i][j] = new double[this._Layers[i + 1]];
                        Functions[i][j] = func;
                    }
                    _Offset[i] = new double[this._Layers[i + 1]];
                }
            }
    
            public void SetFunction(int layerIndex, NeurFunction func) {
                for (var j = 0; j < _Layers[layerIndex + 1]; j++) {
                    Functions[layerIndex][j] = func;
                }
            }
    
            public double[] GetOut(double[] inputs) {
                
                for (var i = 0; i < _Layers[0]; i++) {
                    _Outputs[0][i] = inputs[i];
                }
                var qqsout = new double[_Layers[_Layers.Length - 1]];
                for (var i = 1; i < _Layers.Length; i++) { 
                    for (var j = 0; j < _Layers[i]; j++) {// 3 
                        double before = 0;    
                        for (var k = 0; k < _Layers[i - 1]; k++) { // 5
                            before += _Outputs[i - 1][k] * _NetWeights[i - 1][k][j];//权重这个J
                        }
                        before += _Offset[i - 1][j];
                        _Outputs[i][j] = Functions[i - 1][j].Compute(before);//把三个输出层的结果发送到输出层方便调用
                    }
                }
                qqsout = _Outputs[_Layers.Length - 1];
                return qqsout;
    
            }
    
            public List<double> GetWeightsList() {
                var qws = new List<double>();
                for (var i = 0; i < _Layers.Length - 1; i++) {
                    qws.AddRange(_Offset[i]);
                }
                for (var i = 0; i < _Layers.Length - 1; i++) {
                    for (var j = 0; j < _Layers[i]; j++) {
                        qws.AddRange(_NetWeights[i][j]);
                    }
                }
                return qws;
            }
            
            public void UpdateWeights(List<double> data) {
                var id = 0;
                for (var i = 0; i < _Layers.Length - 1; i++) {
                    for (var j = 0; j < _Layers[i + 1]; j++) {
                        _Offset[i][j] = data[id];
                        id++;
                    }
                   }
    
                for (var i = 0; i < _Layers.Length - 1; i++) {
                    for (var j = 0; j < _Layers[i]; j++) {
                        for (var k = 0; k < _Layers[i + 1]; k++) {
                            _NetWeights[i][j][k] = data[id];
                            id++;
                        }
                    }
                }
            }
    
            //瞎JB写了
            public double[] ShowTimes() {  //反向传播权重更新
                List<double> currentList = new List<double>();
                for (int i = 0; i < _Layers[0]; i++)
                {
                    currentList.Add(_Outputs[0][i]);
                }
                 double a=  -(_Outputs[0][1] - 0.5f) * _Outputs[0][1] * (1 - _Outputs[0][1]);  //-(输出-样本)*输出*(1-输出);  反向传播加权
               double  b= 1 / 1 - Math.Exp(-_Outputs[0][1]);   //非线性阶段函数
                double c = Math.Tanh(_Outputs[0][1]);     //切函数
                return currentList.ToArray();  //返回更新权重  然后数值更新 *学习率
    
            }
    
      }
        
    
    
    输出处理类+接口:
    using System;
    
    
    	public interface NeurFunction {
    		double Compute(double x);
    	}
    	
    	public class SiFunction : NeurFunction
        {
    		public double Compute(double x) {
    			return  1.0 / (1.0 + Math.Exp(-x)); //非线性激活函数
    		}
    	}
    public class ThFunction : NeurFunction
    {
        public double Compute(double x)
        {
            return x > 0.0 ? 1.0 : -1.0;
        }
    }
    
    
    



    如有不懂欢迎指正;后续我会好好整理一下再把遗传算法结合的探讨一下
    展开全文
  • Unity 自带语音识别分为以下: 1.Keyword Recognizer(关键字识别): 官方API: https://docs.unity3d.com/ScriptReference/Windows.Speech.KeywordRecognizer.html 2.Grammar Recognizer(语法识别): 官方API...

    Unity 自带语音识别分为以下:

     

    1.Keyword Recognizer(关键字识别):

    官方API: https://docs.unity3d.com/ScriptReference/Windows.Speech.KeywordRecognizer.html

    2.Grammar Recognizer(语法识别):

    官方API:https://docs.unity3d.com/ScriptReference/Windows.Speech.GrammarRecognizer.html

    3.Dictation Recognizer(听写识别):

    官方API:https://docs.unity3d.com/ScriptReference/Windows.Speech.DictationRecognizer.html

     

     

    注:语法仅在Windows 10上适用!!!

    @Liam:有用→收藏→关注  听说长得好看的人都这么做!

    展开全文
  • 本文首发于“洪流学堂”公众号。 洪流学堂,让你快人几步 源码地址 ...1 语音识别 ...AudioClip的音频数据转换为百度语音识别的PCM16格式 百度语音识别Restful接口的封装以及一个测试场景 ...百度语音合成Restf...

    本文首发于“洪流学堂”公众号。
    洪流学堂,让你快人几步!你好,我是你的技术探路者郑洪智,你可以叫我大智(vx: zhz11235)。

    源码地址

    https://github.com/zhenghongzhi/WitBaiduAip

    功能概述

    1 语音识别

    1. 从麦克风录制音频
    2. AudioClip的音频数据转换为百度语音识别的PCM16格式
    3. 百度语音识别Restful接口的封装以及一个测试场景

    2 语音合成

    1. 百度语音合成Restful接口的封装以及一个测试场景
    2. mp3格式运行时转为AudioClip进行播放

    为什么不使用百度的C# SDK
    百度的C# SDK使用了一些Unity不支持的特性,直接导入unity不能用
    而且百度C# SDK只是封装了Restful的接口,功能上并没有增多
    自己编写更简洁

    更新说明

    2018-08-22更新

    根据百度API的更新,语音合成性能优化,直接使用原生格式,移除第三方插件

    2018-03-28更新

    加入平台判断,更好的支持android和ios

    2018-01-11更新

    在工程中加入了语音合成

    2018-01-02更新

    应广大小伙伴的要求,对工程进行了重构,放出github源码
    https://github.com/zhenghongzhi/WitBaiduAip

    2017-12-23更新

    教程首发


    洪流学堂,让你快人几步
    欢迎关注“洪流学堂”微信公众号

    展开全文
  • 百度AI开放平台是百度推出的一个人工智能服务平台,该平台提供了很多当下热门技术的解决方案,如人脸识别,语音识别,语音智能等。其中人脸识别的SDK支持很多语言,包括Java,PHP,Python,C#,Node.js,Android和...

    百度AI开放平台是百度推出的一个人工智能服务平台,该平台提供了很多当下热门技术的解决方案,如人脸识别,语音识别,语音智能等。其中人脸识别的SDK支持很多语言,包括Java,PHP,Python,C#,Node.js,Android和iOS等,使用C#进行脚本语言开发的Unity3d自然也可以很方便的使用这些SKD。

    1、下载人脸识别SDK

    首先我们需要下载最新版的SDK,打开人脸识别SDK下载页面,选择C# SDK下载:
    SKD下载

    下载解压后得到一个叫aip-csharp-sdk-3.0.0的文件夹,其中AipSdk.dll提供了我们进行人脸识别开发需要的API,AipSdk.XML是对DLL的注释。thirdparty中包含了sdk的第三方依赖,Demo中是一些使用示例,可以进行参考。
    文件目录

    2、导入SDK

    由于SDK已经被打包成DLL文件,所以我们导入使用起来也十分方便,只需将解压后的文件夹直接导入到工程即可。当然为了方便管理我们可以将SDK导入到Plugins文件夹中,需要注意的是一定要讲第三方依赖一起导入不然会报错。
    Plugins目录

    导入后可能会有如下错误:
    .Net报错
    这是由于我们在Player设置中选择的Api Compatibility Level是.Net 2.0 Subset,即.Net 2.0的子集,这里需要改成.Net 2.0。选择Edit->Project Settings->Player,在Other Settings中将Api Compatibility Level更改为.Net 2.0:
    .Net2.0

    3、创建应用

    下面将以人脸检测为示例简单介绍一下SDK的使用。
    使用SDK前我们需要先注册一个百度账号,然后登陆百度AI开放平台,创建一个人脸识别应用。
    选择控制台并登录:
    选择控制台

    在控制台已开通服务中选择人脸识别:
    人脸识别

    然后点击创建应用,输入应用名,应用类型,接口选择(默认创建人脸识别的应用),和应用描述,点击立即创建,创建完毕后点击查看应用详情查看API Key和Secret Key(点击显示查看)
    创建应用

    完成创建

    应用详情

    之后可以选择监控报表来查看应用接口调用情况:
    监控报表

    4、接口调用

    百度AI开放平台提供了人脸识别C#版的详细技术文档,下面以实例来进行简单的调用说明。
    使用人脸检测功能我们添加Baidu.Aip.Face命名空间,定义一个Face变量用于调用API:

    using Baidu.Aip.Face;
    
    private Face client;
    
    client = new Face("API Key", "Secret Key")

    实例化Face变量时需要填写我们创建的应用的API Key和Secret Key,可以在应用详情中查看。
    进行人脸检测时调用FaceDetect方法:

    public JObject FaceDetect(byte[] image, Dictionary<string, object> options = null);

    该方法需要传入两个参数,被检测的图片和返回的参数配置,其中可选参数options可以使用默认值null,这时只会返回人脸的位置等基本信息。返回值是一个JObject类型,此类型是第三方依赖中提供的一个json类型。详细调用方法为:

    byte[] image = File.ReadAllBytes(Application.streamingAssetsPath + "/1.jpg");
    Dictionary<string, object> options = new Dictionary<string, object>()
    {
        {"face_fields", "beauty,age,expression,gender" }
    };
    client.FaceDetect(image, options);

    options中的face_fields为请求的参数,类型是string,多个项以逗号分开,不能加在逗号和后一项之间加空格,否则无效。详细参数如下表:

    参数 类型 描述
    face_fields string 包括age、beauty、expression、faceshape、gender、gla-sses、landmark、race、qualities信息,逗号分隔,默认只返回人脸框、概率和旋转角度。
    max_face_num number 最多处理人脸数目,默认值1
    image byte[] 图像数据

    方法返回的JObject包含一个或多个人脸的信息,也可以如下调用:

    client.FaceDetect(image);

    此时将只会返回最基本的信息,包括日志id,人脸数目,人脸位置,人脸置信度,竖直方向转角,三维左右旋转角,三维俯仰角,平面旋转角。
    所有返回值见下表:

    参数 类型 是否一定输出 描述
    log_id number 日志id
    result_num number 人脸数目
    result array 人脸属性对象的集合
    +age number 年龄。face_fields包含age时返回
    +beauty number 美丑打分,范围0-1,越大表示越美。face_fields包含beauty时返回
    +location array 人脸在图片中的位置
    ++left number 人脸区域离左边界的距离
    ++top number 人脸区域离上边界的距离
    ++width number 人脸区域的宽度
    ++height number 人脸区域的高度
    +face_probability number 人脸置信度,范围0-1
    +rotation_angle number 人脸框相对于竖直方向的顺时针旋转角,[-180,180]
    +yaw number
    +pitch number 三维旋转之俯仰角度[-90(上), 90(下)]
    +roll number 平面内旋转角[-180(逆时针), 180(顺时针)]
    +expression number 表情,0,不笑;1,微笑;2,大笑。face_fields包含expression时返回
    +expression_probability number 表情置信度,范围0~1。face_fields包含expression时返回
    +faceshape array 脸型置信度。face_fields包含faceshape时返回
    ++type string 脸型:square/triangle/oval/heart/round
    ++probability number 置信度:0~1
    +gender string male、female。face_fields包含gender时返回
    +gender_probability number 性别置信度,范围0~1。face_fields包含gender时返回
    +glasses number 是否带眼镜,0-无眼镜,1-普通眼镜,2-墨镜。face_fields包含glasses时返回
    +glasses_probability number 眼镜置信度,范围0~1。face_fields包含glasses时返回
    +landmark array 4个关键点位置,左眼中心、右眼中心、鼻尖、嘴中心。face_fields包含landmark时返回
    ++x number x坐标
    ++y number y坐标
    +landmark72 array 72个特征点位置,示例图 。face_fields包含landmark时返回
    ++x number x坐标
    ++y number y坐标
    +race string yellow、white、black、arabs。face_fields包含race时返回
    +race_probability number 人种置信度,范围0~1。face_fields包含race时返回
    +qualities array 人脸质量信息。face_fields包含qualities时返回
    ++occlusion array 人脸各部分遮挡的概率, [0, 1] (待上线)
    +++left_eye number 左眼
    +++right_eye number 右眼
    +++nose number 鼻子
    +++mouth number
    +++left_cheek number 左脸颊
    +++right_cheek number 右脸颊
    +++chin number 下巴
    ++type array 真实人脸/卡通人脸置信度
    +++human number 真实人脸置信度,[0, 1]
    +++cartoon number 卡通人脸置信度,[0, 1]

    运行时可能会报错:
    运行报错
    这是网页端身份安全验证失败导致的,我们需要在程序运行时手动添加安全证书,在Awake方法中加入:

    System.Net.ServicePointManager.ServerCertificateValidationCallback +=
                   delegate (object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                               System.Security.Cryptography.X509Certificates.X509Chain chain,
                               System.Net.Security.SslPolicyErrors sslPolicyErrors)
                    {
                       return true; // **** Always accept
                    };

    我们可以用Text控件来查看具体的返回值:
    TestFace.cs:

    using System.Collections.Generic;
    using System.IO;
    using Baidu.Aip.Face;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class TestFace : MonoBehaviour
    {
    
        public Text debugInfo;
    
        private Face client;
        private byte[] image;
        private Dictionary<string, object> options;
    
        private void Awake()
        {
            System.Net.ServicePointManager.ServerCertificateValidationCallback +=
                   delegate (object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                               System.Security.Cryptography.X509Certificates.X509Chain chain,
                               System.Net.Security.SslPolicyErrors sslPolicyErrors)
                   {
                       return true; // **** Always accept
                };
    
            client = new Face("API Key", "Secret Key");
            image = File.ReadAllBytes(Application.streamingAssetsPath + "/1.jpg");
            options = new Dictionary<string, object>()
            {
                {"face_fields", "beauty,age,expression,gender" }
            };
        }
    
        public void StartDetect()
        {
            var result = client.FaceDetect(image);//, options);
            debugInfo.text = result.ToString();
        }
    }

    运行结果:
    运行结果

    By:蒋志杰

    展开全文
  • unity3d使用调用win10语音识别

    在uinty3d中使用语音识别进行最基本的语音交互


    首先尝试使用百度AI平台提供的语音识别服务


    其特点是接收一段pcm格式的音频文件后返回从文件中读到的文字

    但由于在实际系统使用过程中需要实时的语音识别,且使用百度语音识别则音频文件何时开始何时结束难以把控,最后放弃是种这种方法。


    参考网上给出的各种方法后发现一篇关于hololens开发的文章中提到的unity中使用语音进行控制的方式可以使用

    文章地址https://www.cnblogs.com/mantgh/p/5524490.html


    听写即语音转文字,此前我们称之为Speech to Text,同样是Windows Store应用特性之一。

    DictationRecognizer

    命名空间: UnityEngine.Windows.Speech

    : DictationRecognizerSpeechErrorSpeechSystemStatus

    听写特性用于将用户语音转为文字输入,同时支持内容推断和事件注册特性。Start()和Stop()方法用于启用和禁用听写功能,在听写结束后需要调用Dispose()方法来关闭听写页面。GC会自动回收它的资源,如果不Dispose会带来额外的性能开销。


    完整的使用方法如下:

    public class DictionManager : MonoBehavior
    {
        private DictationRecognizer dictationRecognizer;
    
        void Start()
        {
            dictationRecognizer = new DictationRecognizer();
            //注册事件
            dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
    
            dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
    
            dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
    
            dictationRecognizer.DictationError += DictationRecognizer_DictationError;
    
            //开始听写识别
            dictationRecognizer.Start();
        }
    
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // 自定义行为
        }
    
        private void DictationRecognizer_DictationHypothesis(string text)
        {
            // 自定义行为
        }
    
        private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
        {
            // 自定义行为
        }
    
        private void DictationRecognizer_DictationError(string error, int hresult)
        {
            // 自定义行为
        }
    
    
        void OnDestroy()
        {
            //释放资源
            dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
            dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete;
            dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis;
            dictationRecognizer.DictationError -= DictationRecognizer_DictationError;
            dictationRecognizer.Dispose();
        }
    }
    其中:
    DictationRecognizer_DictationHypothesis

    为听到声音后调用

    DictationRecognizer_DictationComplete

    为语音识别完成或超时时调用

    DictationRecognizer_DictationError

    为语音识别出错时调用

    DictationRecognizer_DictationResult

    为语音识别的结果


    使用该种方法在Unity中使用语音识别应注意将windows的语音功能开启。


    使用该方法成功的解决了uinty中实时使用语音识别的问题。

    使用了上述试列代码开发的带语音识别的场景中的一个脚本如下,用于识别到“开始”后进行场景跳转:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.SceneManagement;
    using UnityEngine.UI;
    using UnityEngine.Windows.Speech;
    using System;
    using System.Text;
    using System.IO;
    using NAudio.Wave;
    using UnityEngine.Events;
    
    
    public class star : MonoBehaviour
    {
        private string strFilname;
        public AudioSource Source;
        [Tooltip("A text area for the recognizer to display the recognized strings.")]
        public Text DictationDisplay;
        private DictationRecognizer dictationRecognizer;
        bool mark = true;
        public IEnumerator LoadMusic(string filepath, string savepath)
        {
            var stream = File.Open(filepath, FileMode.Open);
            var reader = new Mp3FileReader(stream);
            WaveFileWriter.CreateWaveFile(savepath, reader);
            var www = new WWW("file://" + savepath);
            yield return www;
            var clip = www.GetAudioClip();
            Source.clip = clip;
            Source.Play();
    
        }
    
        // Use this for initialization
        void Start()
        {
            aduio a = new aduio("欢迎进入英语学习系统,如果你准备好了请说开始");
            strFilname = Guid.NewGuid().ToString();
            a.creatMp3(strFilname);
            string strMp3 = "//Ogg//" + strFilname + ".mp3";
            string strWav = "//Ogg//" + strFilname + ".wav";
            StartCoroutine(LoadMusic(Application.streamingAssetsPath + strMp3, Application.streamingAssetsPath + strWav));
    
            dictationRecognizer = new DictationRecognizer();
            dictationRecognizer.AutoSilenceTimeoutSeconds = (float)1.0; ;
            //订阅事件  
            dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
            dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
            dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
            dictationRecognizer.DictationError += DictationRecognizer_DictationError;
    
            dictationRecognizer.Start();
        }
        private void OnCallBack(string arg0)
        {
            Debug.Log("Complete:" + arg0);
        }
    
    
    
    
        void OnError(string err)
        {
            Debug.LogError(err);
        }
        private void DictationRecognizer_DictationError(string error, int hresult)
        {
            DictationDisplay.text = "error";
        }
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // 自定义行为
        }
        private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
        {
            DictationDisplay.text = "complete:";
            Debug.Log(cause);
            if (cause == DictationCompletionCause.TimeoutExceeded)
            {
                //超时后本例重新启动听写识别器  
                //            DictationDisplay.text += "Dictation has timed out.";
                //            dictationRecognizer.Stop();
                //            DictationDisplay.text += "Dictation restart.";
                //dictationRecognizer = new DictationRecognizer();
                //dictationRecognizer.AutoSilenceTimeoutSeconds = (float)1.0; ;
                ////订阅事件  
                //dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
                //dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
                //dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
                //dictationRecognizer.DictationError += DictationRecognizer_DictationError;
                dictationRecognizer.Start();
            }
            else if (cause == DictationCompletionCause.UnknownError) {
                dictationRecognizer = new DictationRecognizer();
                dictationRecognizer.AutoSilenceTimeoutSeconds = (float)1.0; ;
                //订阅事件  
                dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
                dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
                dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
                dictationRecognizer.DictationError += DictationRecognizer_DictationError;
    
                dictationRecognizer.Start();
            }
        }
        private void DictationRecognizer_DictationHypothesis(string str)
        {
            DictationDisplay.text = "Hypothesis:";
            DictationDisplay.text += str;
            if ((str == ("开始")))
            {
               
               // OnDestroy();
                OnStar();
            }
    
            if (str == ("退出") && mark == true)
            {
                mark = false;
               // OnDestroy();
                Quit();
            }
    
        }
    
        // Update is called once per frame  
        void Update()
        {
    
        }
    
        void OnDestroy()
        {
            //dictationRecognizer.Stop();
            dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis;
            dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
            dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete;
            dictationRecognizer.DictationError -= DictationRecognizer_DictationError;
            dictationRecognizer.Dispose();
        }
        
        public void OnStar()
        {
    
            SceneManager.LoadScene("Unit");
        }
        public void Quit()
        {
            Application.Quit();
        }
    }
    


    展开全文
  • BaiduVoiceTestUnity3d使用百度的Rest Api实现语音交互,可以将语音转化为文本,也可以将文本转化为语音。 这个项目原本是为一个HoloLens眼镜的虚拟角色语音交互做准备。该平台上由于编译环境的问题接入SDK会出现...
  • unity 百度语音识别

    2019-02-15 10:47:12
    调用百度接口进行识别:Asr.cs using System; using System.Collections; using UnityEngine; using UnityEngine.Networking; namespace Wit.BaiduAip.Speech {  [Serializable]  public class ... ...
  • unity3d 各大插件评测

    2018-01-30 15:00:43
    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 引言:想用Unity3D制作优秀的游戏,插件是必不可少的。工欲善其事必先利其器。本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具...
  • 实现U3D VR场景中的语音识别为什么选用百度语音?因为他免费啊那问题就是如何使用百度语音我们首先先需要进入百度语音的官网http://yuyin.baidu.com/然后申请选择创建应用,这个填写无需多言。只需要知道这样就算...
  • 废话不多说先上视频,各位小伙伴要的是这种效果就可以继续看下去了。 Unity实现语音识别 占坑。稍后展开。 ...
  • http://blog.csdn.net/yiwei151/article/details/78360990 新建脚本,将下列代码复制进去即可, using LitJson; using System; using System.Collections; using System.Collections.Generic;...using System.Te
  • Unity 文字转语音 实时播放 整体很简单,只需要简单的搭载使就用就可以了。 废话不多说了 直接上代码。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine....
  • 原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 引言:想用Unity3D制作优秀的游戏,插件是必不可少的。工欲善其事必先利其器。本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具...
  • 【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载  (2012-12-09 07:27:51) 转载▼ 标签:  unity3d   unity   unity3d教程   unity3d插件   编程 ...
  • 接触U3D有段时间了,积累了点插件、资源、学习网站、论坛等,现在整理下,跟广大同仁们分享下! 所有资源已经上传完毕,约5G。 200个插件免费分享 【下载链接】  ...注:这份资源比较旧了,参考意义其实不大了,...
  • Unity3D 插件大全

    2013-12-06 16:07:44
    2D_Toolkit 2d动画开发插件包...ORK_Okashi_RPG_Kit Unity3D角色扮演游戏开发工具包 uScript-Visual-Scripting-Tool-for-UnityEasyMotion2D 脚本插件 Playmaker_1.21 可视化编程插件 RageSpline EZ GUI 2 GlyphDesigner
  • Unity3D插件大全

    2013-07-31 16:55:20
    【转】http://www.cnblogs.com/dingxiaowei/articles/3113974.html 200个插件免费分享约5G。 【清单如下】 ...ORK_Okashi_RPG_Kit Unity3D的角色扮演游戏开发工具包 uScript视觉脚本工具Unit
  • 当时做了一个“极简版”的(其实是在百度API的Demo的基础上改了改而已),只有一个按钮,把语音合成和保存的功能都挤到一个函数里实现了。反正是自己用,也没那么讲究了,功能过的去就好了。 但是用着用着,问题...
  • 引言:想用Unity3D制作优秀的游戏,插件是必不可少的。工欲善其事必先利其器。本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具。为此我写了插件的经验及理论讲解,涉及插件的  学习/辨别/选择/...
1 2 3 4 5 ... 20
收藏数 463
精华内容 185
关键字:

unity3d 语音人工智能