Spraakinvoer in Unity
Waarschuwing
Voordat u begint, kunt u overwegen de Unity-invoegtoepassing te gebruiken voor de Cognitive Speech Services SDK. De invoegtoepassing heeft betere resultaten voor spraaknauwkeurigheid en eenvoudige toegang tot spraak-naar-tekst decoderen, evenals geavanceerde spraakfuncties zoals dialoogvenster, intentiegebaseerde interactie, vertaling, tekst-naar-spraaksynthese en spraakherkenning in natuurlijke taal. Bekijk het voorbeeld en de documentatie om aan de slag te gaan.
Unity biedt drie manieren om spraakinvoer toe te voegen aan uw Unity-toepassing, waarvan de eerste twee typen PhraseRecognizer zijn:
- De
KeywordRecognizer
biedt uw app een matrix van tekenreeksopdrachten om naar te luisteren - De
GrammarRecognizer
geeft 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 voorzien van een notitie of andere weergave van zijn of haar spraak
Notitie
Dicteren en woordgroepsherkenning kunnen niet tegelijkertijd worden verwerkt. Als een GrammarRecognizer of KeywordRecognizer actief is, kan een DictationRecognizer niet actief zijn en omgekeerd.
De mogelijkheid voor Voice inschakelen
De microfoonfunctie moet worden gedeclareerd voor een app om spraakinvoer te kunnen gebruiken.
- Navigeer in de Unity-editor naar De speler Projectinstellingen > bewerken >
- Het tabblad Windows Store selecteren
- Controleer in de sectie Publicatie-instellingen > mogelijkheden de microfoonmogelijkheid
- Machtigingen verlenen aan de app voor microfoontoegang op uw 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 wijzigen in de apparaatinstellingen
Woordgroepsherkenning
Als u wilt dat uw app luistert naar specifieke woordgroepen die door de gebruiker worden uitgesproken en vervolgens actie ondernemen, moet u het volgende doen:
- Opgeven naar welke woordgroepen moet worden geluisterd met behulp van een
KeywordRecognizer
ofGrammarRecognizer
OnPhraseRecognized
De gebeurtenis verwerken en actie ondernemen die overeenkomt met de herkende woordgroep
KeywordRecognizer
Naamruimte:UnityEngine.Windows.Speech
Typen:KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
We hebben enkele instructies nodig om enkele toetsaanslagen op te slaan:
using UnityEngine.Windows.Speech;
using System.Collections.Generic;
using System.Linq;
Vervolgens gaan we een paar velden aan uw klasse toevoegen om de herkenningsfunctie en de woordenlijst voor trefwoorden> 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 trefwoordherkenning en geef aan wat we willen herkennen:
keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
Registreer u nu voor de OnPhraseRecognized
gebeurtenis
keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
Een voorbeeldhandler 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();
}
}
Begin eindelijk te herkennen!
keywordRecognizer.Start();
GrammarRecognizer
Naamruimte:UnityEngine.Windows.Speech
Typen: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
De GrammarRecognizer wordt gebruikt als u de grammatica van de herkenning opgeeft met behulp van SRGS. Dit kan handig zijn als uw app meer dan slechts enkele trefwoorden bevat, als u complexere woordgroepen wilt herkennen of als u sets opdrachten eenvoudig wilt in- en uitschakelen. Zie Grammatica's maken met SRGS XML voor informatie over de bestandsindeling.
Zodra u de SRGS-grammatica hebt en deze zich in uw project in de map StreamingAssets bevindt:
<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml
Maak een GrammarRecognizer
en geef deze het pad door naar 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 manier kunt afhandelen. De meeste belangrijke informatie wordt opgegeven in de semanticMeanings
matrix.
private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
SemanticMeaning[] meanings = args.semanticMeanings;
// do something
}
Begin eindelijk te herkennen!
grammarRecognizer.Start();
Dicteren
Naamruimte:UnityEngine.Windows.Speech
Typen: DictationRecognizer, SpeechError, SpeechSystemStatus
Gebruik de DictationRecognizer
om de spraak van de gebruiker te converteren naar tekst. De DictationRecognizer maakt dicteerfunctionaliteit beschikbaar en ondersteunt het registreren en luisteren naar gebeurtenissen die zijn voltooid met hypothesen en woordgroepen, zodat u uw gebruiker feedback kunt geven terwijl ze spreken en daarna. Start()
en Stop()
methoden respectievelijk dicteerherkenning in- en uitschakelen. Wanneer u klaar bent met de recognizer, moet deze worden verwijderd met behulp van Dispose()
om de resources vrij te geven die worden gebruikt. Deze resources worden automatisch vrijgegeven tijdens de garbagecollection tegen extra prestatiekosten als ze daarvoor niet zijn vrijgegeven.
Er zijn slechts enkele stappen nodig om aan de slag te gaan met dicteren:
- Een nieuwe maken
DictationRecognizer
- Dicteerbeurtenissen verwerken
- De Dicteerfunctie starten
De mogelijkheid voor dicteren inschakelen
De mogelijkheden van de internetclient en microfoon moeten worden gedeclareerd voor een app om dicteren te kunnen gebruiken:
- Ga in de Unity-editor naar Projectinstellingen > bewerken > Player
- Selecteren op het tabblad Windows Store
- Controleer in de sectie Mogelijkheden voor publicatie-instellingen > de mogelijkheid InternetClient
- Als u de microfoon nog niet hebt ingeschakeld, kunt u desgewenst de microfoonfunctie controleren
- Machtigingen verlenen aan de app voor microfoontoegang op uw 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 wijzigen in de apparaatinstellingen
Dicteerfunctie
Maak een DictationRecognizer als volgt:
dictationRecognizer = new DictationRecognizer();
Er zijn vier dicteergebeurtenissen die kunnen worden geabonneerd en verwerkt om dicteergedrag te implementeren.
DictationResult
DictationComplete
DictationHypothesis
DictationError
DicterenResult
Deze gebeurtenis wordt geactiveerd nadat de gebruiker is onderbroken, meestal aan het einde van een zin. De volledig herkende tekenreeks wordt hier geretourneerd.
Abonneer u eerst op de DictationResult
gebeurtenis:
dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
Voer vervolgens de callback van DictationResult af:
private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
{
// do something
}
DicterenHypothesis
Deze gebeurtenis wordt continu geactiveerd terwijl de gebruiker praat. Terwijl de herkenning luistert, geeft deze tekst weer van wat er tot nu toe is gehoord.
Abonneer u eerst op de DictationHypothesis
gebeurtenis:
dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
Voer vervolgens de callback van Dicteerhypothesis af:
private void DictationRecognizer_DictationHypothesis(string text)
{
// do something
}
DicterenComplete
Deze gebeurtenis wordt geactiveerd wanneer de recognizer stopt, ongeacht of Stop() wordt aangeroepen, er een time-out optreedt of een andere fout.
Abonneer u eerst op de DictationComplete
gebeurtenis:
dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
Verhandel vervolgens de callback van DictationComplete:
private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
{
// do something
}
DictationError
Deze gebeurtenis wordt geactiveerd wanneer er een fout optreedt.
Abonneer u eerst op de DictationError
gebeurtenis:
dictationRecognizer.DictationError += DictationRecognizer_DictationError;
Verhandel vervolgens de callback van de DictationError:
private void DictationRecognizer_DictationError(string error, int hresult)
{
// do something
}
Nadat u zich hebt geabonneerd en de gewenste dicteergebeurtenissen hebt verwerkt, start u de dicteerherkenning om gebeurtenissen te gaan ontvangen.
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()
enStop()
methoden respectievelijk dicteerherkenning in- en uitschakelen.- Als u klaar bent met de recognizer, moet deze worden verwijderd met behulp van
Dispose()
om de resources vrij te geven die worden gebruikt. Deze resources worden automatisch vrijgegeven tijdens de garbagecollection tegen extra prestatiekosten als ze daarvoor niet zijn vrijgegeven. - Time-outs treden op na een ingestelde periode. U kunt controleren op deze time-outs in de
DictationComplete
gebeurtenis. Er zijn twee time-outs waar u rekening mee moet houden:- Als de herkenning wordt gestart en de eerste vijf seconden geen audio hoort, treedt er een time-out op.
- Als de herkenning een resultaat heeft gegeven, maar vervolgens 20 seconden stilte hoort, treedt er een time-out op.
Woordgroepsherkenning en dicteren gebruiken
Als u zowel woordgroepsherkenning als dicteerfunctie in uw app wilt gebruiken, moet u de ene volledig afsluiten voordat u de andere kunt starten. Als u meerdere KeywordRecognizers hebt, kunt u deze allemaal tegelijk afsluiten met:
PhraseRecognitionSystem.Shutdown();
U kunt aanroepen Restart()
om alle recognizers te herstellen naar hun vorige status nadat de DictationRecognizer is gestopt:
PhraseRecognitionSystem.Restart();
U kunt ook gewoon een KeywordRecognizer starten, waarmee het PhraseRecognitionSystem ook opnieuw wordt gestart.
Spraakinvoer in Mixed Reality Toolkit
U vindt MRTK-voorbeelden voor spraakinvoer in de volgende demoscènes:
Controlepunt volgende ontwikkeling
Als u het controlepunttraject voor Unity-ontwikkeling volgt dat we hebben uitgetekend, is de volgende taak het verkennen van de mogelijkheden en API's van het Mixed Reality-platform:
U kunt altijd op elk gewenst moment teruggaan naar de controlepunten voor Unity-ontwikkeling .