Spraakinvoer in Unity

Waarschuwing

Voordat u begint, kunt u overwegen om de Unity-in plug-in te gebruiken voor de Cognitive Speech Services SDK. De invoegtekst heeft betere resultaten voor spraaknauwkeurigheid en eenvoudige toegang tot spraak-naar-tekst-decoderen, evenals geavanceerde spraakfuncties zoals dialoogvensters, interactie op basis van intenties, vertaling, tekst-naar-spraak-synthese en spraakherkenning in natuurlijke taal. Bekijk het voorbeeld en de documentatie om aan de slag te gaan.

Unity laat drie manieren zien om Spraakinvoer toe te voegen aan uw Unity-toepassing, waarvan de eerste twee typen PhraseRecognizer zijn:

  • De KeywordRecognizer voorziet uw app van een matrix met tekenreeksopdrachten om naar te luisteren
  • Geeft GrammarRecognizer uw app een SRGS-bestand dat een specifieke grammatica definieert om naar te luisteren
  • Met DictationRecognizer de kan uw app naar elk woord luisteren en de gebruiker een notitie of een andere weergave van zijn of haar spraak geven

Notitie

Dicteren en woordgroepen herkennen kan niet tegelijkertijd worden verwerkt. Als een GrammarRecognizer of KeywordRecognizer actief is, kan een DictationRecognizer niet actief zijn en vice versa.

De mogelijkheid voor Voice inschakelen

De mogelijkheid Microfoon moet worden gedeclareerd voor een app om Spraakinvoer te kunnen gebruiken.

  1. Navigeer in de Unity Editor naar Edit > Project Instellingen > Player
  2. Selecteer het tabblad Windows Store
  3. In de sectie Instellingen > mogelijkheden van publicatie controleert u de mogelijkheid Microfoon
  4. Machtigingen verlenen aan de app voor toegang tot de microfoon op HoloLens apparaat
    • U wordt gevraagd dit te doen bij het opstarten van het apparaat, maar als u per ongeluk op Nee hebt geklikt, kunt u de machtigingen in de apparaatinstellingen wijzigen

Woordgroepen herkennen

Als u wilt dat uw app luistert naar specifieke zinnen die door de gebruiker worden uitgesproken en vervolgens actie kan ondernemen, moet u het volgende doen:

  1. Opgeven naar welke zinnen moet worden geluisterd met behulp van een KeywordRecognizer of GrammarRecognizer
  2. De gebeurtenis OnPhraseRecognized verwerken en actie ondernemen die overeenkomt met de herkende woordgroep

KeywordRecognizer

Naamruimte:UnityEngine.Windows. Toespraak
Typen:KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

We hebben enkele using-instructies nodig om enkele toetsaanslagen op te slaan:

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

Vervolgens voegen we enkele velden toe aan uw klasse om de woordenlijst recognizer en keyword-action> op te slaan:

KeywordRecognizer keywordRecognizer;
Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();

Voeg nu een trefwoord toe aan de woordenlijst, bijvoorbeeld in van een Start() methode. In dit voorbeeld voegen we het trefwoord Activeren toe:

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

Maak de sleutelwoord herkennen en vertel wat we willen herkennen:

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

Registreer u nu voor de OnPhraseRecognized gebeurtenis

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Een voorbeeld-handler is:

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();
    }
}

Ten slotte kunt u beginnen met het herkennen van!

keywordRecognizer.Start();

GrammarRecognizer

Naamruimte:UnityEngine.Windows. Toespraak
Typen: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

De GrammarRecognizer wordt gebruikt als u uw herkenningsgramma opgeeft met behulp van SRGS. Dit kan handig zijn als uw app meer dan een paar trefwoorden bevat, als u complexere woordgroepen wilt herkennen of als u opdrachtensets eenvoudig wilt in- en uitschakelen. Zie: Grammatica's maken met behulp van SRGS XML voor informatie over bestandsindelingen.

Zodra u uw SRGS-grammatica hebt en deze zich in uw project in een map StreamingAssets heeft geplaatst:

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

Maak een GrammarRecognizer en geef het pad door aan uw SRGS-bestand:

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

Registreer u nu voor de OnPhraseRecognized gebeurtenis

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

U krijgt een callback met informatie die is opgegeven in uw SRGS-grammatica, die u op de juiste wijze kunt verwerken. De meeste belangrijke informatie wordt verstrekt in de semanticMeanings matrix.

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

Ten slotte kunt u beginnen met het herkennen van!

grammarRecognizer.Start();

Dicteren

Naamruimte:UnityEngine.Windows. Toespraak
Typen: DictationRecognizer, SpeechError, SpeechSystemStatus

Gebruik de om DictationRecognizer de spraak van de gebruiker te converteren naar tekst. De DictationRecognizer biedt dicteerfunctionaliteit en ondersteunt het registreren en luisteren naar hypothesen en voltooide woordgroepen, zodat u feedback aan uw gebruikers kunt geven tijdens het spreken en daarna. Start() de Stop() methoden en schakelen respectievelijk dicteerherkenning in en uit. Wanneer u klaar bent met de kiezer, moet deze worden verwijderd met behulp van Dispose() om de resources vrij te geven die worden gebruikt. Deze resources worden automatisch vrijgegeven tijdens garbageverzameling tegen extra prestatiekosten als ze niet eerder zijn vrijgegeven.

