Hangbemenet a Unityben

Figyelemfelhívás

A kezdés előtt fontolja meg a Unity beépülő modult a Cognitive Speech Services SDK-hoz. A beépülő modul jobb Beszéd pontossági eredményeket és egyszerű hozzáférést biztosít a beszéd-szöveg dekódoláshoz, valamint olyan fejlett beszédszolgáltatásokat biztosít, mint a párbeszédpanel, a szándékalapú interakció, a fordítás, a szöveg-beszédszintézis és a természetes nyelvi beszédfelismerés. Első lépésekért tekintse meg a mintát és a dokumentációt.

A Unity három módszert kínál fel a Hangbemenet Unity-alkalmazáshoz való hozzáadására, amelyek közül az első kettő a PhraseRecognizer típusa:

  • A sztringparancsok tömbjéhez használja az alkalmazást, amely figyel KeywordRecognizer
  • A GrammarRecognizer ad az alkalmazásnak egy SRGS-fájlt, amely meghatároz egy adott nyelvtant, amit figyelni kell
  • Az lehetővé teszi, hogy az alkalmazás bármilyen szót figyeljen, és a felhasználónak egy megjegyzést vagy a beszéd DictationRecognizer egyéb megjelenítését

Megjegyzés

A diktálás és a kifejezésfelismerés nem kezelhető egyszerre. Ha egy GrammarRecognizer vagy a KeywordRecognizer aktív, a DictationRecognizer nem lehet aktív, és fordítva.

A Hang funkció engedélyezése

A Mikrofon képességet deklarálni kell ahhoz, hogy az alkalmazás hangbemenetet használjon.

  1. A Unity-szerkesztőben lépjen az Edit Project Gépház Player > elemre
  2. A Windows lap kiválasztása
  3. A Közzétételi Gépház képességek szakaszban ellenőrizze a Mikrofon képességet
  4. Engedélyek megadása az alkalmazásnak mikrofonos hozzáféréshez a HoloLens eszközön
    • Ezt az eszköz indításakor kell megtennie, de ha véletlenül a "Nem" gombra kattintott, módosíthatja az engedélyeket az eszközbeállításokban

Kifejezésfelismerés

Ahhoz, hogy az alkalmazás figyelni tudja a felhasználó által kimondott kifejezéseket, majd valamilyen műveletet is el kell látnia, a következőt kell tennie:

  1. Adja meg, hogy melyik kifejezéseket figyelje a vagy a KeywordRecognizer használatával GrammarRecognizer
  2. Kezelje az OnPhraseRecognized eseményt, és a felismert kifejezésnek megfelelő műveletet

KeywordRecognizer

Névtér:UnityEngine.Windows. Beszéd
Típusok:KeywordRecognizer,PhraseRecognizedEventArgs,SpeechError,SpeechSystemStatus

Néhány using utasításra lesz szükség a billentyűleütések mentéshez:

using UnityEngine.Windows.Speech;
using System.Collections.Generic;
using System.Linq;

Ezután adjunk hozzá néhány mezőt az osztályhoz a recognizer és a kulcsszó művelet > szótárának tárolására:

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 "activate" kulcsszót adhatja hozzá:

//Create keywords for keyword recognizer
keywords.Add("activate", () =>
{
    // action to be performed when this keyword is spoken
});

Hozza létre a recognizer kulcsszót, és mondja el neki, hogy mit szeretnénk felismerni:

keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

Most regisztráljon az OnPhraseRecognized eseményre

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Ilyen kezelő például a következő:

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égezetül pedig kezdjen felismerni!

keywordRecognizer.Start();

GrammarRecognizer

Névtér:UnityEngine.Windows. Beszéd
Típusok:GrammarRecognizer,PhraseRecognizedEventArgs,SpeechError,SpeechSystemStatus

A GrammarRecognizer akkor használatos, ha a felismerési nyelvtant az SRGS használatával adja meg. Ez akkor lehet hasznos, ha az alkalmazás több mint néhány kulcsszót tartalmaz, ha összetettebb kifejezéseket szeretne felismerni, vagy ha egyszerűen szeretne be- és kikapcsolni parancsokat. Lásd: Nyelvtanok létrehozása SRGS XML használatával a fájlformátumra vonatkozó információkért.

Ha megvan az SRGS-nyelvtan, és az a streamingAssetsmappában található a projektben:

<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml

Hozzon létre egy et, és adja meg az GrammarRecognizer SRGS-fájl elérési útját:

private GrammarRecognizer grammarRecognizer;
grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");

Most regisztráljon az OnPhraseRecognized eseményre

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Egy visszahívást fog kapni, amely tartalmazza az SRGS-nyelvtanban megadott adatokat, amelyeket megfelelően kezelhet. A fontos információk nagy része a tömbben semanticMeanings található.

private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
    SemanticMeaning[] meanings = args.semanticMeanings;
    // do something
}

Végezetül pedig kezdjen felismerni!

grammarRecognizer.Start();

Diktálás

Névtér:UnityEngine.Windows. Beszéd
Típusok:DictationRecognizer,SpeechError,SpeechSystemStatus

