Hangbemenet a Unityben
Figyelemfelhívás
Mielőtt hozzákezdene, fontolja meg a Unity beépülő modul használatát a Cognitive Speech Services SDK-hoz. A beépülő modul jobb beszédpontossági eredményeket és egyszerű hozzáférést biztosít a beszéd-szöveg dekódolásához, valamint fejlett beszédfunkciókat, például a párbeszédpanelt, a szándékalapú interakciót, a fordítást, a szöveg-beszédszintézist és a természetes beszédfelismerést. Első lépésként tekintse meg a mintát és a dokumentációt.
A Unity háromféleképpen adhat hozzá hangbemenetet a Unity-alkalmazáshoz, amelyek közül az első kettő a PhraseRecognizer típusa:
- Az
KeywordRecognizer
alkalmazás sztringparancsok tömbjével látja el a figyeléshez - Ez
GrammarRecognizer
egy SRGS-fájlt ad az alkalmazásnak, amely meghatároz egy adott nyelvhelyesség-figyelőt - Lehetővé
DictationRecognizer
teszi, hogy az alkalmazás bármilyen szót hallgasson, és a felhasználónak megjegyzést vagy más beszédmegjelenítést biztosítson
Feljegyzés
A diktálás és a kifejezésfelismerés nem kezelhető egyszerre. Ha a GrammarRecognizer vagy a KeywordRecognizer aktív, a DictationRecognizer nem lehet aktív, és fordítva.
A Voice funkció engedélyezése
A Mikrofon funkciót deklarálni kell ahhoz, hogy egy alkalmazás hangbemenetet használjon.
- A Unity-szerkesztőben navigáljon a Project Settings > Player szerkesztéséhez >
- A Windows Áruház lap kiválasztása
- A Közzétételi beállítások > képességei szakaszban ellenőrizze a Mikrofon funkciót
- Engedélyek megadása az alkalmazásnak mikrofon-hozzáféréshez a HoloLens-eszközön
- Ezt az eszköz indításakor fogja kérni a rendszer, de ha véletlenül a "nem" gombra kattintott, módosíthatja az eszközbeállítások engedélyeit
Kifejezésfelismerés
Ahhoz, hogy az alkalmazás meghallgathassa a felhasználó által adott kifejezéseket, majd végrehajthat néhány műveletet, a következőkre van szükség:
- Adja meg, hogy mely kifejezéseket hallgassa meg egy vagy több
KeywordRecognizer
GrammarRecognizer
OnPhraseRecognized
Az esemény kezelése és a felismert kifejezésnek megfelelő művelet végrehajtása
KeywordRecognizer
Névtér: UnityEngine.Windows.Speech
Típusok: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
Néhány billentyűleütés mentéséhez szükség lesz néhány utasításra:
using UnityEngine.Windows.Speech;
using System.Collections.Generic;
using System.Linq;
Ezután adjunk hozzá néhány mezőt az osztályhoz a felismerő és a kulcsszóműveleti> szótár tárolásához:
KeywordRecognizer keywordRecognizer;
Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();
Most adjon hozzá egy kulcsszót a szótárhoz, például egy Start()
metódusban. Ebben a példában az "aktiválás" kulcsszót adunk hozzá:
//Create keywords for keyword recognizer
keywords.Add("activate", () =>
{
// action to be performed when this keyword is spoken
});
Hozza létre a kulcsszó-felismerőt, és mondja el, hogy mit szeretnénk felismerni:
keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
Regisztráljon az OnPhraseRecognized
eseményre
keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
Példakezelő:
private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
System.Action keywordAction;
// if the keyword recognized is in our dictionary, call that Action.
if (keywords.TryGetValue(args.text, out keywordAction))
{
keywordAction.Invoke();
}
}
Végül kezdje el felismerni!
keywordRecognizer.Start();
GrammarRecognizer
Névtér: UnityEngine.Windows.Speech
Típusok: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
A GrammarRecognizer akkor használatos, ha az SRGS használatával adja meg a felismerési nyelvtant. Ez akkor lehet hasznos, ha az alkalmazás több kulcsszóval rendelkezik, ha összetettebb kifejezéseket szeretne felismerni, vagy ha egyszerűen be szeretné kapcsolni és ki szeretné kapcsolni a parancskészleteket. Lásd: Nyelvtanok létrehozása SRGS XML használatával fájlformátum-információkhoz.
Miután megkapta az SRGS-nyelvtant, és a projekt egy StreamingAssets mappában található:
<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml
Hozzon létre egy fájlt GrammarRecognizer
, és adja át az SRGS-fájl elérési útját:
private GrammarRecognizer grammarRecognizer;
grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");
Regisztráljon az OnPhraseRecognized
eseményre
grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;
Az SRGS-nyelvhelyességben megadott információkat tartalmazó visszahívást kap, amelyet megfelelően kezelhet. A legfontosabb információk többsége a semanticMeanings
tömbben lesz megadva.
private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
SemanticMeaning[] meanings = args.semanticMeanings;
// do something
}
Végül kezdje el felismerni!
grammarRecognizer.Start();
Diktálás
Névtér: UnityEngine.Windows.Speech
Típusok: DictationRecognizer, SpeechError, SpeechSystemStatus
DictationRecognizer
A használatával szöveggé alakíthatja a felhasználó beszédét. A DictationRecognizer elérhetővé teszi a diktálási funkciókat, és támogatja a hipotézisek és a kifejezések befejezett eseményeinek regisztrálását és figyelését, így visszajelzést küldhet a felhasználónak a beszéd közben és utána is. Start()
és Stop()
a metódusok engedélyezik és letiltják a diktálás felismerését. Miután végzett a felismerővel, el kell helyezni a használt erőforrások felszabadításához Dispose()
. Ezeket az erőforrásokat automatikusan felszabadítja a szemétgyűjtés során, extra teljesítményköltséggel, ha korábban még nem adták ki őket.
A diktálás használatának megkezdéséhez mindössze néhány lépésre van szükség:
- Új létrehozása
DictationRecognizer
- Diktálási események kezelése
- A DictationRecognizer indítása
A diktálási képesség engedélyezése
Az internetes ügyfél és a mikrofon képességeit deklarálni kell ahhoz, hogy egy alkalmazás diktálást használjon:
- A Unity-szerkesztőben nyissa meg a Project Settings > Player szerkesztését >
- Kiválasztás a Windows Áruház lapon
- A Közzétételi beállítások > képességei szakaszban ellenőrizze az InternetClient-képességet
- Ha még nem engedélyezte a mikrofont, ellenőrizze a Mikrofon funkciót
- Adjon engedélyeket az alkalmazásnak mikrofon-hozzáféréshez a HoloLens-eszközön, ha még nem tette meg
- Ezt az eszköz indításakor fogja kérni a rendszer, de ha véletlenül a "nem" gombra kattintott, módosíthatja az eszközbeállítások engedélyeit
DictationRecognizer
Hozzon létre egy DictationRecognizert a következőképpen:
dictationRecognizer = new DictationRecognizer();
Négy diktálási esemény van, amelyek előfizethetők és kezelhetők a diktálási viselkedés implementálásához.
DictationResult
DictationComplete
DictationHypothesis
DictationError
DictationResult
Ezt az eseményt a rendszer a felhasználó szüneteltetése után aktiválja, általában egy mondat végén. A teljes felismert sztring itt lesz visszaadva.
Először iratkozzon fel az eseményre DictationResult
:
dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
Ezután kezelje a DictationResult visszahívást:
private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
{
// do something
}
Diktálási hipotézis
Ez az esemény folyamatosan aktiválódik, miközben a felhasználó beszél. Ahogy a felismerő figyel, az eddig hallott szövegeket tartalmazza.
Először iratkozzon fel az eseményre DictationHypothesis
:
dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
Ezután kezelje a DictationHypothesis visszahívást:
private void DictationRecognizer_DictationHypothesis(string text)
{
// do something
}
DictationComplete
Ezt az eseményt akkor aktiválja a rendszer, ha a felismerő leáll, akár a Leállítás()ról, akár időtúllépésről, akár valamilyen más hibáról van szó.
Először iratkozzon fel az eseményre DictationComplete
:
dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
Ezután kezelje a DictationComplete visszahívást:
private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
{
// do something
}
DictationError
Ez az esemény hiba esetén aktiválódik.
Először iratkozzon fel az eseményre DictationError
:
dictationRecognizer.DictationError += DictationRecognizer_DictationError;
Ezután kezelje a DictationError visszahívást:
private void DictationRecognizer_DictationError(string error, int hresult)
{
// do something
}
Miután feliratkozott és kezelte a fontos diktálási eseményeket, indítsa el a diktálás-felismerőt az események fogadásának megkezdéséhez.
dictationRecognizer.Start();
Ha már nem szeretné megtartani a DictationRecognizert, le kell iratkoznia az eseményekről, és el kell helyeznie a DictationRecognizert.
dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete ;
dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis ;
dictationRecognizer.DictationError -= DictationRecognizer_DictationError ;
dictationRecognizer.Dispose();
Tippek
Start()
ésStop()
a metódusok engedélyezik és letiltják a diktálás felismerését.- Miután végzett a felismerővel, el kell végeznie a használatban lévő erőforrások felszabadításához
Dispose()
. Ezeket az erőforrásokat automatikusan felszabadítja a szemétgyűjtés során, extra teljesítményköltséggel, ha korábban még nem adták ki őket. - Az időtúllépések meghatározott időtartam után következnek be. Ezeket az időtúllépéseket az
DictationComplete
eseményen ellenőrizheti. Két időtúllépést kell figyelembe vennie:- Ha a felismerő elindul, és az első öt másodpercben nem hall semmilyen hangot, az időtúllépést fog okozni.
- Ha a felismerő eredményt ad, de 20 másodpercig hallgat, időtúllépés történik.
Kifejezésfelismerés és diktálás használata
Ha a kifejezésfelismerést és a diktálást is használni szeretné az alkalmazásban, az egyiket teljesen le kell állítania, mielőtt elindíthatja a másikat. Ha több KeywordRecognizer is fut, egyszerre leállíthatja őket a következőkkel:
PhraseRecognitionSystem.Shutdown();
A DictationRecognizer leállítása után az Restart()
összes felismerőt visszaállíthatja az előző állapotba:
PhraseRecognitionSystem.Restart();
Elindíthat egy KeywordRecognizert is, amely a PhraseRecognitionSystem-t is újraindítja.
Hangbemenet a Mixed Reality eszközkészletben
A hangbemenetre vonatkozó MRTK-példákat az alábbi bemutatójelenetekben találja:
Következő fejlesztési ellenőrzőpont
Ha a Unity fejlesztési ellenőrzőpontja által meghatározott utat követi, a következő feladat a Mixed Reality platform képességeinek és API-inak felfedezése:
Bármikor visszatérhet a Unity fejlesztési ellenőrzőpontjaihoz .