Unity开发Rokid应用之离线语音指令交互模型

系列文章目录

unity知识点


文章目录


👉前言

Rokid Unity OpenXR Plugin 是为Unity 开发者提供的在 YodaOS-Master 空间计算操作系统上开发空间计算应用的工具。它基于OpenXR 标准开发,帮助开发者在 YodaOS-Master 上进行空间构建、虚实交互、空间感知,并最终构建完整的空间应用。

本篇内容可接我的上两篇内容:

  1. 使用Unity引擎开发Rokid主机应用的全面配置交互操作
  2. 使用Unity引擎开发Rokid主机应用的模型交互操作

博客将会介绍如何实现 用Unity引擎开发Rokid主机的离线语言交互模型的操作。希望这篇博客对Unity的开发者有所帮助。

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

欢迎点赞评论哦.下面就让我们进入正文吧 !


提示:以下是本篇文章正文内容,下面案例可供参考

👉一、效果实现

Rokid模拟离线语音交互模型

👉二、场景搭建

这个就不多说了,在上一篇的内容里新增的脚本和UI,这里只把新增的东西放上去

1.新增的UI视图如下:

  1. Game视窗显示如下:

  2. 环境配置跟着官网的文档配置即可
    文档链接

  3. 配置 Maven 仓库地址视图如下:

  4. 配置插件依赖视图如下:

👉三、代码实现

因为是继续上一篇的代码实现的,所以还需要稍微的修改一下

  1. ModelData.cs
    代码如下:
csharp 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Battlehub.RTHandles;

public class ModelData : MonoBehaviour
{
    public static ModelData instacne;

    public Transform carPrefab;
    public Transform cartemporary;   //临时的
    public PositionHandle positionHandle;
    public RotationHandle rotationHandle;
    public ScaleHandle scaleHandle;


    private void Awake()
    {
        instacne = this;
    }
    // Start is called before the first frame update
    void Start()
    {
        
    }
    /// <summary>
    /// 生成模型
    /// </summary>
    public void CreateModel()
    {
        if (cartemporary==null)
        {
            Transform transfo = Instantiate(carPrefab);
            cartemporary = transfo;
        }
       

    }
    /// <summary>
    /// 移动模型
    /// </summary>
    public void PosModel()
    {
        CloseJH();
        if (cartemporary != null)
        {
            cartemporary.GetComponent<PositionHandle>().enabled = true;
        }

    }
    /// <summary>
    /// 旋转模型
    /// </summary>
    public void RotModel()
    {
        CloseJH();
        if (cartemporary != null)
        {
            cartemporary.GetComponent<RotationHandle>().enabled = true;
        }

    }
    /// <summary>
    /// 缩放模型
    /// </summary>
    public void ScaModel()
    {
        CloseJH();
        if (cartemporary != null)
        {
            cartemporary.GetComponent<ScaleHandle>().enabled = true;
        }

    }
    /// <summary>
    /// 删除模型
    /// </summary>
    public void DesModel()
    {
        if (cartemporary != null)
        {
            Destroy(cartemporary.gameObject);
        }
    }

    public void CloseJH()
    {
        if (cartemporary != null)
        {
            cartemporary.GetComponent<PositionHandle>().enabled = false;
            cartemporary.GetComponent<RotationHandle>().enabled = false;
            cartemporary.GetComponent<ScaleHandle>().enabled = false;
        }
    }
   
}
  1. 离线语言的设置脚本如下
    代码:RecognitionVoice.cs
csharp 复制代码
using Rokid.UXR.Module;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Android;
using UnityEngine.UI;

public class RecognitionVoice : MonoBehaviour
{
    private bool isInitialized ;
    public Text infoText;   //语音指令
    private void Awake()
    {
        if (!Permission.HasUserAuthorizedPermission("android.permission.RECORD_AUDIO"))
        {
            Permission.RequestUserPermission("android.permission.RECORD_AUDIO");
        }
    }
    // Start is called before the first frame update
    void Start()
    {
        InitializeVoiceControl();
    }
    /// <summary>
    /// 初始化语音控制
    /// </summary>
    private void InitializeVoiceControl()
    {
        if (!isInitialized)
        {
            ModuleManager.Instance.RegistModule("com.rokid.voicecommand.VoiceCommandHelper", false);
            OfflineVoiceModule.Instance.ChangeVoiceCommandLanguage(LANGUAGE.CHINESE);
            isInitialized = true;
        }
        AddVocies();
    }