A felhasználó beszédének szöveggé alakítása a DictationRecognizer használatával. A DictationRecognizer elérhetővé teszi a diktálási funkciókat, és támogatja a hipotézisek és a kifejezésekkel kiegészített események regisztrálását és figyelését, így visszajelzést adhat a felhasználónak, miközben ők beszélnek, és azt követően is. Start() A és metódusok engedélyezik és letiltják Stop() a diktálás felismerését. Miután végzett a recognizer használatával, a használatával kell eldobni a használatával, hogy Dispose() felszabadítsa a használt erőforrásokat. Ezeket az erőforrásokat a szemétgyűjtés során automatikusan, további teljesítményköltséggel oldja fel, ha korábban nem adták ki őket.

A diktálás első lépései csak néhány lépésből állnak:

  1. Új létrehozása DictationRecognizer
  2. Diktálásesemények kezelés
  3. Indítsa el a DictationRecognizert

A diktálás képességének engedélyezése

Az internetes ügyfél és a mikrofon képességeket deklarálni kell ahhoz, hogy az alkalmazások használják a diktálást:

  1. A Unity-szerkesztőben kattintson az Edit Project Gépház Player > (Lejátszó szerkesztése) elemre
  2. A Windows lap kiválasztása
  3. A Közzétételi Gépház képességek szakaszban ellenőrizze az InternetClient képességet
    • Ha még nem engedélyezték a mikrofont, jelölje be a Mikrofon képességet
  4. Adjon engedélyeket az alkalmazásnak mikrofonos hozzáféréshez HoloLens eszközén, ha még nem
    • Ezt az eszköz indításakor kell megtennie, de ha véletlenül a "Nem" gombra kattintott, módosíthatja az engedélyeket az eszközbeállításokban

DictationRecognizer

Hozzon létre egy DictationRecognizert a következő gombra:

dictationRecognizer = new DictationRecognizer();

A diktálás viselkedésének megvalósításához négy diktálásesemény előfizethet és kezelhet.

  1. DictationResult
  2. DictationComplete
  3. DictationHypothesis
  4. DictationError

DictationResult

Ez az esemény akkor lesz elbocsátva, amikor a felhasználó szünetel, általában egy mondat végén. A teljes felismert sztring itt lesz visszaadva.

Először is iratkozzon fel az DictationResult eseményre:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Ezután kezelje a DictationResult visszahívást:

private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
{
    // do something
}

DictationHyphyphyp

Ez az esemény folyamatosan el lesz bocsátva, miközben a felhasználó beszélget. Ahogy a felismerő figyel, szöveget ad meg az eddig hallottakról.

Először is iratkozzon fel az DictationHypothesis eseményre:

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Ezután kezelje a DictationHyphypbacket:

private void DictationRecognizer_DictationHypothesis(string text)
{
    // do something
}

Diktáláscomplete

Ez az esemény akkor lesz elbocsátva, amikor a recognizer leáll, akár a Stop() hívva van, időtúllépés történik, vagy valamilyen más hiba történik.

Először is iratkozzon fel az DictationComplete eseményre:

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 lesz elbocsátva.

Először is iratkozzon fel az DictationError eseményre:

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Ezután kezelje a DictationError visszahívást:

private void DictationRecognizer_DictationError(string error, int hresult)
{
    // do something
}

Miután előfizetett és kezelte a fontos diktálási eseményeket, indítsa el a diktálási recognizert az események fogadásának megkezdéséhez.

dictationRecognizer.Start();

Ha már nem szeretné megtartani a DictationRecognizert, le kell mondania az eseményekről, és le kell mondania a DictationRecognizert.

dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete ;
dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis ;
dictationRecognizer.DictationError -= DictationRecognizer_DictationError ;
dictationRecognizer.Dispose();

Tippek

  • Start() A és metódusok engedélyezik és letiltják Stop() a diktálás felismerését.
  • Miután végzett a recognizer használatával, a használatával kell eldobni a használatával, hogy felszabadítsa Dispose() a használt erőforrásokat. Ezeket az erőforrásokat a szemétgyűjtés során automatikusan, további teljesítményköltséggel oldja fel, ha korábban nem adták ki őket.
  • Az időtúllépések adott idő után következnek be. Ezeket az időtúllépéseket az eseményben DictationComplete ellenőrizheti. Két időtúllépést kell figyelembe vegye:
    1. Ha a felismerő elindul, és az első öt másodpercben nem hall hanganyagot, időkorrekta lesz.
    2. Ha a felismerő adott eredményt, de 20 másodpercig hall a csendről, időkorrekta lesz.

Kifejezésfelismerés és diktálás használata

Ha kifejezésfelismerést és diktálást is szeretne használni az alkalmazásban, az egyiket teljesen le kell kapcsolnia, mielőtt elindíthatja a másikat. Ha több KeywordRecognizer fut, az összeset egyszerre leállíthatja a következővel:

PhraseRecognitionSystem.Shutdown();

Ha a DictationRecognizer leállt, a hívással visszaállíthatja az összes recognizer előző Restart() állapotát:

PhraseRecognitionSystem.Restart();

Elindíthat egy KeywordRecognizert is, amely szintén újraindítja a PhraseRecognitionSystem rendszert.

Hangbemenet Mixed Reality eszközkészletben

A hangbemenetre vonatkozó MRTK-példákat a következő bemutató jelenetekben találja:

Következő fejlesztési ellenőrzőpont

Ha az általunk kifektetett Unity-fejlesztési ellenőrzőpont-utat követi, a következő feladat a Mixed Reality és API-k felfedezése:

Bármikor visszamehet a Unity fejlesztési ellenőrzőpontjaira.