Spraakinvoer in Unity
Let op
Voordat u begint, kunt u overwegen de Unity-invoegtoepassing te gebruiken voor de Cognitive Speech Services SDK. De invoegtoepassing heeft betere resultaten van spraaknauwkeurigheid en eenvoudige toegang tot spraak-naar-tekst decoderen, evenals geavanceerde spraakfuncties zoals dialoogvenster, interactie op basis van intentie, 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 Voice-invoer toe te voegen aan uw Unity-toepassing, waarvan de eerste twee typen PhraseRecognizer zijn:
- De
KeywordRecognizer
app biedt een matrix met tekenreeksopdrachten om naar te luisteren - Hiermee
GrammarRecognizer
krijgt uw app een SRGS-bestand dat een specifieke grammatica definieert om naar te luisteren - Hiermee
DictationRecognizer
kan uw app naar elk woord luisteren en de gebruiker een notitie of een andere weergave van hun spraak geven
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 Spraak inschakelen
De microfoonfunctie moet worden gedeclareerd voor een app om spraakinvoer te kunnen gebruiken.
- Navigeer in de Unity Editor naar Project Settings > Player bewerken >
- Het tabblad Windows Store selecteren
- Controleer in de sectie Publicatie-instellingen > de microfoonfunctie
- 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 in de apparaatinstellingen wijzigen
Woordgroepherkenning
Als u wilt dat uw app luistert naar specifieke woordgroepen die door de gebruiker worden gesproken, moet u het volgende doen:
- Opgeven welke woordgroepen moeten worden gebruikt met behulp van een
KeywordRecognizer
ofGrammarRecognizer
OnPhraseRecognized
De gebeurtenis afhandelen en actie ondernemen die overeenkomt met de herkende woordgroep
KeywordRecognizer
Naamruimte: UnityEngine.Windows.Speech
Typen: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
We hebben enkele gebruiksinstructies 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 woordenlijst recognizer en trefwoordactie> 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 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();
}
}
Ten slotte begint u te herkennen!
keywordRecognizer.Start();
GrammarRecognizer
Naamruimte: UnityEngine.Windows.Speech
Typen: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
De GrammarRecognizer wordt gebruikt als u uw herkennings grammatica opgeeft met behulp van SRGS. Dit kan handig zijn als uw app meer dan slechts een paar trefwoorden heeft, als u complexere woordgroepen wilt herkennen of als u eenvoudig sets opdrachten wilt in- en uitschakelen. Zie: Grammatica's maken met behulp van SRGS XML voor informatie over de bestandsindeling.
Zodra u uw SRGS-grammatica hebt en deze zich in uw project in een map StreamingAssets bevindt:
<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml
Maak een GrammarRecognizer
en geef 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 verstrekt in de semanticMeanings
matrix.
private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
SemanticMeaning[] meanings = args.semanticMeanings;
// do something
}
Ten slotte begint u te herkennen!
grammarRecognizer.Start();
Dicteren
Naamruimte: UnityEngine.Windows.Speech
Typen: DictationRecognizer, SpeechError, SpeechSystemStatus
Gebruik de DictationRecognizer
opdracht om de spraak van de gebruiker te converteren naar tekst. De DictationRecognizer biedt functionaliteit voor dicteren en ondersteunt het registreren en luisteren naar voltooide hypothesen en woordgroepen, zodat u feedback kunt geven aan uw gebruiker, zowel wanneer ze spreken als daarna. Start()
en Stop()
methoden schakelen respectievelijk dicteerherkenning in en uit. Wanneer u klaar bent met de recognizer, moet deze worden verwijderd met behulp van Dispose()
de resources die worden gebruikt. Deze resources worden automatisch vrijgegeven tijdens de garbagecollection tegen extra prestatiekosten als ze hiervoor niet worden vrijgegeven.
Er zijn slechts enkele stappen nodig om aan de slag te gaan met dicteren:
- Een nieuwe maken
DictationRecognizer
- Dicteren gebeurtenissen verwerken
- De DictationRecognizer 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 Project Settings > Player bewerken >
- Selecteren op het tabblad Windows Store
- Controleer in de sectie Publicatie-instellingen > de mogelijkheid internetclient
- Als u de microfoon nog niet hebt ingeschakeld, controleert u eventueel de microfoonfunctie
- 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 in de apparaatinstellingen wijzigen
DictationRecognizer
Maak als volgt een DictationRecognizer:
dictationRecognizer = new DictationRecognizer();
Er zijn vier dicteergebeurtenissen waarop kan worden geabonneerd en verwerkt om dicteergedrag te implementeren.
DictationResult
DictationComplete
DictationHypothesis
DictationError
DictationResult
Deze gebeurtenis wordt geactiveerd nadat de gebruiker is onderbroken, meestal aan het einde van een zin. De volledige 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. Naarmate de recognizer luistert, biedt het tekst van wat het tot nu toe is gehoord.
Abonneer u eerst op de DictationHypothesis
gebeurtenis:
dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
Voer vervolgens de callback van DictationHypothesis af:
private void DictationRecognizer_DictationHypothesis(string text)
{
// do something
}
DictationComplete
Deze gebeurtenis wordt geactiveerd wanneer de recognizer stopt, ongeacht of stop() wordt aangeroepen, een time-out optreedt of een andere fout.
Abonneer u eerst op de DictationComplete
gebeurtenis:
dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
Voer vervolgens de callback van DictationComplete af:
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;
Voer vervolgens de callback van DictationError af:
private void DictationRecognizer_DictationError(string error, int hresult)
{
// do something
}
Nadat u zich hebt geabonneerd en de dicteergebeurtenissen die u belangrijk vindt, start u de dicteerherkenning om gebeurtenissen te 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 schakelen respectievelijk dicteerherkenning in en uit.- Wanneer u klaar bent met de recognizer, moet deze worden verwijderd met behulp van
Dispose()
de resources die worden gebruikt. Deze resources worden automatisch vrijgegeven tijdens de garbagecollection tegen extra prestatiekosten als ze hiervoor niet worden vrijgegeven. - Time-outs vinden plaats 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:- Als de recognizer begint en geen audio voor de eerste vijf seconden hoort, treedt er een time-out op.
- Als de recognizer een resultaat heeft gegeven, maar vervolgens stilte gedurende 20 seconden hoort, treedt er een time-out op.
Woordgroepherkenning en dicteren gebruiken
Als u zowel woordgroepherkenning als dicteren in uw app wilt gebruiken, moet u er een volledig afsluiten voordat u de andere kunt starten. Als er meerdere KeywordRecognizers worden uitgevoerd, kunt u ze 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 ook het PhraseRecognitionSystem opnieuw wordt gestart.
Spraakinvoer in Mixed Reality Toolkit
U vindt MRTK-voorbeelden voor spraakinvoer in de volgende demoscènes:
Volgend controlepunt voor ontwikkeling
Als u het controlepunttraject voor Unity-ontwikkeling volgt dat we hebben opgesteld, gaat u de volgende taak verkennen met de mogelijkheden en API's van het Mixed Reality-platform:
U kunt altijd op elk gewenst moment teruggaan naar de Unity-ontwikkelingscontrolepunten .