Input vocale in Unity
Attenzione
Prima di iniziare, prendere in considerazione l'uso del plug-in Unity per Speech Services SDK per Servizi cognitivi. Il plug-in offre risultati migliori per l'accuratezza del riconoscimento vocale e un facile accesso alla decodifica vocale, oltre a funzionalità di riconoscimento vocale avanzate, ad esempio dialogo, interazione basata sulle finalità, traduzione, sintesi vocale e riconoscimento vocale in linguaggio naturale. Per iniziare, vedere l'esempio e la documentazione.
Unity espone tre modi per aggiungere input vocale all'applicazione Unity, i primi due tipi di PhraseRecognizer:
- Fornisce
KeywordRecognizer
all'app una matrice di comandi stringa per l'ascolto - fornisce
GrammarRecognizer
all'app un file SRGS che definisce una grammatica specifica per l'ascolto - Consente
DictationRecognizer
all'app di ascoltare qualsiasi parola e fornire all'utente una nota o un'altra visualizzazione del parlato
Nota
Il riconoscimento della dettatura e della frase non può essere gestito contemporaneamente. Se grammarRecognizer o KeywordRecognizer è attivo, un Oggetto DictationRecognizer non può essere attivo e viceversa.If a GrammarRecognizer or KeywordRecognizer is active, a DictationRecognizer can't be active and viceversa.
Abilitazione della funzionalità per Voice
La funzionalità Microfono deve essere dichiarata per consentire a un'app di usare l'input vocale.
- Nell'editor di Unity passare a Edit Project Settings Player (Modifica > lettore impostazioni > progetto)
- Selezionare la scheda Windows Store
- Nella sezione Funzionalità delle impostazioni > di pubblicazione controllare la funzionalità Microfono
- Concedere autorizzazioni all'app per l'accesso al microfono nel dispositivo HoloLens
- Verrà chiesto di eseguire questa operazione all'avvio del dispositivo, ma se si è accidentalmente fatto clic su "no" è possibile modificare le autorizzazioni nelle impostazioni del dispositivo
Riconoscimento di frasi
Per consentire all'app di restare in ascolto di frasi specifiche pronunciate dall'utente, è necessario:
- Specificare le frasi da ascoltare usando un
KeywordRecognizer
oggetto oGrammarRecognizer
- Gestire l'evento
OnPhraseRecognized
ed eseguire un'azione corrispondente alla frase riconosciuta
KeywordRecognizer
Spazio dei nomi:UnityEngine.Windows.Speech
Types:KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
Per salvare alcune sequenze di tasti, sono necessarie alcune istruzioni using:
using UnityEngine.Windows.Speech;
using System.Collections.Generic;
using System.Linq;
Aggiungere quindi alcuni campi alla classe per archiviare il sistema di riconoscimento e il dizionario di azioni per parole chiave>:
KeywordRecognizer keywordRecognizer;
Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();
Aggiungere ora una parola chiave al dizionario, ad esempio in di un Start()
metodo. In questo esempio viene aggiunta la parola chiave "activate":
//Create keywords for keyword recognizer
keywords.Add("activate", () =>
{
// action to be performed when this keyword is spoken
});
Creare il riconoscitore di parole chiave e indicare cosa si vuole riconoscere:
keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
Eseguire ora la registrazione per l'evento OnPhraseRecognized
keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
Un gestore di esempio è:
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();
}
}
Infine, iniziare a riconoscere!
keywordRecognizer.Start();
GrammarRecognizer
Spazio dei nomi:UnityEngine.Windows.Speech
Tipi: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
GrammarRecognizer viene usato se si specifica la grammatica di riconoscimento usando SRGS. Questo può essere utile se l'app ha più di poche parole chiave, se vuoi riconoscere frasi più complesse o se vuoi attivare e disattivare facilmente set di comandi. Vedere: Creare grammatiche usando SRGS XML per informazioni sul formato di file.
Dopo aver creato la grammatica SRGS, si trova nel progetto in una cartella StreamingAssets:
<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml
Creare un oggetto GrammarRecognizer
e passarlo al percorso del file SRGS:
private GrammarRecognizer grammarRecognizer;
grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");
Eseguire ora la registrazione per l'evento OnPhraseRecognized
grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;
Si otterrà un callback contenente le informazioni specificate nella grammatica SRGS, che è possibile gestire in modo appropriato. La maggior parte delle informazioni importanti verrà fornita nella semanticMeanings
matrice.
private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
SemanticMeaning[] meanings = args.semanticMeanings;
// do something
}
Infine, iniziare a riconoscere!
grammarRecognizer.Start();
Dettatura
Spazio dei nomi:UnityEngine.Windows.Speech
Tipi: DictationRecognizer, SpeechError, SpeechSystemStatus
Usare per DictationRecognizer
convertire la voce dell'utente in testo. DictationRecognizer espone la funzionalità di dettatura e supporta la registrazione e l'ascolto di eventi di ipotesi e frasi completate, in modo da poter inviare commenti e suggerimenti all'utente mentre parlano e in seguito. Start()
i metodi e Stop()
abilitano e disabilitano rispettivamente il riconoscimento della dettatura. Al termine del riconoscimento, deve essere eliminato usando Dispose()
per rilasciare le risorse usate. Queste risorse verranno rilasciate automaticamente durante l'operazione di Garbage Collection a un costo aggiuntivo per le prestazioni, se non vengono rilasciate prima.
Per iniziare a usare la dettatura sono necessari solo alcuni passaggi:
- Creare un nuovo
DictationRecognizer
- Gestire gli eventi di dettatura
- Avviare DictationRecognizer
Abilitazione della funzionalità di dettatura
Le funzionalità Client Internet e Microfono devono essere dichiarate per consentire a un'app di usare la dettatura:
- Nell'editor di Unity passare a Modifica > impostazioni > progetto Player
- Selezionare nella scheda Windows Store
- Nella sezione Funzionalità delle impostazioni > di pubblicazione controllare la funzionalità InternetClient
- Facoltativamente, se non è già stato abilitato il microfono, controllare la funzionalità Microfono
- Concedere autorizzazioni all'app per l'accesso al microfono nel dispositivo HoloLens, se non è già stato fatto
- Verrà chiesto di eseguire questa operazione all'avvio del dispositivo, ma se si è accidentalmente fatto clic su "no" è possibile modificare le autorizzazioni nelle impostazioni del dispositivo
DictationRecognizer
Creare un Oggetto DictationRecognizer come segue:
dictationRecognizer = new DictationRecognizer();
Esistono quattro eventi di dettatura che possono essere sottoscritti e gestiti per implementare il comportamento di dettatura.
DictationResult
DictationComplete
DictationHypothesis
DictationError
DictationResult
Questo evento viene generato dopo la sospensione dell'utente, in genere alla fine di una frase. La stringa riconosciuta completa viene restituita qui.
Per prima cosa, sottoscrivere l'evento DictationResult
:
dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
Gestire quindi il callback DictationResult:
private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
{
// do something
}
DictationHypothesis
Questo evento viene generato continuamente mentre l'utente sta parlando. Mentre il riconoscitore è in ascolto, fornisce un testo di ciò che viene sentito finora.
Per prima cosa, sottoscrivere l'evento DictationHypothesis
:
dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
Gestire quindi il callback DictationHypothesis:
private void DictationRecognizer_DictationHypothesis(string text)
{
// do something
}
DictationComplete
Questo evento viene generato quando il riconoscitore si arresta, se viene chiamato Stop(), un timeout che si verifica o un altro errore.
Per prima cosa, sottoscrivere l'evento DictationComplete
:
dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
Gestire quindi il callback DictationComplete:
private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
{
// do something
}
DictationError
Questo evento viene generato quando si verifica un errore.
Per prima cosa, sottoscrivere l'evento DictationError
:
dictationRecognizer.DictationError += DictationRecognizer_DictationError;
Gestire quindi il callback DictationError:
private void DictationRecognizer_DictationError(string error, int hresult)
{
// do something
}
Dopo aver sottoscritto e gestito gli eventi di dettatura a cui si è interessato, avviare il riconoscimento della dettatura per iniziare a ricevere eventi.
dictationRecognizer.Start();
Se non vuoi più mantenere DictationRecognizer, devi annullare la sottoscrizione agli eventi e Dispose the DictationRecognizer.
dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete ;
dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis ;
dictationRecognizer.DictationError -= DictationRecognizer_DictationError ;
dictationRecognizer.Dispose();
Suggerimenti
Start()
i metodi eStop()
abilitano e disabilitano rispettivamente il riconoscimento della dettatura.- Al termine del riconoscimento, è necessario eliminarlo usando
Dispose()
per rilasciare le risorse usate. Queste risorse verranno rilasciate automaticamente durante l'operazione di Garbage Collection a un costo aggiuntivo per le prestazioni, se non vengono rilasciate prima. - I timeout si verificano dopo un periodo di tempo impostato. È possibile verificare la presenza di questi timeout nell'evento
DictationComplete
. Esistono due timeout da tenere presenti:- Se il riconoscitore viene avviato e non sente alcun audio per i primi cinque secondi, si verifica il timeout.
- Se il riconoscimento ha dato un risultato, ma poi sente il silenzio per 20 secondi, verrà timeout.
Uso sia del riconoscimento delle frasi che della dettatura
Se si vuole usare sia il riconoscimento delle frasi che la dettatura nell'app, sarà necessario arrestare completamente uno prima di poter avviare l'altro. Se sono in esecuzione più parole chiaveRecognizer, è possibile arrestarli tutti contemporaneamente con:
PhraseRecognitionSystem.Shutdown();
È possibile chiamare Restart()
per ripristinare tutti i riconoscimento allo stato precedente dopo l'arresto di DictationRecognizer:
PhraseRecognitionSystem.Restart();
È anche possibile avviare una parola chiaveRecognizer, che riavvia anche PhraseRecognitionSystem.
Input vocale in Realtà mista Toolkit
È possibile trovare esempi MRTK per l'input vocale nelle scene demo seguenti:
Successivo checkpoint di sviluppo
Se si segue il percorso del checkpoint di sviluppo di Unity, si sta esplorando le funzionalità e le API della piattaforma di Realtà mista:
È sempre possibile tornare ai checkpoint per lo sviluppo con Unity in qualsiasi momento.