Entrada de voz no UnityVoice input in Unity

Observação

Em vez das informações abaixo, considere usar o plug-in do Unity para o SDK de serviços de fala cognitiva que tem resultados de precisão de fala muito melhores e fornece acesso fácil a decodificação de fala a texto e recursos de fala avançados, como diálogo, baseado em intenção interação, tradução, síntese de conversão de texto em fala e reconhecimento de fala em idioma natural.Instead of the below information, consider using the Unity plug-in for the Cognitive Speech Services SDK which has much better Speech Accuracy results and provides easy access to speech-to-text decode and advanced speech features like dialog, intent based interaction, translation, text-to-speech synthesis and natural language speech recognition. Encontre o exemplo e documentação aqui: https://docs.microsoft.com//azure/cognitive-services/speech-service/quickstart-csharp-unityFind the sample and documentaion here: https://docs.microsoft.com//azure/cognitive-services/speech-service/quickstart-csharp-unity

O Unity expõe três maneiras de adicionar entrada de voz ao aplicativo Unity.Unity exposes three ways to add Voice input to your Unity application.

Com o KeywordRecognizer (um dos dois tipos de PhraseRecognizers), seu aplicativo pode receber uma matriz de comandos de cadeia de caracteres a serem escutados.With the KeywordRecognizer (one of two types of PhraseRecognizers), your app can be given an array of string commands to listen for. Com o GrammarRecognizer (o outro tipo de PhraseRecognizer), seu aplicativo pode receber um arquivo SRGS definindo uma gramática específica a ser escutada.With the GrammarRecognizer (the other type of PhraseRecognizer), your app can be given an SRGS file defining a specific grammar to listen for. Com o DictationRecognizer, seu aplicativo pode escutar qualquer palavra e fornecer ao usuário uma nota ou outra exibição de sua fala.With the DictationRecognizer, your app can listen for any word and provide the user with a note or other display of their speech.

Observação

Somente o reconhecimento de ditado ou frase pode ser manipulado de uma vez.Only dictation or phrase recognition can be handled at once. Isso significa que se um GrammarRecognizer ou KeywordRecognizer estiver ativo, um DictationRecognizer não poderá estar ativo e vice-versa.That means if a GrammarRecognizer or KeywordRecognizer is active, a DictationRecognizer can not be active and vice versa.

Habilitando o recurso de vozEnabling the capability for Voice

A capacidade do microfone deve ser declarada para que um aplicativo aproveite a entrada de voz.The Microphone capability must be declared for an app to leverage Voice input.

  1. No editor do Unity, vá para as configurações do Player navegando até "Editar configurações do projeto > > Player"In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player"
  2. Clique na guia "Windows Store"Click on the "Windows Store" tab
  3. Na seção "configurações de publicação > recursos", verifique a capacidade do microfoneIn the "Publishing Settings > Capabilities" section, check the Microphone capability

Reconhecimento de frasesPhrase Recognition

Para permitir que seu aplicativo Ouça frases específicas faladas pelo usuário e, em seguida, execute alguma ação, você precisa:To enable your app to listen for specific phrases spoken by the user then take some action, you need to:

  1. Especificar quais frases escutar usando um KeywordRecognizer ou GrammarRecognizerSpecify which phrases to listen for using a KeywordRecognizer or GrammarRecognizer
  2. Manipular o evento OnPhraseRecognized e tomar medidas correspondentes à frase reconhecidaHandle the OnPhraseRecognized event and take action corresponding to the phrase recognized

KeywordRecognizerKeywordRecognizer

Namespace: UnityEngine. Windows. SpeechNamespace: UnityEngine.Windows.Speech
Tipos: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatusTypes: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Precisaremos de algumas instruções de uso para salvar alguns pressionamentos de tecla:We'll need a few using statements to save some keystrokes:

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

Em seguida, vamos adicionar alguns campos à sua classe para armazenar o reconhecedor e o dicionário de ação de > de palavra-chave:Then let's add a few fields to your class to store the recognizer and keyword->action dictionary:

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

Agora, adicione uma palavra-chave ao dicionário (por exemplo, dentro de um método Start ()).Now add a keyword to the dictionary (e.g. inside of a Start() method). Estamos adicionando a palavra-chave "Activate" neste exemplo:We're adding the "activate" keyword in this example:

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

Crie o reconhecedor de palavra-chave e diga a ele o que desejamos reconhecer:Create the keyword recognizer and tell it what we want to recognize:

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

Registre-se agora para o evento OnPhraseRecognizedNow register for the OnPhraseRecognized event

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Um manipulador de exemplo é:An example 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();
    }
}

Por fim, comece a reconhecer!Finally, start recognizing!

keywordRecognizer.Start();

GrammarRecognizerGrammarRecognizer

Namespace: UnityEngine. Windows. SpeechNamespace: UnityEngine.Windows.Speech
Tipos: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatusTypes: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

