Condividi tramite


SpeechToText

L'API SpeechToText offre la possibilità di convertire il parlato in testo.

Screenshot di SpeechText implementato in macOS

Le precondizioni seguenti necessarie per :SpeechToText

Aggiungere autorizzazioni a AndroidManifest.xml:

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

Sintassi

C#

Può SpeechToText essere usato come indicato di seguito in 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);
    }
}

o utilizzando eventi:

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;
}

Metodi

metodo Descrizione
RequestPermissions Richiede l'autorizzazione.
ListenAsync Avvia il riconoscimento vocale.
StartListenAsync Avvia il servizio SpeechToText. I risultati del riconoscimento vocale in tempo reale verranno visualizzati tramite RecognitionResultUpdated e RecognitionResultCompleted.
StopListenAsync Arresta il servizio SpeechToText. I risultati del riconoscimento vocale verranno visualizzati tramite RecognitionResultCompleted.

SpeechToTextResult

Risultato restituito dal ListenAsync metodo . Può essere usato per verificare se il riconoscimento è riuscito e accedere anche a eventuali eccezioni che potrebbero essere state ocurrete durante il riconoscimento vocale.

Proprietà

Proprietà Type Descrizione
Testo string Testo riconosciuto.
Eccezione Exception Ottiene l'oggetto Exception se l'operazione di riconoscimento vocale non è riuscita.
IsSuccessful bool Ottiene un valore che determina se l'operazione ha avuto esito positivo.
Currentstate SpeechToTextState Ottiene uno stato di ascolto corrente.

Eventi

EventName Eventargs Descrizione
RecognitionResultUpdated SpeechToTextRecognitionResultUpdatedEventArgs Si attiva quando SpeechToText ha aggiornamenti in tempo reale.
RecognitionResultCompleted SpeechToTextRecognitionResultCompletedEventArgs Attiva il completamento di SpeechToText.
Statechanged SpeechToTextStateChangedEventArgs Trigger quando CurrentState è stato modificato.

Metodi

metodo Descrizione
EnsureSucces Verifica se l'operazione di riconoscimento vocale ha avuto esito positivo.

Avviso

EnsureSuccess genererà un'eccezione Exception se l'operazione di riconoscimento non è riuscita.

Registrazione delle dipendenze

Nel caso in cui si voglia inserire il servizio, è prima necessario registrarlo. Eseguire l'aggiornamento MauiProgram.cs con le modifiche successive:

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();
    }
}

Ora è possibile inserire il servizio come segue:

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);
	}
}

Esempi

È possibile trovare un esempio di SpeechToText in azione nell'applicazione di esempio .NET MAUI Community Toolkit.

API

È possibile trovare il codice sorgente per SpeechToText over nel repository GitHub di .NET MAUI Community Toolkit.