如何在 Unity 游戲中集成 AI 語音識別?

語音識別是一項將語音轉(zhuǎn)換為文本的技術(shù),想象一下它如何在游戲中發(fā)揮作用?發(fā)出命令操縱控制面板或者游戲角色、直接與 NPC 對話、提升交互性等等,都有可能。本文將介紹如何使用 Hugging Face Unity API 在 Unity 游戲中集成 SOTA 語音識別功能。
您可以訪問 itch.io 網(wǎng)站 下載 Unity 游戲樣例,親自嘗試一下語音識別功能。
先決條件
閱讀文本可能需要了解一些 Unity 的基本概念。除此之外,您還需安裝 Hugging Face Unity API,可以點擊?之前的博文?閱讀 API 安裝說明。
步驟
1. 設(shè)置場景
在本教程中,我們將設(shè)置一個非常簡單的場景。玩家可以點擊按鈕來開始或停止錄制語音,識別音頻并轉(zhuǎn)換為文本。
首先我們新建一個 Unity 項目,然后創(chuàng)建一個包含三個 UI 組件的畫布 (Canvas):
開始按鈕: 按下以開始錄制語音。
停止按鈕: 按下以停止錄制語音。
文本組件 (TextMeshPro): 顯示語音識別結(jié)果文本的地方。
2. 創(chuàng)建腳本
創(chuàng)建一個名為?SpeechRecognitionTest
?的腳本,并將其附加到一個空的游戲?qū)ο?(GameObject) 上。
在腳本中,首先定義對 UI 組件的引用:
在 inspector 窗口中分配對應(yīng)組件。
然后,使用?Start()
?方法為開始和停止按鈕設(shè)置監(jiān)聽器:
此時,腳本中的代碼應(yīng)該如下所示:
3. 錄制麥克風(fēng)語音輸入
現(xiàn)在,我們來錄制麥克風(fēng)語音輸入,并將其編碼為 WAV 格式。這里需要先定義成員變量:
然后,在?StartRecording()
?中,使用?Microphone.Start()
?方法實現(xiàn)開始錄制語音的功能:
上面代碼實現(xiàn)以 44100 Hz 錄制最長為 10 秒的音頻。
當錄音時長達到 10 秒的最大限制,我們希望錄音行為自動停止。為此,需要在?Update()
?方法中寫上以下內(nèi)容:
接著,在?StopRecording()
?中,截取錄音片段并將其編碼為 WAV 格式:
最后,我們需要實現(xiàn)音頻編碼的?EncodeAsWAV()
?方法,這里直接使用 Hugging Face API,只需要將音頻數(shù)據(jù)準備好即可:
完整的腳本如下所示:
如要測試該腳本代碼是否正常運行,您可以在?StopRecording()
?方法末尾添加以下代碼:
好了,現(xiàn)在您點擊?Start
?按鈕,然后對著麥克風(fēng)說話,接著點擊?Stop
?按鈕,您錄制的音頻將會保存為?test.wav
?文件,位于工程目錄的 Unity 資產(chǎn)文件夾中。
4. 語音識別
接下來,我們將使用 Hugging Face Unity API 對編碼音頻實現(xiàn)語音識別。為此,我們創(chuàng)建一個?SendRecording()
?方法:
該方法實現(xiàn)將編碼音頻發(fā)送到語音識別 API,如果發(fā)送成功則以白色顯示響應(yīng),否則以紅色顯示錯誤消息。
別忘了在?StopRecording()
?方法的末尾調(diào)用?SendRecording()
:
5. 最后潤色
最后來提升一下用戶體驗,這里我們使用交互性按鈕和狀態(tài)消息。
開始和停止按鈕應(yīng)該僅在適當?shù)臅r候才產(chǎn)生交互效果,比如: 準備錄制、正在錄制、停止錄制。
在錄制語音或等待 API 返回識別結(jié)果時,我們可以設(shè)置一個簡單的響應(yīng)文本來顯示對應(yīng)的狀態(tài)信息。
完整的腳本如下所示:
祝賀!現(xiàn)在您可以在 Unity 游戲中集成 SOTA 語音識別功能了!
如果您有任何疑問,或想更多地參與 Hugging Face for Games 系列,可以加入 Hugging Face Discord 頻道!
英文原文:?https://hf.co/blog/unity-asr
作者: Dylan Ebert
譯者: SuSung-boy
審校/排版: zhongdongy (阿東)