• Unity关键词语音识别


           一、背景

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

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

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

            二、代码实现

            废话少说,直接上代码:

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using System.Text;
    4. using UnityEngine;
    5. #if UNITY_STANDALONE_WIN
    6. using UnityEngine.Windows.Speech;
    7. #endif
    8. /// <summary>
    9. /// unity内置语音唤醒 windows有效
    10. /// </summary>
    11. public class UnityWakeOnVoice : MonoBehaviour
    12. {
    13. /// <summary>
    14. /// 关键词
    15. /// </summary>
    16. [SerializeField]
    17. private string[] m_Keywords = { "关键词" };//关键字
    18. /// <summary>
    19. /// 关键字识别器
    20. /// </summary>
    21. #if UNITY_STANDALONE_WIN
    22. private KeywordRecognizer m_Recognizer;
    23. // Use this for initialization
    24. void Start()
    25. {
    26. //创建一个关键字识别器
    27. m_Recognizer = new KeywordRecognizer(m_Keywords);
    28. Debug.Log("创建识别器成功");
    29. m_Recognizer.OnPhraseRecognized += OnPhraseRecognized;
    30. }
    31. /// <summary>
    32. /// 开始识别
    33. /// </summary>
    34. public void StartRecognizer()
    35. {
    36. if (m_Recognizer == null)
    37. return;
    38. m_Recognizer.Start();
    39. }
    40. /// <summary>
    41. /// 结束识别
    42. /// </summary>
    43. public void StopRecognizer()
    44. {
    45. if (m_Recognizer == null)
    46. return;
    47. m_Recognizer.Stop();
    48. }
    49. /// <summary>
    50. /// 识别到关键词
    51. /// </summary>
    52. /// <param name="args"></param>
    53. private void OnPhraseRecognized(PhraseRecognizedEventArgs args)
    54. {
    55. StringBuilder builder = new StringBuilder();
    56. builder.AppendFormat("{0}", args.text);
    57. string _keyWord = builder.ToString();
    58. Debug.Log("识别器捕捉到关键词:"+_keyWord);
    59. }
    60. #endif
    61. }

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


    三、结束语:

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

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

  • 相关阅读:
    【IDE插件教学】华为云应用中间件系列—Redis实现(电商游戏应用)排行榜示例
    6.判断是不是闰年
    Windows下定时下载Linux服务器的数据库备份文件(pscp+bat脚本+定时任务)
    SpringBoot SpringBoot 原理篇 3 核心原理 3.3 启动流程【2】
    Kotlin高仿微信-第34篇-支付-向商家付款(二维码)
    一文看懂推荐系统:召回08:双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新
    调教 文心一言 生成 AI绘画 提示词(Midjourney)
    C#中lock 和 ReaderWriterLock 的使用总结
    前端和后端交互数据类型转换
    SpringCloud搭建应用
  • 原文地址:https://blog.csdn.net/sinat_28962939/article/details/133801681