Compartilhar via


SpeechToText

A API SpeechToText fornece a capacidade de converter fala em texto.

Captura de tela do SpeechText implementado no macOS

As seguintes pré-condições são necessárias para o SpeechToText:

Adicionar permissões ao AndroidManifest.xml:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

Sintaxe

C#

O SpeechToText pode ser usado da seguinte maneira em C#:

async Task Listen(CancellationToken cancellationToken)
{
    var isGranted = await speechToText.RequestPermissions(cancellationToken);
    if (!isGranted)
    {
        await Toast.Make("Permission not granted").Show(CancellationToken.None);
        return;
    }

    var recognitionResult = await speechToText.ListenAsync(
                                        CultureInfo.GetCultureInfo(Language),
                                        new Progress<string>(partialText =>
                                        {
                                            RecognitionText += partialText + " ";
                                        }), cancellationToken);

    if (recognitionResult.IsSuccessful)
    {
        RecognitionText = recognitionResult.Text;
    }
    else
    {
        await Toast.Make(recognitionResult.Exception?.Message ?? "Unable to recognize speech").Show(CancellationToken.None);
    }
}

ou usando eventos:

async Task StartListening(CancellationToken cancellationToken)
{
    var isGranted = await speechToText.RequestPermissions(cancellationToken);
    if (!isGranted)
    {
        await Toast.Make("Permission not granted").Show(CancellationToken.None);
        return;
    }

    speechToText.RecognitionResultUpdated += OnRecognitionTextUpdated;
    speechToText.RecognitionResultCompleted += OnRecognitionTextCompleted;
    await speechToText.StartListenAsync(CultureInfo.CurrentCulture, CancellationToken.None);
}

async Task StopListening(CancellationToken cancellationToken)
{
    await speechToText.StopListenAsync(CancellationToken.None);
    speechToText.RecognitionResultUpdated -= OnRecognitionTextUpdated;
    speechToText.RecognitionResultCompleted -= OnRecognitionTextCompleted;
}

void OnRecognitionTextUpdated(object? sender, SpeechToTextRecognitionResultUpdatedEventArgs args)
{
    RecognitionText += args.RecognitionResult;
}

void OnRecognitionTextCompleted(object? sender, SpeechToTextRecognitionResultCompletedEventArgs args)
{
    RecognitionText = args.RecognitionResult;
}

Métodos

Método Descrição
RequestPermissions Solicita permissão.
ListenAsync Inicia o reconhecimento de fala.
StartListenAsync Inicia o serviço SpeechToText. (Os resultados do reconhecimento de fala em tempo real serão exibidos por meio de RecognitionResultUpdated e RecognitionResultCompleted)
StopListenAsync Interrompe o serviço SpeechToText. (Os resultados do reconhecimento de fala serão exibidos por meio de RecognitionResultCompleted)

SpeechToTextResult

O resultado retornado do método ListenAsync. Isso pode ser usado para verificar se o reconhecimento foi bem-sucedido e também acessar quaisquer exceções que possam ter ocorrido durante o reconhecimento de fala.

Propriedades

Propriedade Type Descrição
Text string O texto reconhecido.
Exceção Exception Obtém a Exception se a operação de reconhecimento de fala falhou.
IsSuccessful bool Obtém um valor que determina se a operação foi bem-sucedida.
CurrentState SpeechToTextState Obtém um estado de escuta atual.

Eventos

EventName EventArgs Descrição
RecognitionResultUpdated SpeechToTextRecognitionResultUpdatedEventArgs Dispara quando o SpeechToText tem atualizações em tempo real.
RecognitionResultCompleted SpeechToTextRecognitionResultCompletedEventArgs Dispara quando o SpeechToText é concluído.
StateChanged SpeechToTextStateChangedEventArgs Dispara quando o CurrentState é alterado.

Métodos

Método Descrição
EnsureSuccess Verifica se a operação de conversão de fala em texto foi bem-sucedida.

Aviso

EnsureSuccess gerará uma Exception se a operação de reconhecimento não tiver sido bem-sucedida.

Registro de dependência

Caso deseje injetar o serviço, primeiro você precisará registrá-lo. Atualize MauiProgram.cs com as próximas alterações:

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
			.UseMauiCommunityToolkit();

		builder.Services.AddSingleton<ISpeechToText>(SpeechToText.Default);
        return builder.Build();
    }
}

Agora você pode injetar o serviço da seguinte maneira:

public partial class MainPage : ContentPage
{
    private readonly ISpeechToText speechToText;

	public MainPage(ISpeechToText speechToText)
	{
		InitializeComponent();
        this.speechToText = speechToText;
	}
	
	public async void Listen(object sender, EventArgs args)
	{
		var isGranted = await speechToText.RequestPermissions(cancellationToken);
        if (!isGranted)
        {
            await Toast.Make("Permission not granted").Show(CancellationToken.None);
            return;
        }

        var recognitionResult = await speechToText.ListenAsync(
                                            CultureInfo.GetCultureInfo("uk-ua"),
                                            new Progress<string>(), cancellationToken);

        recognitionResult.EnsureSuccess();
        await Toast.Make($"RecognizedText: {recognitionResult.Text}").Show(cancellationToken);
	}
}

Exemplos

Você pode encontrar um exemplo de SpeechToText em ação no Aplicativo de exemplo do .NET MAUI Community Toolkit.

API

O código-fonte do SpeechToText pode ser encontrado no repositório GitHub do .NET MAUI Community Toolkit.