Er zijn slechts enkele stappen nodig om aan de slag te gaan met dicteren:

  1. Een nieuwe maken DictationRecognizer
  2. Dicteergebeurtenissen verwerken
  3. De DictationRecognizer starten

De mogelijkheid voor dicteren inschakelen

De mogelijkheden internetclienten microfoon moeten worden gedeclareerd voor een app om dicteren te kunnen gebruiken:

  1. Ga in de Unity Editor naar Edit > Project Instellingen > Player
  2. Selecteer op het tabblad Windows Store
  3. Controleer in de sectie Instellingen > mogelijkheden van InternetClient de mogelijkheid InternetClient
    • Als u de microfoon nog niet hebt ingeschakeld, controleert u eventueel de mogelijkheid Microfoon
  4. Machtigingen verlenen aan de app voor toegang tot de microfoon op HoloLens apparaat als u dat nog niet hebt gedaan
    • U wordt gevraagd dit te doen bij het opstarten van het apparaat, maar als u per ongeluk op Nee hebt geklikt, kunt u de machtigingen in de apparaatinstellingen wijzigen

DictationRecognizer

Maak als volgende een DictationRecognizer:

dictationRecognizer = new DictationRecognizer();

Er zijn vier dicteergebeurtenissen die kunnen worden geabonneerd op en verwerkt om dicteergedrag te implementeren.

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

DictationResult

Deze gebeurtenis wordt na het onderbreken van de gebruiker, meestal aan het einde van een zin, ten einde van de zin ten goede gekomen. De volledige herkende tekenreeks wordt hier geretourneerd.

Abonneer u eerst op de DictationResult gebeurtenis:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Ver handelen vervolgens de DictationResult-callback af:

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

DicterenHypothesis

Deze gebeurtenis wordt continu afgelost terwijl de gebruiker aan het praten is. Terwijl de kiezer luistert, wordt tekst verstrekt van wat tot nu toe is gehoord.

Abonneer u eerst op de DictationHypothesis gebeurtenis:

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Vereenig vervolgens de callback DictationHypothesis:

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

DictationComplete

Deze gebeurtenis wordt aangeroepen wanneer de kiezer stopt, ongeacht of stop() wordt aangeroepen, er een time-out optreedt of een andere fout optreedt.

Abonneer u eerst op de DictationComplete gebeurtenis:

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Ver handelen vervolgens de DictationComplete-callback af:

private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
{
   // do something
}

DictationError

Deze gebeurtenis wordt afgelost wanneer er een fout optreedt.

Abonneer u eerst op de DictationError gebeurtenis:

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Ver handelen vervolgens de DictationError-callback af:

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

Zodra u zich hebt geabonneerd en de dicteergebeurtenissen hebt verwerkt die u belangrijk vindt, start u de dicteerverkender om te beginnen met het ontvangen van gebeurtenissen.

dictationRecognizer.Start();

Als u de DictationRecognizer niet meer wilt behouden, moet u zich afmelden voor de gebeurtenissen en de DictationRecognizer verwijderen.

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

Tips

  • Start() de Stop() methoden en schakelen respectievelijk dicteerherkenning in en uit.
  • Wanneer u klaar bent met de kiezer, moet deze worden verwijderd met behulp van Dispose() om de resources vrij te geven die worden gebruikt. Deze resources worden automatisch vrijgegeven tijdens garbageverzameling tegen extra prestatiekosten als ze niet eerder zijn vrijgegeven.
  • Time-outs treden op na een bepaalde periode. U kunt controleren op deze time-outs in de DictationComplete gebeurtenis. Er zijn twee time-outs waar u rekening mee moet houden:
    1. Als de kiezer wordt gestart en de eerste vijf seconden geen audio hoort, t mogelijk een time-out.
    2. Als de kiezer een resultaat heeft gegeven, maar vervolgens 20 seconden stilte hoort, teert er een time-out.

Zowel woordgroepsherkenning als Dicteren gebruiken

Als u zowel woordgroepenherkenning als dicteren in uw app wilt gebruiken, moet u de ene volledig afsluiten voordat u de andere kunt starten. Als er meerdere KeywordRecognizers worden uitgevoerd, kunt u ze allemaal in één keer afsluiten met:

PhraseRecognitionSystem.Shutdown();

U kunt aanroepen Restart() om alle recognizers te herstellen naar de vorige status nadat de DictationRecognizer is gestopt:

PhraseRecognitionSystem.Restart();

U kunt ook gewoon een KeywordRecognizer starten, waarmee ook phraseRecognitionSystem opnieuw wordt opgestart.

Spraakinvoer in Mixed Reality Toolkit

U vindt MRTK-voorbeelden voor spraakinvoer in de volgende demo-scènes:

Volgende controlepunt voor ontwikkeling

Als u het traject van het Unity-controlepunt voor ontwikkeling volgt dat we hebben bespraken, is de volgende taak het verkennen van de mogelijkheden en API's van Mixed Reality platform:

U kunt altijd teruggaan naar de Unity-ontwikkelcontrolepunten .