O GrammarRecognizer será usado se você estiver especificando a gramática de reconhecimento usando o SRGS.The GrammarRecognizer is used if you're specifying your recognition grammar using SRGS. Isso pode ser útil se seu aplicativo tiver mais do que apenas algumas palavras-chave, se você quiser reconhecer frases mais complexas ou se quiser ativar e desativar facilmente conjuntos de comandos.This can be useful if your app has more than just a few keywords, if you want to recognize more complex phrases, or if you want to easily turn on and off sets of commands. Consulte: criar gramáticas usando o XML SRGS para informações de formato de arquivo.See: Create Grammars Using SRGS XML for file format information.

Quando você tiver sua gramática SRGS e ele estiver em seu projeto em uma pasta StreamingAssets:Once you have your SRGS grammar, and it is in your project in a StreamingAssets folder:

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

Crie um GrammarRecognizer e passe o caminho para o arquivo SRGS:Create a GrammarRecognizer and pass it the path to your SRGS file:

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

Registre-se agora para o evento OnPhraseRecognizedNow register for the OnPhraseRecognized event

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Você receberá um retorno de chamada contendo as informações especificadas na gramática SRGS, que você pode manipular adequadamente.You will get a callback containing information specified in your SRGS grammar which you can handle appropriately. A maioria das informações importantes será fornecida na matriz semanticMeanings.Most of the important information will be provided in the semanticMeanings array.

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

Por fim, comece a reconhecer!Finally, start recognizing!

grammarRecognizer.Start();

DitadoDictation

Namespace: UnityEngine. Windows. SpeechNamespace: UnityEngine.Windows.Speech
Tipos: DictationRecognizer, SpeechError, SpeechSystemStatusTypes: DictationRecognizer, SpeechError, SpeechSystemStatus

Use o DictationRecognizer para converter a fala do usuário em texto.Use the DictationRecognizer to convert the user's speech to text. O DictationRecognizer expõe a funcionalidade de ditado e dá suporte ao registro e à escuta de eventos de hipótese e de expressão concluídas, para que você possa fornecer comentários ao seu usuário enquanto eles falam e depois.The DictationRecognizer exposes dictation functionality and supports registering and listening for hypothesis and phrase completed events, so you can give feedback to your user both while they speak and afterwards. Métodos Start () e Stop () respectivamente habilitam e desabilitam o reconhecimento de ditado.Start() and Stop() methods respectively enable and disable dictation recognition. Depois de feito com o reconhecedor, ele deve ser descartado usando o método Dispose () para liberar os recursos que ele usa.Once done with the recognizer, it should be disposed using Dispose() method to release the resources it uses. Ele liberará esses recursos automaticamente durante a coleta de lixo com um custo de desempenho adicional se eles não forem lançados antes disso.It will release these resources automatically during garbage collection at an additional performance cost if they are not released prior to that.

Há apenas algumas etapas necessárias para começar a usar o ditado:There are only a few steps needed to get started with dictation:

  1. Criar um novo DictationRecognizerCreate a new DictationRecognizer
  2. Manipular eventos de ditadoHandle Dictation events
  3. Iniciar o DictationRecognizerStart the DictationRecognizer

Habilitando o recurso de ditadoEnabling the capability for dictation

O recurso "cliente da Internet", além do recurso de "microfone" mencionado acima, deve ser declarado para que um aplicativo aproveite o ditado.The "Internet Client" capability, in addition to the "Microphone" capability mentioned above, must be declared for an app to leverage dictation.

  1. No editor do Unity, vá para as configurações do Player navegando para a página "Editar configurações do projeto > > Player"In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player" page
  2. Clique na guia "Windows Store"Click on the "Windows Store" tab
  3. Na seção "configurações de publicação > recursos", verifique o recurso internetclientIn the "Publishing Settings > Capabilities" section, check the InternetClient capability

DictationRecognizerDictationRecognizer

Crie um DictationRecognizer da seguinte maneira:Create a DictationRecognizer like so:

dictationRecognizer = new DictationRecognizer();

Há quatro eventos de ditado que podem ser assinados e manipulados para implementar o comportamento do ditado.There are four dictation events that can be subscribed to and handled to implement dictation behavior.

  1. DictationResultDictationResult
  2. DictationCompleteDictationComplete
  3. DictationHypothesisDictationHypothesis
  4. DictationErrorDictationError

DictationResultDictationResult

Esse evento é acionado depois que o usuário pausa, normalmente no final de uma sentença.This event is fired after the user pauses, typically at the end of a sentence. A cadeia de caracteres totalmente reconhecida é retornada aqui.The full recognized string is returned here.

Primeiro, assine o evento DictationResult:First, subscribe to the DictationResult event:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Em seguida, manipule o retorno de chamada DictationResult:Then handle the DictationResult callback:

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

DictationHypothesisDictationHypothesis

Esse evento é acionado continuamente enquanto o usuário está conversando.This event is fired continuously while the user is talking. Como o reconhecedor Ouve, ele fornece texto do que ele é ouvido até agora.As the recognizer listens, it provides text of what it's heard so far.

