詳解Unity 實(shí)現(xiàn)語(yǔ)音識(shí)別功能
現(xiàn)在語(yǔ)音識(shí)別已經(jīng)被廣泛的應(yīng)用到各個(gè)領(lǐng)域中,在Unity開(kāi)發(fā)中,語(yǔ)音識(shí)別也非常受歡迎。大部分人都會(huì)選擇科大訊飛的語(yǔ)音識(shí)別功能,但是在一些小的項(xiàng)目中,使用科大訊飛的就有點(diǎn)大材小用了。今天就介紹一下Unity自帶的語(yǔ)音識(shí)別功能。說(shuō)是語(yǔ)音識(shí)別,其實(shí)unity本身還是做不到的,Unity自帶的語(yǔ)音識(shí)別功能其實(shí)是關(guān)鍵字識(shí)別。比如我在Unity中設(shè)定好一句話匯總的幾個(gè)關(guān)鍵詞。當(dāng)我再說(shuō)這句話的時(shí)候就會(huì)和識(shí)別到。經(jīng)過(guò)測(cè)試發(fā)現(xiàn)當(dāng)一句話中有八個(gè)關(guān)鍵字,這句話就會(huì)非常好的被識(shí)別出來(lái)。
接下來(lái)就一起來(lái)實(shí)現(xiàn)一下:
首先貼一張效果圖:

場(chǎng)景我們沿用的是音頻可視化那篇文章里用到的場(chǎng)景。這里就不多做介紹了。Unity自帶的語(yǔ)音識(shí)別功能官方有API供參考,地址在這里(戳這里)

這里大家可以自行去看一下。下面開(kāi)始介紹一下我們要實(shí)現(xiàn)的功能:
想要識(shí)別語(yǔ)音識(shí)別功能我們首先由先引用個(gè)命名空間
using UnityEngine.Windows.Speech;//引入命名空間
然后定義一個(gè)string類型數(shù)組,這個(gè)數(shù)組就是存放那些我們要識(shí)別關(guān)鍵字。
// 關(guān)鍵字
public string[] keywords = { "你好", "開(kāi)始","停止" };
緊接著我們要在start方法中先創(chuàng)建一個(gè)語(yǔ)音識(shí)別器,這樣才能夠進(jìn)行語(yǔ)音識(shí)別
//創(chuàng)建一個(gè)識(shí)別器 m_PhraseRecognizer = new KeywordRecognizer(keywords, m_confidenceLevel); //通過(guò)注冊(cè)監(jiān)聽(tīng)的方法 m_PhraseRecognizer.OnPhraseRecognized += M_PhraseRecognizer_OnPhraseRecognized; //開(kāi)啟識(shí)別器 m_PhraseRecognizer.Start();
接著是一個(gè)方法,這個(gè)方法主要就是用于識(shí)別到關(guān)鍵字后要做的事情
/// <summary>
/// 當(dāng)識(shí)別到關(guān)鍵字時(shí),會(huì)調(diào)用這個(gè)方法
/// </summary>
/// <param name="args"></param>
private void M_PhraseRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
print(args.text);
}
這樣基本上重要的部分就完成。下面是全部的代碼,在底部還有一個(gè)小Demo,感興趣的可以下載下來(lái)自行體驗(yàn)一下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Windows.Speech;//引入命名空間 利用
/// <summary>
/// 語(yǔ)音識(shí)別(主要是別關(guān)鍵字)
/// </summary>
public class speechKey : MonoBehaviour
{
// 短語(yǔ)識(shí)別器
private PhraseRecognizer m_PhraseRecognizer;
// 關(guān)鍵字
public string[] keywords = { "你好", "開(kāi)始","停止" };
// 可信度
public ConfidenceLevel m_confidenceLevel = ConfidenceLevel.Medium;
// Use this for initialization
void Start()
{
if (m_PhraseRecognizer == null)
{
//創(chuàng)建一個(gè)識(shí)別器
m_PhraseRecognizer = new KeywordRecognizer(keywords, m_confidenceLevel);
//通過(guò)注冊(cè)監(jiān)聽(tīng)的方法
m_PhraseRecognizer.OnPhraseRecognized += M_PhraseRecognizer_OnPhraseRecognized;
//開(kāi)啟識(shí)別器
m_PhraseRecognizer.Start();
Debug.Log("創(chuàng)建識(shí)別器成功");
}
}
/// <summary>
/// 當(dāng)識(shí)別到關(guān)鍵字時(shí),會(huì)調(diào)用這個(gè)方法
/// </summary>
/// <param name="args"></param>
private void M_PhraseRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
SpeechRecognition();
print(args.text);
}
private void OnDestroy()
{
//判斷場(chǎng)景中是否存在語(yǔ)音識(shí)別器,如果有,釋放
if (m_PhraseRecognizer != null)
{
//用完應(yīng)該釋放,否則會(huì)帶來(lái)額外的開(kāi)銷(xiāo)
m_PhraseRecognizer.Dispose();
}
}
// Update is called once per frame
void Update()
{
}
/// <summary>
/// 識(shí)別到語(yǔ)音的操作
/// </summary>
void SpeechRecognition()
{
}
}
Demo下載地址:https://github.com/ShuxinWen/AutomaticSpeechRecognition-ASR-
到此這篇關(guān)于Unity 實(shí)現(xiàn)語(yǔ)音識(shí)別功能的文章就介紹到這了,更多相關(guān)Unity 語(yǔ)音識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c# 通過(guò)wbemtest和WMI Code Cretor更加高效的訪問(wèn)WMI
能找到這篇博客的,相信都是有操作WMI需求的了。本文將講述如何快速驗(yàn)證、并集成到C#來(lái)操作WMI。2021-05-05
C#語(yǔ)言基礎(chǔ)——結(jié)構(gòu)體和枚舉類型全面解析
下面小編就為大家?guī)?lái)一篇C#語(yǔ)言基礎(chǔ)——結(jié)構(gòu)體和枚舉類型全面解析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07
詳解C# 網(wǎng)絡(luò)編程系列:實(shí)現(xiàn)類似QQ的即時(shí)通信程序
本篇主要介紹了c#實(shí)現(xiàn)類似QQ的即時(shí)通信程序 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12
將數(shù)組中指定數(shù)量的元素移動(dòng)數(shù)組后面的實(shí)現(xiàn)代碼
本篇文章是對(duì)將數(shù)組中指定數(shù)量的元素移動(dòng)數(shù)組后面的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

