unity使用語音識別的字串匹配演算法:
1.你不能指望每次翻譯的都那麼準確,或者說,一字不差。
2.口語化的表達使得往往一大堆的語句其實是乙個意思。
所以我們不難發現乙個事實,如果語音識別要拿來用的話,這種對應最好不要是一一對映的,就比如,如果我只識別到了玩家說了「攻擊」,才讓我們的遊戲物體做出相應的操作的話,那麼問題來了,萬一玩家實際說的是「進攻」,抑或是更口語化的表達,又或者說是說了攻擊但被識別成了「公雞」,那怎麼辦呢?難道就不執行這種操作了嗎?這顯然是不行的。
於是便有了兩個想法:建立一張等價表,這是一張多對一的對映表,多種輸入可以達成同一種輸出,其次,對於乙個字串,只需要字元相似度達到一定的時候,就認為是同乙個句子。
思路有了,很快就能擼出乙個字串配對的小系統,以下是**:
using unityengine;
using system.collections;
using system.collections.generic;
namespace stringtoinstruct
public int find(string s,ref float pairrate)
}
if (temp_max_pairrate >= endurewrongrate)
else
}
public int insertinstruct()
public void insert_index(int instruct,string word)
private float pair(string str1,string str2)
{
int len1 = str1.length;
int len2 = str2.length;
int[,] dif = new int[len1+1, len2+1];
for(int i=0;i主要說說其中的pair方法:
其本質上是通過計算有多少不同的字元和總字元的比值算出的相似性。
最開始維護乙個二維陣列,這個二維陣列是有意義的索引為[i][j]的資料存的是字串1前i個和字串2的前j個中字元的差異個數。
所以在初始化的時候,我們能確定的是d[0][i]=i;d[i][0]=i;
接著乙個雙層迴圈就是乙個很簡單的動態規劃了,狀態轉移方程是
dif [i, j] = min (dif[i-1,j-1]+temp,dif[i,j-1]+1,dif[i-1,j]+1);
很容易理解,dif[i][j]的值有且只有三種**,dif[i-1][j-1]加上第i是不是等於第j,或者[i-1][j]+1(因為多出的那乙個必然是不一樣的,沒字元和他配對啊),或者[i][j-1]+1(同理了)
最後就是輸出一下dif[len1][len2]即可了。
下面是一些測試字串配對系統的結果:
「photo wake up」創新專案實訓開題總結
專案名稱 photo wake up 基於二維影象的三維人體模型重建 專案背景 哈利波特 世界裡有一種神奇的魔法報紙,報中 上的人物可以動起來,看起來有點像 gif 圖。在故事裡這當然是 魔法 的功勞,現實世界中還沒有造出這樣的報紙。我們想通過現有對影象的研究,使用ai演算法,實現這個過程。華盛頓大...
創新專案實訓實踐筆記 3
在我們之前提到的窗戶預製體file中加入乙個指令碼,命名為change items 設定變數 public gameobject allitem 所有item的父物體 public gameobject items 用於儲存展品的陣列 public gameobject button control...
(個人)VR太極拳學習系統 創新實訓第二週(2)
上次直接在actor藍圖中使用了sphinx ue4外掛程式,目的只是為了測試該外掛程式的可用性,在確認完確實可用之後,需要根據我們專案的情況來決定如何使用它。由於我們在不同的關卡中可能需要不同的語音命令,所以我暫且打算將其封裝至關卡藍圖類中,其他關卡藍圖繼承該類即可使用它提供的語音控制,並且可以實...