    public void AddVocies()
    {
        OfflineVoiceModule.Instance.AddInstruct(LANGUAGE.CHINESE, "变成红色", "bian cheng hong se", this.gameObject.name, "OnReceive");
        OfflineVoiceModule.Instance.AddInstruct(LANGUAGE.CHINESE, "变成绿色", "bian cheng lv se", this.gameObject.name, "OnReceive");
        OfflineVoiceModule.Instance.AddInstruct(LANGUAGE.CHINESE, "恢复颜色", "hui fu yan se", this.gameObject.name, "OnReceive");
        OfflineVoiceModule.Instance.Commit();
    }
    public  void OnReceive(string msg)
    {
        infoText.text = msg;
        Debug.Log("-RKX- UXR-Sample:: On Voice Response received : " + msg);

        if (string.Equals("变成红色", msg) || string.Equals("Show blue", msg))
        {
            Changecolor(Color.red);
        }
        else if (string.Equals("变成绿色", msg) || string.Equals("Show green", msg))
        {
            Changecolor(Color.green);

        }
        else if (string.Equals("恢复颜色", msg) || string.Equals("Show white", msg))
        {
            Changecolor(Color.white);

        }
        else
        {
            Debug.Log("voice OnResponse: " + msg);
        }
    }

    void Changecolor(Color color)
    {
        if (ModelData.instacne.cartemporary!=null)
        {
            Transform transf = ModelData.instacne.cartemporary;
            Material[] MATS= transf.GetChild(0).GetComponent<MeshRenderer>().materials;
            MATS[0].color = color;
        }
        
    }

    private void OnDestroy()
    {
        OfflineVoiceModule.Instance.ClearAllInstruct();
        OfflineVoiceModule.Instance.Commit();
    }
}

3.RecognitionVoice.cs脚本挂载到如下图所示

4.上面有一个显示当前语音的Text,拖到脚本里面

game里面显示的

新建的语音模拟按钮挂载脚本方法OnReceive()


  1. 运行点击按钮的效果

点击模拟语音按钮下面text会显示对应语音信息


  1. 最后发布即可测试效果。

注意:当前支持中、英文识别,需要注意,使用过程中仅允许使用同一语种,不可混用。

Rokid的原理本质上是一套融合了人工智能、计算机视觉、语音技术和先进光学显示的软硬件一体化的解决方案。

对于AR产品,其原理核心是SLAM + 光波导显示,实现虚拟信息与真实环境的无缝、稳定叠加和交互。

对于AI语音产品,其原理核心是远场语音识别 + 自然语言理解,实现自然、便捷的语音控制和信息服务。

交互系统:

手势识别:摄像头捕捉手部,识别预定义的手势。

语音控制:作为主要输入方式之一。

6DoF手柄:在一些专业型号中,配备的手柄自身也能被眼镜追踪,提供更精确的指向和操作。


👉壁纸分享

👉总结

本次总结的就是 离线语音指令交互模型实现, 有需要会继续增加功能

如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢

你的点赞就是对博主的支持,有问题记得留言评论哦!

不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

相关推荐
噢,我明白了2 小时前
JAVA中的一些基础应用知识点
java·开发语言
寂寞的船2 小时前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
时间的拾荒人3 小时前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
木头左3 小时前
【架构设计】教育类 App 服务端化改造:AI 上移、题库分层与个人题库归属
android·架构设计·系统设计·后端开发·数据库设计
敲上瘾3 小时前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
墨狂之逸才4 小时前
USB 的 HOST 和 DEVICE 到底有什么区别?ADB 调试应该选哪个?
android
码途行者4 小时前
网站的SQL 注入:从攻击原理到防御措施
开发语言·sql·php
奶油话梅糖5 小时前
苹果的内核跑上了安卓手机:2,631 Star 的 HakiOS 让 XNU 在 Adreno GPU 上画出 118 帧
android·macos·智能手机
旖旎夜光5 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
恋猫de小郭5 小时前
Flutter THLC 的 WebView 滚动终于从 70 FPS 提升到 120 FPS
android·前端·flutter