Megosztás a következőn keresztül:


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.

  1. A Unity-szerkesztőben navigáljon a Project Settings > Player szerkesztéséhez >
  2. A Windows Áruház lap kiválasztása
  3. A Közzétételi beállítások > képességei szakaszban ellenőrizze a Mikrofon funkciót
  4. 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:

  1. Adja meg, hogy mely kifejezéseket hallgassa meg egy vagy több KeywordRecognizerGrammarRecognizer
  2. 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:

  1. Új létrehozása DictationRecognizer
  2. Diktálási események kezelése
  3. 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:

  1. A Unity-szerkesztőben nyissa meg a Project Settings > Player szerkesztését >
  2. Kiválasztás a Windows Áruház lapon
  3. 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
  4. 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.

  1. DictationResult
  2. DictationComplete
  3. DictationHypothesis
  4. 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() é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 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:
    1. Ha a felismerő elindul, és az első öt másodpercben nem hall semmilyen hangot, az időtúllépést fog okozni.
    2. 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 .