Primeiro, assine o evento DictationHypothesis:First, subscribe to the DictationHypothesis event:

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Em seguida, manipule o retorno de chamada DictationHypothesis:Then handle the DictationHypothesis callback:

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

DictationCompleteDictationComplete

Esse evento é acionado quando o reconhecedor é interrompido, independentemente de Stop () ser chamado, um tempo limite de ocorrência ou algum outro erro.This event is fired when the recognizer stops, whether from Stop() being called, a timeout occurring, or some other error.

Primeiro, assine o evento DictationComplete:First, subscribe to the DictationComplete event:

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Em seguida, manipule o retorno de chamada DictationComplete:Then handle the DictationComplete callback:

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

DictationErrorDictationError

Esse evento é acionado quando ocorre um erro.This event is fired when an error occurs.

Primeiro, assine o evento DictationError:First, subscribe to the DictationError event:

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Em seguida, manipule o retorno de chamada DictationError:Then handle the DictationError callback:

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

Depois de assinar e tratar os eventos de ditado sobre os quais você se preocupa, inicie o reconhecedor de ditado para começar a receber eventos.Once you have subscribed and handled the dictation events that you care about, start the dictation recognizer to begin receiving events.

dictationRecognizer.Start();

Se você não quiser mais manter o DictationRecognizer, precisará cancelar a assinatura dos eventos e descartar o DictationRecognizer.If you no longer want to keep the DictationRecognizer around, you need to unsubscribe from the events and Dispose the DictationRecognizer.

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

SobreTips

  • Métodos Start () e Stop () respectivamente habilitam e desabilitam o reconhecimento de ditado.Start() and Stop() methods respectively enable and disable dictation recognition.
  • Depois de feito com o reconhecedor, ele deve ser descartado usando o método Dispose () para liberar os recursos que ele usa.Once done with the recognizer, it must be disposed using Dispose() method to release the resources it uses. Ele liberará esses recursos automaticamente durante a coleta de lixo com um custo de desempenho adicional se eles não forem lançados antes disso.It will release these resources automatically during garbage collection at an additional performance cost if they are not released prior to that.
  • Os tempos limite ocorrem após um determinado período de tempo.Timeouts occur after a set period of time. Você pode verificar esses tempos limite no evento DictationComplete.You can check for these timeouts in the DictationComplete event. Há dois tempos limite a serem cientes:There are two timeouts to be aware of:
    1. Se o reconhecedor for iniciado e não ouvir nenhum áudio pelos primeiros cinco segundos, ele atingirá o tempo limite.If the recognizer starts and doesn't hear any audio for the first five seconds, it will timeout.
    2. Se o reconhecedor tiver dado um resultado, mas, em seguida, ouvir silêncio por vinte segundos, ele atingirá o tempo limite.If the recognizer has given a result but then hears silence for twenty seconds, it will timeout.

Usando o reconhecimento de frase e o ditadoUsing both Phrase Recognition and Dictation

Se você quiser usar o reconhecimento de frase e o ditado em seu aplicativo, será necessário desligar completamente um antes para poder iniciar o outro.If you want to use both phrase recognition and dictation in your app, you'll need to fully shut one down before you can start the other. Se você tiver vários KeywordRecognizers em execução, poderá desligá-los de uma só vez com:If you have multiple KeywordRecognizers running, you can shut them all down at once with:

PhraseRecognitionSystem.Shutdown();

Para restaurar todos os reconhecedores ao estado anterior, depois que o DictationRecognizer for interrompido, você poderá chamar:In order to restore all recognizers to their previous state, after the DictationRecognizer has stopped, you can call:

PhraseRecognitionSystem.Restart();

Você também pode apenas iniciar um KeywordRecognizer, que reiniciará o PhraseRecognitionSystem também.You could also just start a KeywordRecognizer, which will restart the PhraseRecognitionSystem as well.

Usando o auxiliar de microfoneUsing the microphone helper

O kit de ferramentas de realidade misturada no GitHub contém uma classe auxiliar de microfone para indicar aos desenvolvedores se há um microfone utilizável no sistema.The Mixed Reality Toolkit on GitHub contains a microphone helper class to hint at developers if there is a usable microphone on the system. Um uso para ele é onde você desejaria verificar se há microfone no sistema antes de mostrar qualquer dica de interação de fala no aplicativo.One use for it is where one would want to check if there is microphone on system before showing any speech interaction hints in the application.

O script auxiliar de microfone pode ser encontrado na pasta de entrada/scripts/utilitários.The microphone helper script can be found in the Input/Scripts/Utilities folder. O repositório GitHub também contém um pequeno exemplo demonstrando como usar o auxiliar.The GitHub repo also contains a small sample demonstrating how to use the helper.

Entrada de voz no kit de ferramentas de realidade misturadaVoice input in Mixed Reality Toolkit

Você pode encontrar os exemplos da entrada de voz nesta cena.You can find the examples of the voice input in this scene.