详解Unity 实现语音识别功能

现在语音识别已经被广泛的应用到各个领域中,在Unity开发中,语音识别也非常受欢迎。大部分人都会选择科大讯飞的语音识别功能,但是在一些小的项目中,使用科大讯飞的就有点大材小用了。今天就介绍一下Unity自带的语音识别功能。说是语音识别,其实unity本身还是做不到的,Unity自带的语音识别功能其实是关键字识别。比如我在Unity中设定好一句话汇总的几个关键词。当我再说这句话的时候就会和识别到。经过测试发现当一句话中有八个关键字,这句话就会非常好的被识别出来。
接下来就一起来实现一下:
首先贴一张效果图:

场景我们沿用的是音频可视化那篇文章里用到的场景。这里就不多做介绍了。Unity自带的语音识别功能官方有API供参考,地址在这里(戳这里

这里大家可以自行去看一下。下面开始介绍一下我们要实现的功能:
想要识别语音识别功能我们首先由先引用个命名空间

using UnityEngine.Windows.Speech;//引入命名空间

然后定义一个string类型数组,这个数组就是存放那些我们要识别关键字。

 // 关键字
    public string[] keywords = { "你好", "开始","停止" };

紧接着我们要在start方法中先创建一个语音识别器,这样才能够进行语音识别

//创建一个识别器
	m_PhraseRecognizer = new KeywordRecognizer(keywords, m_confidenceLevel);
	//通过注册监听的方法
	m_PhraseRecognizer.OnPhraseRecognized += M_PhraseRecognizer_OnPhraseRecognized;
	//开启识别器
	m_PhraseRecognizer.Start();

接着是一个方法,这个方法主要就是用于识别到关键字后要做的事情

/// <summary>
    ///  当识别到关键字时,会调用这个方法
    /// </summary>
    /// <param name="args"></param>
    private void M_PhraseRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {
        print(args.text);
    }

这样基本上重要的部分就完成。下面是全部的代码,在底部还有一个小Demo,感兴趣的可以下载下来自行体验一下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Windows.Speech;//引入命名空间  利用

/// <summary>
/// 语音识别(主要是别关键字)
/// </summary>
public class speechKey : MonoBehaviour
{
    // 短语识别器
    private PhraseRecognizer m_PhraseRecognizer;
    // 关键字
    public string[] keywords = { "你好", "开始","停止" };
    // 可信度
    public ConfidenceLevel m_confidenceLevel = ConfidenceLevel.Medium;

    // Use this for initialization
    void Start()
    {
        if (m_PhraseRecognizer == null)
        {
            //创建一个识别器
            m_PhraseRecognizer = new KeywordRecognizer(keywords, m_confidenceLevel);
            //通过注册监听的方法
            m_PhraseRecognizer.OnPhraseRecognized += M_PhraseRecognizer_OnPhraseRecognized;
            //开启识别器
            m_PhraseRecognizer.Start();

            Debug.Log("创建识别器成功");
        }
    }

    /// <summary>
    ///  当识别到关键字时,会调用这个方法
    /// </summary>
    /// <param name="args"></param>
    private void M_PhraseRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {
        SpeechRecognition();
        print(args.text);
    }
    private void OnDestroy()
    {
        //判断场景中是否存在语音识别器,如果有,释放
        if (m_PhraseRecognizer != null)
        {
            //用完应该释放,否则会带来额外的开销
            m_PhraseRecognizer.Dispose();
        }

    }
    // Update is called once per frame
    void Update()
    {

    }
    /// <summary>
    /// 识别到语音的操作
    /// </summary>
    void SpeechRecognition()
    {

    }
}

Demo下载地址:https://github.com/ShuxinWen/AutomaticSpeechRecognition-ASR-

到此这篇关于Unity 实现语音识别功能的文章就介绍到这了,更多相关Unity 语音识别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#中public变量不能被unity面板识别的解决方案

    究其根本,原因在于,能在unity面板上识别的变量,public不是唯一的条件,另外一个条件是可序列化 比如你声明了如下一个类 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Wave { public GameObject prefab; public int count; public float rate; } 在另外一个类中进行声明时如下: public

  • Unity调用手机摄像机识别二维码

    本文实现Unity调用手机摄像,拍摄,然后识别二维码,显示二维码的内容. 需要导入一个zxing.unity.dll文件,现在这个脚本的识别数据是放在Updata里边扫描的 数据量特别大会卡  要是用的话就自己做一下一秒执行一次.我这里没有弄 下载地址:zxing.unity.dll 代码: using System.Threading; using UnityEngine; using ZXing; public class WebCameraScript : MonoBehaviour {

  • Unity实现简单手势识别

    本文实例为大家分享了Unity实现手势识别的具体代码,供大家参考,具体内容如下 代码很简单没有难度,都有注解,随便 看一看 就会了. CallEvent () 方法需要自己搭载使用. Unity代码 using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 手势识别 /// </summary> public class PlayerAnimato

  • 详解Unity 实现语音识别功能

    现在语音识别已经被广泛的应用到各个领域中,在Unity开发中,语音识别也非常受欢迎.大部分人都会选择科大讯飞的语音识别功能,但是在一些小的项目中,使用科大讯飞的就有点大材小用了.今天就介绍一下Unity自带的语音识别功能.说是语音识别,其实unity本身还是做不到的,Unity自带的语音识别功能其实是关键字识别.比如我在Unity中设定好一句话汇总的几个关键词.当我再说这句话的时候就会和识别到.经过测试发现当一句话中有八个关键字,这句话就会非常好的被识别出来. 接下来就一起来实现一下: 首先贴一

  • 详解Unity日志打印工具功能

    目录 一.日志工具功能 二.Logger类 三.LoggerMgr类 四.上传日志 五.日志双击溯源问题 一.日志工具功能 封装Debug类,需要实现功能: 1.控制所有日志是否打印: 2.除了Log,Warning,Error外,给更多日志种类(不同颜色): 3.格式化打印日志: 4.不定参数,自动拼接成字符串: 5.上传日志到服务器: 二.Logger类 1.控制日志打印 封装Debug中关于Log的方法: 使用静态方法,声明静态字段,控制log,warning,error是否打印: Deb

  • 详解vue-flickity的fullScreen功能实现

    描述 在项目集成了vue-flickity组件后发现,该组件参考flickity官网的fullscreen配置不起作用 实现方法 需要添加flickity-fullscreen组件 在main.js中导入flickity-fullscreen组件 添加flickity组件的fullscreen属性 定义fullscreen的CSS样式 具体步骤 1.添加flickity-fullscreen组件 需要提前配置好flickity yarn: yarn add flickity-fullscreen

  • 详解c# 泛型类的功能

    在泛型类中,由于不知道泛型参数T是什么类型,可能是引用类型,也可能是值类型,因此不能将null等赋予泛型类型.如何对泛型对象赋初值.如何保证泛型的正确性等,以使用泛型文档管理器为例: 文档管理器用于从队列中读写文档.首先创建一个泛型管理器AddDocument()方法添加一个文档到队列中,IsDocumentAvailabe只读属性指示队列中是否还有文档. public class DocumentManager<T> { private readonly Queue<T> doc

  • 详解Unity安卓共享纹理

    概述 本文的目的是实现以下的流程: Android/iOS native app 操作摄像头 -> 获取视频流数据 -> 人脸检测或美颜 -> 传输给 Unity 渲染 -> Unity做出更多的效果(滤镜/粒子) 简单通信 在之前的博客里已经说到,Unity 和安卓通信最简单的方法是用 UnitySendMessage 等 API 实现. Android调用Unity: //向unity发消息 UnityPlayer.UnitySendMessage("Main Cam

  • 详解Unity入门之GameObject

    GameObject和Component GameObject是游戏场景中真实存在的,而且有位置的一个物件 Component附属于GameObject,控制GameObject的各种属性 GameObject是由Component组合成的,Component的生命周期和GameObject息息相关.调用此GameObject的Destroy方法,它的子对象和对应的所有Component都会被销毁,但也可以一次只销毁一个Component 常见的Component: Component 作用 R

  • 详解Unity地面检测方案

    1.普通射线 在角色坐标(一般是脚底),发射一根向下的射线(长度约0.2) 但是简单射线只适用于简单地形,实际使用中常常遇到以下问题 1.用collider去碰撞地面,某些时候会有一定的穿插,于是角色的最低点就可能穿透地面,你发射射线的点可能就到了地面以下,射线一直检测不到真正的地面,于是角色就一直悬空 2.角色走斜坡时,角色中点可能会离开地面一小段距离,这一小段距离往往就足够让判断机制误以为角色已经离地,如果你增加射线的长度,那么一定程度上能缓解斜坡问题,但是会降低跳跃判断的精度,精度过低就有

  • antd Vue实现Login登录页面布局案例详解 附带验证码验证功能

    效果 Login页面 <!-- * @Author: Jackie * @Date: 2022-05-07 14:34:06 * @LastEditTime: 2022-05-09 15:57:44 * @LastEditors: Jackie * @Description: 登录页 用户名-密码-验证码登录方式 * @FilePath: /vue-admin-template/src/views/Login.vue * @version: --> <template> <d

  • 详解vue3.x页面功能拆分方式

    目录 一. 组件 二.混入 三.api 四.vuex vue3.x相对比vue2.x主要的应用区别在于setup的使用,这个也是vue3.x的特色,所有的功能都得通过vue钩子引入使用,因为 setup 语法糖环境是不支持 this 的,这种开发方式有点回到原始的感觉,针对小项目还好,但如果页面模块功能复杂,如果都放到一个文件里堆叠,不仅会造成可读性差,而且时间长了难以维护,所以这就需要进行按功能拆分了,方式同vue2.x一样,一个是按照组件拆分,一个是混入处理,还有就是通过vuex或api分离

  • 微信小程序详解如何实现付款功能

    目录 1 支付场景 2 创建数据源 2.1 商品数据源 2.2 订单数据源 3 创建连接器 4 创建应用 5 功能开发 5.1 首页 5.2 商品详情页 5.3 订单页 总结 1 支付场景 我们梳理一下支付场景是什么样子的,首先可以浏览商品,然后在商品的详情页里进行结算.结算的主要目的是生成订单,订单生成好之后就可以进行支付. 支付其实是先向微信支付提交一个在线订单,订单提交成功之后就可以调用支付接口来拉起支付界面. 拉起支付界面之后我们需要按照提示的金额进行付费,付费成功后我们更新一下订单的状

随机推荐