Unity关键词语音识别

       一、背景

        最近使用unity开发语音交互内容的时候,遇到了这样的需求,就是需要使用语音关键字来唤醒应用程序,然后再和程序做交互,有点像智能音箱的意思。具体的技术方案方面,也找了一些第三方的服务,比如百度AI开放平台,讯飞开放平台等,这些都提供有语音唤醒的服务,基本上能够满足我的项目开发需求。

        不过,我是想,先找一个免费且可以离线的方案的,从huggingface上倒是可以找到一些开源的模型可以做到,包括在github上也找到一些开源项目,比如snowboy。但是自己去部署服务的方式,我还是觉得有点重,又想白嫖,又想简单,呵呵。

        后来发现,其实unity本身就带有一个库,可能实现关键词的语音识别,也就是【UnityEngine.Windows.Speech】这个库,是可以做到设定关键词,然后通过语音识别,判断是否说的是设定的关键词。有了这个,就可以制作一个又简单,又能白嫖的离线关键词识别了。当然,这里要注意,这个库只能在windows平台使用。

        二、代码实现

        废话少说,直接上代码:

using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
#if UNITY_STANDALONE_WIN
using UnityEngine.Windows.Speech;
#endif
/// <summary>
/// unity内置语音唤醒 windows有效
/// </summary>
public class UnityWakeOnVoice : MonoBehaviour
{
    /// <summary>
    /// 关键词
    /// </summary>
    [SerializeField]
    private string[] m_Keywords = { "关键词" };//关键字
    /// <summary>
    /// 关键字识别器
    /// </summary>
#if UNITY_STANDALONE_WIN
    private KeywordRecognizer m_Recognizer;
    // Use this for initialization
    void Start()
    {
        //创建一个关键字识别器
        m_Recognizer = new KeywordRecognizer(m_Keywords);
        Debug.Log("创建识别器成功");
        m_Recognizer.OnPhraseRecognized += OnPhraseRecognized;

    }
    
    /// <summary>
    /// 开始识别
    /// </summary>
    public void StartRecognizer()
    {
        if (m_Recognizer == null)
            return;

        m_Recognizer.Start();
    }
    /// <summary>
    /// 结束识别
    /// </summary>
    public void StopRecognizer()
    {
        if (m_Recognizer == null)
            return;

        m_Recognizer.Stop();
    }

    /// <summary>
    /// 识别到关键词
    /// </summary>
    /// <param name="args"></param>
    private void OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {
        StringBuilder builder = new StringBuilder();
        builder.AppendFormat("{0}", args.text);
        string _keyWord = builder.ToString();
        Debug.Log("识别器捕捉到关键词:"+_keyWord);
    }
    #endif
}

        这里还有一点要注意,这个关键词识别库,只有当你准确的说出某个关键词时,才能触发识别事件 ,一句话里包含关键词,实测是没能检测出来的。


三、结束语:

        这个示例已经用在我的一个AI二次元女友的项目里,可以实现在windows平台的实时语音唤醒和对话的功能,感兴趣的朋友可以移步到B站,收看实际效果,相关代码已经开源咯。

[Unity+AI聊天]语音唤醒+AI二次元老婆实时聊天,摆脱键盘开始聊嗨~

### 如何在 Unity 中集成和使用语音识别功能 #### 集成 Android 的语音识别功能 为了给用户提供更便捷的交互方式,在Unity项目中集成了Android平台上的语音识别功能。这不仅限于启动语音识别过程,还包括获取以及显示最终的识别结果[^1]。 ```csharp // C# code snippet for initiating voice recognition on Android within a Unity project. using UnityEngine; public class VoiceRecognition : MonoBehaviour { private string _speechText; public void StartVoiceRecognition() { // Code to start the voice recognizer activity here... } public void OnSpeechRecognized(string result) { _speechText = result; // Store recognized speech as text. Debug.Log($"Recognized Speech: {_speechText}"); } } ``` #### 使用 Whisper 实现本地语音转文字 对于希望离线运行的应用程序来说,`whisper.unity` 提供了一个解决方案——它允许开发者在其本地机器上部署 `whisper.cpp` 模型来进行实时语音到文本转换[^3]。此方案适合那些需要保护隐私或在网络连接不稳定的情况下工作的场景。 #### 应用于 VR 场景下的语音命令解析 当涉及到虚拟现实(VR)领域时,加入语音识别特性可以使用户的沉浸感大大增强。通过让玩家说出预定义好的关键词组来触发事件或是改变游戏状态,从而创造出更为自然流畅的游戏流程[^4]。 #### Vosk API 的应用实例 Vosk 是另一个强大的开源工具包,支持多种语言并且易于嵌入至各种平台上。如果遇到诸如“找不到指定文件”的错误提示,则可能是因为某些路径设置不正确;此时应检查相关配置项,并按照官方文档指导调整代码逻辑以解决问题[^5]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值