Riconoscimento vocale
Documentazione di riferimento | Pacchetto (NuGet) | Ulteriori esempi in GitHub
Questa guida pratica illustra come usare Voce di Azure AI per la conversione del testo in tempo reale. Il riconoscimento vocale in tempo reale è ideale per le applicazioni che richiedono trascrizioni immediate, ad esempio dettatura, assistenza di call center e didascalia per le riunioni live.
Per informazioni su come configurare l'ambiente per un'applicazione di esempio, vedere Guida introduttiva: Riconoscere e convertire la voce in testo.
Creare un'istanza di configurazione del riconoscimento vocale
Per chiamare il servizio Voce con Speech SDK, è necessario creare un'istanza di SpeechConfig
. Questa classe include informazioni sulla sottoscrizione, ad esempio la chiave e l'area associata, l'endpoint, l'host o il token di autorizzazione.
- Creare una risorsa Voce nel portale di Azure. Ottenere la chiave e l'area della risorsa Voce.
- Creare un'istanza di
SpeechConfig
usando il codice seguente. SostituireYourSpeechKey
eYourSpeechRegion
con la chiave e l'area della risorsa Voce.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
}
}
È possibile inizializzare SpeechConfig
in altri modi:
- Usare un enpoint e passarlo un endpoint del servizio Voce. La chiave e il token di autorizzazione sono facoltativi.
- Usare un host e passarlo in un indirizzo host. La chiave e il token di autorizzazione sono facoltativi.
- Usare un token di autorizzazione con l'area o la località associata.
Nota
Sia che si esegua il riconoscimento vocale, la sintesi vocale, la traduzione o il riconoscimento finalità, è sempre necessario creare una configurazione.
Riconoscimento vocale da un microfono
Per eseguire il riconoscimento vocale usando il microfono del dispositivo, creare un’istanza AudioConfig
usando il metodo FromDefaultMicrophoneInput()
. Inizializzare quindi l’oggetto SpeechRecognizer
passando speechConfig
e audioConfig
.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromMic(SpeechConfig speechConfig)
{
using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Console.WriteLine("Speak into your microphone.");
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromMic(speechConfig);
}
}
Se si vuole usare un dispositivo di input audio specifico, è necessario specificare l'ID del dispositivo in AudioConfig
. Per informazioni su come ottenere l'ID dispositivo, vedere Selezionare un dispositivo di input audio con Speech SDK.
Riconoscimento vocale da un file
Se si vuole specificare un file audio invece di un microfono per il riconoscimento vocale, è comunque necessario creare un’istanza AudioConfig
. Tuttavia, non si chiama FromDefaultMicrophoneInput()
. Si chiama FromWavFileInput()
e si passa il percorso del file:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromFile(SpeechConfig speechConfig)
{
using var audioConfig = AudioConfig.FromWavFileInput("PathToFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromFile(speechConfig);
}
}
Riconoscimento vocale da un flusso in memoria
Per molti casi d'uso, è probabile che i dati audio provengano dall'archivio BLOB di Azure o che altrimenti siano già in memoria come istanza byte[]
o come struttura di dati non elaborati simile. L'esempio seguente usa PushAudioInputStream
per riconoscere la voce, cioè fondamentalmente un flusso di memoria astratto. Nel codice di esempio vengono eseguite le seguenti azioni:
- Scrive i dati audio non elaborati nella classe
PushAudioInputStream
usando la funzioneWrite()
, che accetta un’istanzabyte[]
. - Legge un file .wav usando
FileReader
a scopo dimostrativo. Se si dispone già di dati audio in un'istanzabyte[]
, è possibile passare direttamente alla scrittura del contenuto nel flusso di input. - Il formato predefinito è 16 bit, 16-KHz mono pulse-code modulation (PCM). Per personalizzare il formato, è possibile passare un oggetto
AudioStreamFormat
aCreatePushStream()
o usando la funzione staticaAudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels)
.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromStream(SpeechConfig speechConfig)
{
var reader = new BinaryReader(File.OpenRead("PathToFile.wav"));
using var audioConfigStream = AudioInputStream.CreatePushStream();
using var audioConfig = AudioConfig.FromStreamInput(audioConfigStream);
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
byte[] readBytes;
do
{
readBytes = reader.ReadBytes(1024);
audioConfigStream.Write(readBytes, readBytes.Length);
} while (readBytes.Length > 0);
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromStream(speechConfig);
}
}
L'uso di un flusso push come input presuppone che i dati audio siano un PCM non elaborato e ignora le intestazioni. L'API funziona comunque in alcuni casi se l'intestazione non è stata ignorata. Tuttavia, per ottenere risultati ottimali, è consigliabile implementare la logica per leggere le intestazioni in modo che byte[]
inizi all'inizio dei dati audio.
Gestione degli errori
Gli esempi precedenti ottengono semplicemente il testo riconosciuto dalla proprietà speechRecognitionResult.Text
. Per gestire gli errori e altre risposte, è necessario scrivere codice per gestire il risultato. Il seguente codice valuta la proprietà speechRecognitionResult.Reason
e:
- Stampa il risultato del riconoscimento:
ResultReason.RecognizedSpeech
. - Se non esiste una corrispondenza di riconoscimento, informa l'utente:
ResultReason.NoMatch
. - Se viene rilevato un errore, stampa il messaggio di errore:
ResultReason.Canceled
.
switch (speechRecognitionResult.Reason)
{
case ResultReason.RecognizedSpeech:
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
break;
case ResultReason.NoMatch:
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled:
var cancellation = CancellationDetails.FromResult(speechRecognitionResult);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");
if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
}
break;
}
Usare il riconoscimento continuo
Gli esempi precedenti usano il riconoscimento singolo, che riconosce una singola espressione. La fine di una singola espressione viene determinata restando in ascolto del silenzio al termine o finché non vengono elaborati al massimo 15 secondi di audio.
Al contrario, si usa il riconoscimento continuo quando si vuole controllare il momento in cui interrompere il riconoscimento. Per ottenere i risultati del riconoscimento, è necessario sottoscrivere gli eventi Recognizing
, Recognized
e Canceled
. Per arrestare il riconoscimento, è necessario chiamare StopContinuousRecognitionAsync
. Ecco un esempio di riconoscimento continuo eseguito su un file di input audio.
Per iniziare, definire l'input e inizializzare un SpeechRecognizer
:
using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Quindi, creare un’istanza TaskCompletionSource<int>
per gestire lo stato del riconoscimento vocale:
var stopRecognition = new TaskCompletionSource<int>();
Infine, sottoscrivere gli eventi inviati dal SpeechRecognizer
:
Recognizing
: segnale per gli eventi contenenti i risultati del riconoscimento intermedio.Recognized
: segnale per gli eventi contenenti i risultati finali del riconoscimento, che indicano un tentativo di riconoscimento riuscito.SessionStopped
: segnale per gli eventi che indicano la fine di una sessione di riconoscimento (operazione).Canceled
: segnale per gli eventi che contengono risultati di riconoscimento annullati. Questi risultati indicano un tentativo di riconoscimento annullato in seguito a una richiesta di annullamento diretto. In alternativa, indicano un errore di trasporto o protocollo.
speechRecognizer.Recognizing += (s, e) =>
{
Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};
speechRecognizer.Recognized += (s, e) =>
{
if (e.Result.Reason == ResultReason.RecognizedSpeech)
{
Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
}
else if (e.Result.Reason == ResultReason.NoMatch)
{
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
}
};
speechRecognizer.Canceled += (s, e) =>
{
Console.WriteLine($"CANCELED: Reason={e.Reason}");
if (e.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
}
stopRecognition.TrySetResult(0);
};
speechRecognizer.SessionStopped += (s, e) =>
{
Console.WriteLine("\n Session stopped event.");
stopRecognition.TrySetResult(0);
};
Al termine della configurazione, chiamare StartContinuousRecognitionAsync
per avviare il riconoscimento:
await speechRecognizer.StartContinuousRecognitionAsync();
// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });
// Make the following call at some point to stop recognition:
// await speechRecognizer.StopContinuousRecognitionAsync();
Modificare la lingua di origine
Un'attività comune per il riconoscimento vocale è la specifica della lingua di input (o di origine). Nell'esempio seguente viene illustrato come modificare la lingua di input in italiano. Nel codice trovare l'istanza SpeechConfig
e aggiungere questa riga direttamente sotto di essa:
speechConfig.SpeechRecognitionLanguage = "it-IT";
La proprietà SpeechRecognitionLanguage
si aspetta una stringa in formato è prevista una stringa di formato lingua-impostazioni locali. Per un elenco delle impostazioni locali supportate, vedere Lingua e supporto vocale per il servizio Voce.
Identificazione della lingua
È possibile usare l'identificazione della lingua con il riconoscimento vocale quando è necessario identificare la lingua in un'origine audio e quindi trascriverla in testo.
Per un esempio di codice completo, vedere Identificazione della lingua.
Usare un endpoint personalizzato
Con il riconoscimento vocale personalizzato è possibile caricare i propri dati, testare ed eseguire il training di un modello personalizzato, confrontare l'accuratezza dei modelli e distribuire un modello in un endpoint personalizzato. Nell'esempio seguente viene illustrato come impostare un endpoint personalizzato.
var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);
Eseguire e usare un contenitore
I contenitori del servizio Voce forniscono API di endpoint di query basate su WebSocket a cui si accede tramite Speech SDK e l'interfaccia della riga di comando di Voce. Per impostazione predefinita, l'SDK e l'interfaccia della riga di comando di Voce usano il servizio Voce pubblico. Per usare il contenitore, è necessario modificare il metodo di inizializzazione. Usare un URL host del contenitore invece di chiave e area.
Per ulteriori informazioni sui contenitori, vedere URL host in Installare ed eseguire contenitori di Voce con Docker.
Modificare il modo in cui viene gestito il silenzio
Se un utente parla più velocemente o più lento del solito, i comportamenti predefiniti per il silenzio non vocale nell'audio di input potrebbero non essere quelli previsti. I problemi comuni relativi alla gestione del silenzio includono:
- Il concatenamento rapido di diverse frasi in un singolo risultato di riconoscimento anziché la suddivisione delle frasi in singoli risultati.
- Riconoscimento vocale lento che separa parti di una singola frase in più risultati.
- Un riconoscimento singolo che termina troppo rapidamente in attesa dell'inizio del parlato.
Questi problemi possono essere risolti impostando una delle due proprietà di timeout nell'istanza SpeechConfig
usata per creare un SpeechRecognizer
:
- Il timeout del silenzio di segmentazione regola la quantità di audio non vocale consentita all'interno di una frase pronunciata prima che tale frase venga considerata "eseguita".
- In genere valori superiori rendono i risultati più lunghi e consentono pause più lunghe dal parlante all'interno di una frase, ma i risultati richiedono più tempo per arrivare. Possono anche combinare frasi separate in un singolo risultato quando è impostato troppo alto.
- In genere valori più bassi rendono i risultati più brevi e garantiscono interruzioni tra le frasi più immediate e frequenti, ma possono anche causare la separazione di singole frasi in più risultati quando il valore impostato è troppo basso.
- Questo timeout può essere impostato su valori interi compresi tra 100 e 5000, in millisecondi, con un valore predefinito tipico di 500.
- Il timeout del silenzio iniziale regola la quantità di audio non vocale consentito prima di una frase, prima che il tentativo di riconoscimento termini con un risultato "nessuna corrispondenza".
- Valori più alti offrono agli interlocutori più tempo per reagire e iniziare a parlare, ma possono anche comportare una velocità di risposta minore quando non viene pronunciato nulla.
- Valori più bassi garantiscono una richiesta "nessuna corrispondenza" per un'esperienza utente più veloce e una gestione dell'audio più controllata, ma possono interrompere troppo rapidamente l’interlocutore, quando il valore impostato è troppo basso.
- Poiché il riconoscimento continuo genera molti risultati, questo valore determina la frequenza con cui vengono restituiti risultati "nessuna corrispondenza", ma non influisce in caso contrario sul contenuto dei risultati di riconoscimento.
- Questo timeout può essere impostato su qualsiasi valore intero non negativo, in millisecondi, oppure su 0 per disabilitarlo completamente. 5000 è un tipico valore predefinito per il riconoscimento a colpo singolo, mentre 15000 è un tipico valore predefinito per il riconoscimento continuo.
Poiché ci sono compromessi durante la modifica di questi timeout, è consigliabile modificare le impostazioni solo quando viene osservato un problema correlato alla gestione del silenzio. I valori predefiniti gestiscono in modo ottimale la maggior parte dell'audio parlato e solo gli scenari non comuni potrebbero riscontrare problemi.
Esempio: gli utenti che pronunciano un numero di serie come "ABC-123-4567" fanno una pausa tra gruppi di caratteri abbastanza lunga da suddividere il numero di serie in più risultati. In questo caso, provare un valore superiore, ad esempio 2000 millisecondi per il timeout del silenzio della segmentazione:
speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "2000");
Esempio: il discorso di un relatore registrato è abbastanza veloce da combinare diverse frasi in una riga, con risultati di riconoscimento grandi, che arrivano solo una o due volte al minuto. In questo caso, potrebbe essere utile impostare il timeout del silenzio di segmentazione su un valore più basso come 300 ms:
speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "300");
Esempio: un riconoscimento singolo che chiede a un interlocutore di trovare e leggere un numero di serie termina troppo rapidamente mentre viene trovato il numero. In questo caso, potrebbe essere utile un timeout di silenzio iniziale più lungo come 10000 ms:
speechConfig.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000");
Segmentazione semantica
La segmentazione semantica è una strategia di segmentazione del riconoscimento vocale progettata per attenuare i problemi associati alla segmentazione basata sul silenzio:
- Under-segmentation: quando gli utenti parlano per molto tempo senza pause, possono vedere una lunga sequenza di testo senza interruzioni ("muro di testo"), che degrada gravemente l'esperienza di leggibilità.
- Over-segmentation: quando un utente si sospende per un breve periodo di tempo, il meccanismo di rilevamento del silenzio può segmentare in modo errato.
Invece di basarsi sui timeout del silenzio, i segmenti di segmentazione semantica e restituisce i risultati finali quando rileva la punteggiatura finale della frase ,ad esempio '.' o '?'. Ciò migliora l'esperienza utente con segmenti di qualità superiore, semanticamente completi e impedisce risultati intermedi lunghi.
Per usare la segmentazione semantica, è necessario impostare la proprietà seguente nell'istanza SpeechConfig
usata per creare un oggetto SpeechRecognizer
:
speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");
Di seguito sono riportate alcune limitazioni della segmentazione semantica:
- Per usare la segmentazione semantica, è necessario Speech SDK versione 1.41 o successiva.
- La segmentazione semantica è destinata solo all'uso nel riconoscimento continuo. Sono inclusi scenari come la trascrizione e la didascalia. Non deve essere usato nella modalità di riconoscimento e dettatura singola.
- La segmentazione semantica non è disponibile per tutte le lingue e le impostazioni locali. Attualmente, la segmentazione semantica è disponibile solo per le impostazioni locali inglese (en), ad esempio en-US, en-GB, en-IN e en-AU.
- La segmentazione semantica non supporta ancora i punteggi di attendibilità e gli elenchi NBest. Di conseguenza, non è consigliabile segmentare semantica se si usano punteggi di attendibilità o elenchi NBest.
Documentazione di riferimento | Pacchetto (NuGet) | Ulteriori esempi in GitHub
Questa guida pratica illustra come usare Voce di Azure AI per la conversione del testo in tempo reale. Il riconoscimento vocale in tempo reale è ideale per le applicazioni che richiedono trascrizioni immediate, ad esempio dettatura, assistenza di call center e didascalia per le riunioni live.
Per informazioni su come configurare l'ambiente per un'applicazione di esempio, vedere Guida introduttiva: Riconoscere e convertire la voce in testo.
Creare un'istanza di configurazione del riconoscimento vocale
Per chiamare il servizio Voce con Speech SDK, è necessario creare un’istanza SpeechConfig
. Questa classe include informazioni sulla sottoscrizione, ad esempio la chiave e l'area associata, l'endpoint, l'host o il token di autorizzazione.
- Creare una risorsa Voce nel portale di Azure. Ottenere la chiave e l'area della risorsa Voce.
- Creare un'istanza di
SpeechConfig
usando il codice seguente. SostituireYourSpeechKey
eYourSpeechRegion
con la chiave e l'area della risorsa Voce.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
auto speechConfig = SpeechConfig::FromSubscription("YourSpeechKey", "YourSpeechRegion");
È possibile inizializzare SpeechConfig
in altri modi:
- Usare un enpoint e passarlo un endpoint del servizio Voce. La chiave e il token di autorizzazione sono facoltativi.
- Usare un host e passarlo in un indirizzo host. La chiave e il token di autorizzazione sono facoltativi.
- Usare un token di autorizzazione con l'area o la località associata.
Nota
Sia che si esegua il riconoscimento vocale, la sintesi vocale, la traduzione o il riconoscimento finalità, è sempre necessario creare una configurazione.
Riconoscimento vocale da un microfono
Per eseguire il riconoscimento vocale usando il microfono del dispositivo, creare un’istanza AudioConfig
usando la funzione membro FromDefaultMicrophoneInput()
. Inizializzare quindi l’oggetto SpeechRecognizer
passando audioConfig
e config
.
using namespace Microsoft::CognitiveServices::Speech::Audio;
auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
cout << "Speak into your microphone." << std::endl;
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;
Se si vuole usare un dispositivo di input audio specifico, è necessario specificare l'ID del dispositivo in AudioConfig
. Per informazioni su come ottenere l'ID dispositivo, vedere Selezionare un dispositivo di input audio con Speech SDK.
Riconoscimento vocale da un file
Se si vuole specificare un file audio invece di usare un microfono per il riconoscimento vocale, è comunque necessario creare un’istanza AudioConfig
. Tuttavia, non si chiama FromDefaultMicrophoneInput()
. Si chiama FromWavFileInput()
e si passa il percorso del file:
using namespace Microsoft::CognitiveServices::Speech::Audio;
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;
Riconoscimento vocale tramite la classe Riconoscimento
La classe Recognizer per Speech SDK per C++ espone alcuni metodi che è possibile usare per il riconoscimento vocale.
Riconoscimento singolo
Il riconoscimento singolo riconosce in modo asincrono una singola espressione. La fine di una singola espressione viene determinata restando in ascolto del silenzio al termine o finché non vengono elaborati al massimo 15 secondi di audio. Ecco un esempio di riconoscimento singolo asincrono tramite RecognizeOnceAsync
:
auto result = speechRecognizer->RecognizeOnceAsync().get();
Per gestire il risultato è necessario scrivere del codice. Questo esempio valuta result->Reason
e:
- Stampa il risultato del riconoscimento:
ResultReason::RecognizedSpeech
. - Se non esiste una corrispondenza di riconoscimento, informa l'utente:
ResultReason::NoMatch
. - Se viene rilevato un errore, stampa il messaggio di errore:
ResultReason::Canceled
.
switch (result->Reason)
{
case ResultReason::RecognizedSpeech:
cout << "We recognized: " << result->Text << std::endl;
break;
case ResultReason::NoMatch:
cout << "NOMATCH: Speech could not be recognized." << std::endl;
break;
case ResultReason::Canceled:
{
auto cancellation = CancellationDetails::FromResult(result);
cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
if (cancellation->Reason == CancellationReason::Error) {
cout << "CANCELED: ErrorCode= " << (int)cancellation->ErrorCode << std::endl;
cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
}
}
break;
default:
break;
}
Riconoscimento continuo
Il riconoscimento continuo è un po' più impegnativo rispetto al riconoscimento singolo. Per ottenere i risultati del riconoscimento, è necessario sottoscrivere gli eventi Recognizing
, Recognized
e Canceled
. Per arrestare il riconoscimento, è necessario chiamare StopContinuousRecognitionAsync. Ecco un esempio di riconoscimento continuo eseguito su un file di input audio.
Per iniziare, definire l'input e inizializzare un SpeechRecognizer
:
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
Successivamente, creare una variabile per gestire lo stato del riconoscimento vocale. Dichiarare promise<void>
perché all'inizio del riconoscimento, si può presupporre che non sia terminato:
promise<void> recognitionEnd;
Infine, sottoscrivere gli eventi inviati dal SpeechRecognizer
:
Recognizing
: segnale per gli eventi contenenti i risultati del riconoscimento intermedio.Recognized
: segnale per gli eventi contenenti i risultati finali del riconoscimento, che indicano un tentativo di riconoscimento riuscito.SessionStopped
: segnale per gli eventi che indicano la fine di una sessione di riconoscimento (operazione).Canceled
: segnale per gli eventi che contengono risultati di riconoscimento annullati. Questi risultati indicano un tentativo di riconoscimento annullato in seguito a una richiesta di annullamento diretto. In alternativa, indicano un errore di trasporto o protocollo.
speechRecognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
{
cout << "Recognizing:" << e.Result->Text << std::endl;
});
speechRecognizer->Recognized.Connect([](const SpeechRecognitionEventArgs& e)
{
if (e.Result->Reason == ResultReason::RecognizedSpeech)
{
cout << "RECOGNIZED: Text=" << e.Result->Text
<< " (text could not be translated)" << std::endl;
}
else if (e.Result->Reason == ResultReason::NoMatch)
{
cout << "NOMATCH: Speech could not be recognized." << std::endl;
}
});
speechRecognizer->Canceled.Connect([&recognitionEnd](const SpeechRecognitionCanceledEventArgs& e)
{
cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
if (e.Reason == CancellationReason::Error)
{
cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << "\n"
<< "CANCELED: ErrorDetails=" << e.ErrorDetails << "\n"
<< "CANCELED: Did you set the speech resource key and region values?" << std::endl;
recognitionEnd.set_value(); // Notify to stop recognition.
}
});
speechRecognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
{
cout << "Session stopped.";
recognitionEnd.set_value(); // Notify to stop recognition.
});
Al termine della configurazione, chiamare StartContinuousRecognitionAsync
per avviare il riconoscimento:
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer->StartContinuousRecognitionAsync().get();
// Waits for recognition end.
recognitionEnd.get_future().get();
// Stops recognition.
speechRecognizer->StopContinuousRecognitionAsync().get();
Modificare la lingua di origine
Un'attività comune per il riconoscimento vocale è la specifica della lingua di input (o di origine). Il seguente esempio mostra come modificare la lingua di input in tedesco. Nel codice trovare l'istanza SpeechConfig
e aggiungere questa riga direttamente sotto di essa:
speechConfig->SetSpeechRecognitionLanguage("de-DE");
SetSpeechRecognitionLanguage
è un parametro che accetta una stringa come argomento. Per un elenco delle impostazioni locali supportate, vedere Lingua e supporto vocale per il servizio Voce.
Identificazione della lingua
È possibile usare l'identificazione della lingua con il riconoscimento vocale quando è necessario identificare la lingua in un'origine audio e quindi trascriverla in testo.
Per un esempio di codice completo, vedere Identificazione della lingua.
Usare un endpoint personalizzato
Con il riconoscimento vocale personalizzato è possibile caricare i propri dati, testare ed eseguire il training di un modello personalizzato, confrontare l'accuratezza dei modelli e distribuire un modello in un endpoint personalizzato. Nell'esempio seguente viene illustrato come impostare un endpoint personalizzato.
auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);
Eseguire e usare un contenitore
I contenitori del servizio Voce forniscono API di endpoint di query basate su WebSocket a cui si accede tramite Speech SDK e l'interfaccia della riga di comando di Voce. Per impostazione predefinita, l'SDK e l'interfaccia della riga di comando di Voce usano il servizio Voce pubblico. Per usare il contenitore, è necessario modificare il metodo di inizializzazione. Usare un URL host del contenitore invece di chiave e area.
Per ulteriori informazioni sui contenitori, vedere URL host in Installare ed eseguire contenitori di Voce con Docker.
Segmentazione semantica
La segmentazione semantica è una strategia di segmentazione del riconoscimento vocale progettata per attenuare i problemi associati alla segmentazione basata sul silenzio:
- Under-segmentation: quando gli utenti parlano per molto tempo senza pause, possono vedere una lunga sequenza di testo senza interruzioni ("muro di testo"), che degrada gravemente l'esperienza di leggibilità.
- Over-segmentation: quando un utente si sospende per un breve periodo di tempo, il meccanismo di rilevamento del silenzio può segmentare in modo errato.
Invece di basarsi sui timeout del silenzio, i segmenti di segmentazione semantica e restituisce i risultati finali quando rileva la punteggiatura finale della frase ,ad esempio '.' o '?'. Ciò migliora l'esperienza utente con segmenti di qualità superiore, semanticamente completi e impedisce risultati intermedi lunghi.
Per usare la segmentazione semantica, è necessario impostare la proprietà seguente nell'istanza SpeechConfig
usata per creare un oggetto SpeechRecognizer
:
speechConfig->SetProperty(PropertyId::Speech_SegmentationStrategy, "Semantic");
Di seguito sono riportate alcune limitazioni della segmentazione semantica:
- Per usare la segmentazione semantica, è necessario Speech SDK versione 1.41 o successiva.
- La segmentazione semantica è destinata solo all'uso nel riconoscimento continuo. Sono inclusi scenari come la trascrizione e la didascalia. Non deve essere usato nella modalità di riconoscimento e dettatura singola.
- La segmentazione semantica non è disponibile per tutte le lingue e le impostazioni locali. Attualmente, la segmentazione semantica è disponibile solo per le impostazioni locali inglese (en), ad esempio en-US, en-GB, en-IN e en-AU.
- La segmentazione semantica non supporta ancora i punteggi di attendibilità e gli elenchi NBest. Di conseguenza, non è consigliabile segmentare semantica se si usano punteggi di attendibilità o elenchi NBest.
Documentazione di riferimento | Pacchetto (Go) | Ulteriori esempi in GitHub
Questa guida pratica illustra come usare Voce di Azure AI per la conversione del testo in tempo reale. Il riconoscimento vocale in tempo reale è ideale per le applicazioni che richiedono trascrizioni immediate, ad esempio dettatura, assistenza di call center e didascalia per le riunioni live.
Per informazioni su come configurare l'ambiente per un'applicazione di esempio, vedere Guida introduttiva: Riconoscere e convertire la voce in testo.
Riconoscimento vocale da un microfono
- Creare una risorsa Voce nel portale di Azure. Ottenere la chiave e l'area della risorsa Voce.
- Usare l'esempio di codice seguente per eseguire il riconoscimento vocale dal microfono del dispositivo predefinito. Sostituire
YourSpeechKey
eYourSpeechRegion
con la chiave e l'area della risorsa Voce. Eseguendo lo script viene avviata una sessione di riconoscimento vocale sul microfono predefinito e sul testo di output:
package main
import (
"bufio"
"fmt"
"os"
"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)
func sessionStartedHandler(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Started (ID=", event.SessionID, ")")
}
func sessionStoppedHandler(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Stopped (ID=", event.SessionID, ")")
}
func recognizingHandler(event speech.SpeechRecognitionEventArgs) {
defer event.Close()
fmt.Println("Recognizing:", event.Result.Text)
}
func recognizedHandler(event speech.SpeechRecognitionEventArgs) {
defer event.Close()
fmt.Println("Recognized:", event.Result.Text)
}
func cancelledHandler(event speech.SpeechRecognitionCanceledEventArgs) {
defer event.Close()
fmt.Println("Received a cancellation: ", event.ErrorDetails)
fmt.Println("Did you set the speech resource key and region values?")
}
func main() {
subscription := "YourSpeechKey"
region := "YourSpeechRegion"
audioConfig, err := audio.NewAudioConfigFromDefaultMicrophoneInput()
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer audioConfig.Close()
config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer config.Close()
speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer speechRecognizer.Close()
speechRecognizer.SessionStarted(sessionStartedHandler)
speechRecognizer.SessionStopped(sessionStoppedHandler)
speechRecognizer.Recognizing(recognizingHandler)
speechRecognizer.Recognized(recognizedHandler)
speechRecognizer.Canceled(cancelledHandler)
speechRecognizer.StartContinuousRecognitionAsync()
defer speechRecognizer.StopContinuousRecognitionAsync()
bufio.NewReader(os.Stdin).ReadBytes('\n')
}
Eseguire i comandi seguenti per creare un file go.mod che si collega ai componenti ospitati in GitHub:
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
Ora compilare ed eseguire il codice:
go build
go run quickstart
Per informazioni dettagliate, vedere il contenuto di riferimento per la classe SpeechConfig
e la classe SpeechRecognizer
.
Riconoscimento vocale da un file audio
Usare l'esempio seguente per eseguire il riconoscimento vocale da un file audio. Sostituire YourSpeechKey
e YourSpeechRegion
con la chiave e l'area della risorsa Voce. Sostituire inoltre la variabile file
con il percorso verso un file .wav. Con l'esecuzione dello script viene eseguito il riconoscimento vocale dal file e viene restituito il risultato del testo.
package main
import (
"fmt"
"time"
"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)
func main() {
subscription := "YourSpeechKey"
region := "YourSpeechRegion"
file := "path/to/file.wav"
audioConfig, err := audio.NewAudioConfigFromWavFileInput(file)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer audioConfig.Close()
config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer config.Close()
speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer speechRecognizer.Close()
speechRecognizer.SessionStarted(func(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Started (ID=", event.SessionID, ")")
})
speechRecognizer.SessionStopped(func(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Stopped (ID=", event.SessionID, ")")
})
task := speechRecognizer.RecognizeOnceAsync()
var outcome speech.SpeechRecognitionOutcome
select {
case outcome = <-task:
case <-time.After(5 * time.Second):
fmt.Println("Timed out")
return
}
defer outcome.Close()
if outcome.Error != nil {
fmt.Println("Got an error: ", outcome.Error)
}
fmt.Println("Got a recognition!")
fmt.Println(outcome.Result.Text)
}
Eseguire i comandi seguenti per creare un file go.mod che si collega ai componenti ospitati in GitHub:
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
Ora compilare ed eseguire il codice:
go build
go run quickstart
Per informazioni dettagliate, vedere il contenuto di riferimento per la classe SpeechConfig
e la classe SpeechRecognizer
.
Eseguire e usare un contenitore
I contenitori del servizio Voce forniscono API di endpoint di query basate su WebSocket a cui si accede tramite Speech SDK e l'interfaccia della riga di comando di Voce. Per impostazione predefinita, l'SDK e l'interfaccia della riga di comando di Voce usano il servizio Voce pubblico. Per usare il contenitore, è necessario modificare il metodo di inizializzazione. Usare un URL host del contenitore invece di chiave e area.
Per ulteriori informazioni sui contenitori, vedere URL host in Installare ed eseguire contenitori di Voce con Docker.
Documentazione di riferimento | Ulteriori esempi in GitHub
Questa guida pratica illustra come usare Voce di Azure AI per la conversione del testo in tempo reale. Il riconoscimento vocale in tempo reale è ideale per le applicazioni che richiedono trascrizioni immediate, ad esempio dettatura, assistenza di call center e didascalia per le riunioni live.
Per informazioni su come configurare l'ambiente per un'applicazione di esempio, vedere Guida introduttiva: Riconoscere e convertire la voce in testo.
Creare un'istanza di configurazione del riconoscimento vocale
Per chiamare il servizio Voce con Speech SDK, è necessario creare un'istanza SpeechConfig. Questa classe include informazioni sulla sottoscrizione, ad esempio la chiave e l'area associata, l'endpoint, l'host o il token di autorizzazione.
- Creare una risorsa Voce nel portale di Azure. Ottenere la chiave e l'area della risorsa Voce.
- Creare un'istanza di
SpeechConfig
usando la chiave e l'area di Riconoscimento vocale.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
}
}
È possibile inizializzare SpeechConfig
in altri modi:
- Usare un enpoint e passarlo un endpoint del servizio Voce. La chiave e il token di autorizzazione sono facoltativi.
- Usare un host e passarlo in un indirizzo host. La chiave e il token di autorizzazione sono facoltativi.
- Usare un token di autorizzazione con l'area o la località associata.
Nota
Sia che si esegua il riconoscimento vocale, la sintesi vocale, la traduzione o il riconoscimento finalità, sarà sempre necessario creare una configurazione.
Riconoscimento vocale da un microfono
Per eseguire il riconoscimento vocale usando il microfono del dispositivo, creare un’istanza AudioConfig
usando il metodo fromDefaultMicrophoneInput()
. Inizializzare quindi l’oggetto SpeechRecognizer
passando audioConfig
e config
.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
fromMic(speechConfig);
}
public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
System.out.println("Speak into your microphone.");
Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult speechRecognitionResult = task.get();
System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
}
}
Se si vuole usare un dispositivo di input audio specifico, è necessario specificare l'ID del dispositivo in AudioConfig
. Per informazioni su come ottenere l'ID dispositivo, vedere Selezionare un dispositivo di input audio con Speech SDK.
Riconoscimento vocale da un file
Se si vuole specificare un file audio invece di usare un microfono per il riconoscimento vocale, è comunque necessario creare un’istanza AudioConfig
. Tuttavia, non si chiama FromDefaultMicrophoneInput()
. Si chiama fromWavFileInput()
e si passa il percorso del file:
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
fromFile(speechConfig);
}
public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult speechRecognitionResult = task.get();
System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
}
}
Gestione degli errori
Gli esempi precedenti ottengono solo il testo riconosciuto usando speechRecognitionResult.getText()
. Per gestire gli errori e altre risposte, è necessario scrivere codice per gestire il risultato. Nell'esempio seguente viene valutato come speechRecognitionResult.getReason()
e:
- Stampa il risultato del riconoscimento:
ResultReason.RecognizedSpeech
. - Se non esiste una corrispondenza di riconoscimento, informa l'utente:
ResultReason.NoMatch
. - Se viene rilevato un errore, stampa il messaggio di errore:
ResultReason.Canceled
.
switch (speechRecognitionResult.getReason()) {
case ResultReason.RecognizedSpeech:
System.out.println("We recognized: " + speechRecognitionResult.getText());
exitCode = 0;
break;
case ResultReason.NoMatch:
System.out.println("NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled: {
CancellationDetails cancellation = CancellationDetails.fromResult(speechRecognitionResult);
System.out.println("CANCELED: Reason=" + cancellation.getReason());
if (cancellation.getReason() == CancellationReason.Error) {
System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
System.out.println("CANCELED: Did you set the speech resource key and region values?");
}
}
break;
}
Usare il riconoscimento continuo
Gli esempi precedenti usano il riconoscimento singolo, che riconosce una singola espressione. La fine di una singola espressione viene determinata restando in ascolto del silenzio al termine o finché non vengono elaborati al massimo 15 secondi di audio.
Al contrario, si usa il riconoscimento continuo quando si vuole controllare il momento in cui interrompere il riconoscimento. Per ottenere i risultati del riconoscimento, è necessario sottoscrivere gli eventi recognizing
, recognized
e canceled
. Per arrestare il riconoscimento, è necessario chiamare stopContinuousRecognitionAsync
. Ecco un esempio di riconoscimento continuo eseguito su un file di input audio.
Per iniziare, definire l'input e inizializzare un SpeechRecognizer
:
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(config, audioConfig);
Successivamente, creare una variabile per gestire lo stato del riconoscimento vocale. Dichiarare un'istanza Semaphore
nell'ambito della classe:
private static Semaphore stopTranslationWithFileSemaphore;
Infine, sottoscrivere gli eventi inviati dal SpeechRecognizer
:
recognizing
: segnale per gli eventi contenenti i risultati del riconoscimento intermedio.recognized
: segnale per gli eventi contenenti i risultati finali del riconoscimento, che indicano un tentativo di riconoscimento riuscito.sessionStopped
: segnale per gli eventi che indicano la fine di una sessione di riconoscimento (operazione).canceled
: segnale per gli eventi che contengono risultati di riconoscimento annullati. Questi risultati indicano un tentativo di riconoscimento annullato in seguito a una richiesta di annullamento diretto. In alternativa, indicano un errore di trasporto o protocollo.
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);
speechRecognizer.recognizing.addEventListener((s, e) -> {
System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});
speechRecognizer.recognized.addEventListener((s, e) -> {
if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
System.out.println("RECOGNIZED: Text=" + e.getResult().getText());
}
else if (e.getResult().getReason() == ResultReason.NoMatch) {
System.out.println("NOMATCH: Speech could not be recognized.");
}
});
speechRecognizer.canceled.addEventListener((s, e) -> {
System.out.println("CANCELED: Reason=" + e.getReason());
if (e.getReason() == CancellationReason.Error) {
System.out.println("CANCELED: ErrorCode=" + e.getErrorCode());
System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails());
System.out.println("CANCELED: Did you set the speech resource key and region values?");
}
stopTranslationWithFileSemaphore.release();
});
speechRecognizer.sessionStopped.addEventListener((s, e) -> {
System.out.println("\n Session stopped event.");
stopTranslationWithFileSemaphore.release();
});
Al termine della configurazione, chiamare startContinuousRecognitionAsync
per avviare il riconoscimento:
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer.startContinuousRecognitionAsync().get();
// Waits for completion.
stopTranslationWithFileSemaphore.acquire();
// Stops recognition.
speechRecognizer.stopContinuousRecognitionAsync().get();
Modificare la lingua di origine
Un'attività comune per il riconoscimento vocale è la specifica della lingua di input (o di origine). Il seguente esempio mostra come modificare la lingua di input in francese. Nel codice, trovare l'istanza SpeechConfig
e aggiungere questa riga direttamente sotto di essa:
config.setSpeechRecognitionLanguage("fr-FR");
setSpeechRecognitionLanguage
è un parametro che accetta una stringa come argomento. Fare riferimento all'elenco delle impostazioni locali supportate per il riconoscimento vocale.
Identificazione della lingua
È possibile usare l'identificazione della lingua con il riconoscimento vocale quando è necessario identificare la lingua in un'origine audio e quindi trascriverla in testo.
Per un esempio di codice completo, vedere Identificazione della lingua.
Usare un endpoint personalizzato
Con il riconoscimento vocale personalizzato è possibile caricare i propri dati, testare ed eseguire il training di un modello personalizzato, confrontare l'accuratezza dei modelli e distribuire un modello in un endpoint personalizzato. Nell'esempio seguente viene illustrato come impostare un endpoint personalizzato:
SpeechConfig speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);
Eseguire e usare un contenitore
I contenitori del servizio Voce forniscono API di endpoint di query basate su WebSocket a cui si accede tramite Speech SDK e l'interfaccia della riga di comando di Voce. Per impostazione predefinita, l'SDK e l'interfaccia della riga di comando di Voce usano il servizio Voce pubblico. Per usare il contenitore, è necessario modificare il metodo di inizializzazione. Usare un URL host del contenitore invece di chiave e area.
Per ulteriori informazioni sui contenitori, vedere URL host in Installare ed eseguire contenitori di Voce con Docker.
Segmentazione semantica
La segmentazione semantica è una strategia di segmentazione del riconoscimento vocale progettata per attenuare i problemi associati alla segmentazione basata sul silenzio:
- Under-segmentation: quando gli utenti parlano per molto tempo senza pause, possono vedere una lunga sequenza di testo senza interruzioni ("muro di testo"), che degrada gravemente l'esperienza di leggibilità.
- Over-segmentation: quando un utente si sospende per un breve periodo di tempo, il meccanismo di rilevamento del silenzio può segmentare in modo errato.
Invece di basarsi sui timeout del silenzio, i segmenti di segmentazione semantica e restituisce i risultati finali quando rileva la punteggiatura finale della frase ,ad esempio '.' o '?'. Ciò migliora l'esperienza utente con segmenti di qualità superiore, semanticamente completi e impedisce risultati intermedi lunghi.
Per usare la segmentazione semantica, è necessario impostare la proprietà seguente nell'istanza SpeechConfig
usata per creare un oggetto SpeechRecognizer
:
speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");
Di seguito sono riportate alcune limitazioni della segmentazione semantica:
- Per usare la segmentazione semantica, è necessario Speech SDK versione 1.41 o successiva.
- La segmentazione semantica è destinata solo all'uso nel riconoscimento continuo. Sono inclusi scenari come la trascrizione e la didascalia. Non deve essere usato nella modalità di riconoscimento e dettatura singola.
- La segmentazione semantica non è disponibile per tutte le lingue e le impostazioni locali. Attualmente, la segmentazione semantica è disponibile solo per le impostazioni locali inglese (en), ad esempio en-US, en-GB, en-IN e en-AU.
- La segmentazione semantica non supporta ancora i punteggi di attendibilità e gli elenchi NBest. Di conseguenza, non è consigliabile segmentare semantica se si usano punteggi di attendibilità o elenchi NBest.
Documentazione di riferimento | Pacchetto (npm) | Ulteriori esempi in GitHub | Codice sorgente della libreria
Questa guida pratica illustra come usare Voce di Azure AI per la conversione del testo in tempo reale. Il riconoscimento vocale in tempo reale è ideale per le applicazioni che richiedono trascrizioni immediate, ad esempio dettatura, assistenza di call center e didascalia per le riunioni live.
Per informazioni su come configurare l'ambiente per un'applicazione di esempio, vedere Guida introduttiva: Riconoscere e convertire la voce in testo.
Creare un'istanza di configurazione del riconoscimento vocale
Per chiamare il servizio Voce con Speech SDK, è necessario creare un'istanza di SpeechConfig
. Questa classe include informazioni sulla sottoscrizione, ad esempio la chiave e l'area associata, l'endpoint, l'host o il token di autorizzazione.
- Creare una risorsa Voce nel portale di Azure. Ottenere la chiave e l'area della risorsa Voce.
- Creare un'istanza di
SpeechConfig
usando il codice seguente. SostituireYourSpeechKey
eYourSpeechRegion
con la chiave e l'area della risorsa Voce.
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
È possibile inizializzare SpeechConfig
in altri modi:
- Usare un enpoint e passarlo un endpoint del servizio Voce. La chiave e il token di autorizzazione sono facoltativi.
- Usare un host e passarlo in un indirizzo host. La chiave e il token di autorizzazione sono facoltativi.
- Usare un token di autorizzazione con l'area o la località associata.
Nota
Sia che si esegua il riconoscimento vocale, la sintesi vocale, la traduzione o il riconoscimento finalità, è sempre necessario creare una configurazione.
Riconoscimento vocale da un microfono
Il riconoscimento vocale da microfono non è supportato in Node.js. È supportato solo in un ambiente JavaScript basato su browser. Per altre informazioni, vedere l'esempio React e l'implementazione del riconoscimento vocale da un microfono in GitHub. L'esempio React mostra modelli di progettazione per lo scambio e la gestione dei token di autenticazione. Mostra anche l'acquisizione dell'audio da un microfono o da un file per le conversioni della voce in testo scritto.
Nota
Se si vuole usare un dispositivo di input audio specifico, è necessario specificare l'ID del dispositivo in AudioConfig
. Per informazioni su come ottenere l'ID dispositivo, vedere Selezionare un dispositivo di input audio con Speech SDK.
Riconoscimento vocale da un file
Per effettuare il riconoscimento della voce da un file audio, creare un'istanza AudioConfig
usando il metodo fromWavFileInput()
, che accetta un oggetto Buffer
. Inizializzare quindi SpeechRecognizer
passando audioConfig
e speechConfig
.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
function fromFile() {
let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
speechRecognizer.recognizeOnceAsync(result => {
console.log(`RECOGNIZED: Text=${result.text}`);
speechRecognizer.close();
});
}
fromFile();
Riconoscimento vocale da un flusso in memoria
Per molti casi d'uso, è probabile che i dati audio provengano dall'archivio BLOB di Azure. Oppure saranno già in memoria come ArrayBuffer
o come struttura di dati non elaborati simile. Il codice seguente:
- Crea un flusso push usando
createPushStream()
. - Legge un file .wav usando
fs.createReadStream
a scopo dimostrativo. Se si dispone già di dati audio nelArrayBuffer
, è possibile passare direttamente alla scrittura del contenuto nel flusso di input. - Crea una configurazione audio usando il flusso push.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
function fromStream() {
let pushStream = sdk.AudioInputStream.createPushStream();
fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
pushStream.write(arrayBuffer.slice());
}).on('end', function() {
pushStream.close();
});
let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
speechRecognizer.recognizeOnceAsync(result => {
console.log(`RECOGNIZED: Text=${result.text}`);
speechRecognizer.close();
});
}
fromStream();
L'uso di un flusso push come input presuppone che i dati audio siano un PCM non elaborato e ignora le intestazioni. L'API funziona comunque in alcuni casi se l'intestazione non è stata ignorata. Tuttavia, per ottenere risultati ottimali, è consigliabile implementare la logica per leggere le intestazioni in modo che fs
inizi all'inizio dei dati audio.
Gestione degli errori
Gli esempi precedenti ottengono semplicemente il testo riconosciuto dalla proprietà result.text
. Per gestire gli errori e altre risposte, è necessario scrivere codice per gestire il risultato. Il seguente codice valuta la proprietà result.reason
e:
- Stampa il risultato del riconoscimento:
ResultReason.RecognizedSpeech
. - Se non esiste una corrispondenza di riconoscimento, informa l'utente:
ResultReason.NoMatch
. - Se viene rilevato un errore, stampa il messaggio di errore:
ResultReason.Canceled
.
switch (result.reason) {
case sdk.ResultReason.RecognizedSpeech:
console.log(`RECOGNIZED: Text=${result.text}`);
break;
case sdk.ResultReason.NoMatch:
console.log("NOMATCH: Speech could not be recognized.");
break;
case sdk.ResultReason.Canceled:
const cancellation = sdk.CancellationDetails.fromResult(result);
console.log(`CANCELED: Reason=${cancellation.reason}`);
if (cancellation.reason == sdk.CancellationReason.Error) {
console.log(`CANCELED: ErrorCode=${cancellation.ErrorCode}`);
console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
console.log("CANCELED: Did you set the speech resource key and region values?");
}
break;
}
Usare il riconoscimento continuo
Gli esempi precedenti usano il riconoscimento singolo, che riconosce una singola espressione. La fine di una singola espressione viene determinata restando in ascolto del silenzio al termine o finché non vengono elaborati al massimo 15 secondi di audio.
Al contrario, è possibile usare il riconoscimento continuo quando si vuole controllare il momento in cui interrompere il riconoscimento. Per ottenere i risultati del riconoscimento, è necessario sottoscrivere gli eventi Recognizing
, Recognized
e Canceled
. Per arrestare il riconoscimento, è necessario chiamare [stopContinuousRecognitionAsync
] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-stopcontinuousrecognitionasync). Ecco un esempio di riconoscimento continuo eseguito su un file di input audio.
Per iniziare, definire l'input e inizializzare un SpeechRecognizer
:
const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
Infine, sottoscrivere gli eventi inviati da SpeechRecognizer
.
recognizing
: segnale per gli eventi contenenti i risultati del riconoscimento intermedio.recognized
: segnale per gli eventi contenenti i risultati finali del riconoscimento, che indicano un tentativo di riconoscimento riuscito.sessionStopped
: segnale per gli eventi che indicano la fine di una sessione di riconoscimento (operazione).canceled
: segnale per gli eventi che contengono risultati di riconoscimento annullati. Questi risultati indicano un tentativo di riconoscimento annullato in seguito a una richiesta di annullamento diretto. In alternativa, indicano un errore di trasporto o protocollo.
speechRecognizer.recognizing = (s, e) => {
console.log(`RECOGNIZING: Text=${e.result.text}`);
};
speechRecognizer.recognized = (s, e) => {
if (e.result.reason == sdk.ResultReason.RecognizedSpeech) {
console.log(`RECOGNIZED: Text=${e.result.text}`);
}
else if (e.result.reason == sdk.ResultReason.NoMatch) {
console.log("NOMATCH: Speech could not be recognized.");
}
};
speechRecognizer.canceled = (s, e) => {
console.log(`CANCELED: Reason=${e.reason}`);
if (e.reason == sdk.CancellationReason.Error) {
console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
console.log("CANCELED: Did you set the speech resource key and region values?");
}
speechRecognizer.stopContinuousRecognitionAsync();
};
speechRecognizer.sessionStopped = (s, e) => {
console.log("\n Session stopped event.");
speechRecognizer.stopContinuousRecognitionAsync();
};
Una volta configurato tutto, chiamare [startContinuousRecognitionAsync
] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-stopcontinuousrecognitionasync) per avviare il riconoscimento:
speechRecognizer.startContinuousRecognitionAsync();
// Make the following call at some point to stop recognition:
// speechRecognizer.stopContinuousRecognitionAsync();
Modificare la lingua di origine
Un'attività comune per il riconoscimento vocale è la specifica della lingua di input (o di origine). Nell'esempio seguente viene illustrato come modificare la lingua di input in italiano. Nel codice trovare l'istanza SpeechConfig
e aggiungere questa riga direttamente sotto di essa:
speechConfig.speechRecognitionLanguage = "it-IT";
La proprietà speechRecognitionLanguage
si aspetta una stringa in formato è prevista una stringa di formato lingua-impostazioni locali. Per un elenco delle impostazioni locali supportate, vedere Lingua e supporto vocale per il servizio Voce.
Identificazione della lingua
È possibile usare l'identificazione della lingua con il riconoscimento vocale quando è necessario identificare la lingua in un'origine audio e quindi trascriverla in testo.
Per un esempio di codice completo, vedere Identificazione della lingua.
Usare un endpoint personalizzato
Con il riconoscimento vocale personalizzato è possibile caricare i propri dati, testare ed eseguire il training di un modello personalizzato, confrontare l'accuratezza dei modelli e distribuire un modello in un endpoint personalizzato. Nell'esempio seguente viene illustrato come impostare un endpoint personalizzato.
var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);
Eseguire e usare un contenitore
I contenitori del servizio Voce forniscono API di endpoint di query basate su WebSocket a cui si accede tramite Speech SDK e l'interfaccia della riga di comando di Voce. Per impostazione predefinita, l'SDK e l'interfaccia della riga di comando di Voce usano il servizio Voce pubblico. Per usare il contenitore, è necessario modificare il metodo di inizializzazione. Usare un URL host del contenitore invece di chiave e area.
Per ulteriori informazioni sui contenitori, vedere URL host in Installare ed eseguire contenitori di Voce con Docker.
Documentazione di riferimento | Pacchetto (download) | Ulteriori esempi in GitHub
Questa guida pratica illustra come usare Voce di Azure AI per la conversione del testo in tempo reale. Il riconoscimento vocale in tempo reale è ideale per le applicazioni che richiedono trascrizioni immediate, ad esempio dettatura, assistenza di call center e didascalia per le riunioni live.
Per informazioni su come configurare l'ambiente per un'applicazione di esempio, vedere Guida introduttiva: Riconoscere e convertire la voce in testo.
Installare Speech SDK e gli esempi
Il repository Azure-Samples/cognitive-services-speech-sdk contiene esempi scritti in Objective-C per iOS e Mac. Selezionare un collegamento per visualizzare le istruzioni di installazione per ogni esempio:
- Riconoscimento vocale da un microfono in Objective-C in macOS
- Riconoscimento vocale in Objective-C in iOS
- Esempi aggiuntivi per Objective-C in iOS
Per altre informazioni, vedere le informazioni di riferimento su Speech SDK per Objective-C.
Usare un endpoint personalizzato
Con il riconoscimento vocale personalizzato è possibile caricare i propri dati, testare ed eseguire il training di un modello personalizzato, confrontare l'accuratezza dei modelli e distribuire un modello in un endpoint personalizzato. Nell'esempio seguente viene illustrato come impostare un endpoint personalizzato:
SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:"YourSubscriptionKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];
Eseguire e usare un contenitore
I contenitori del servizio Voce forniscono API di endpoint di query basate su WebSocket a cui si accede tramite Speech SDK e l'interfaccia della riga di comando di Voce. Per impostazione predefinita, l'SDK e l'interfaccia della riga di comando di Voce usano il servizio Voce pubblico. Per usare il contenitore, è necessario modificare il metodo di inizializzazione. Usare un URL host del contenitore invece di chiave e area.
Per ulteriori informazioni sui contenitori, vedere URL host in Installare ed eseguire contenitori di Voce con Docker.
Documentazione di riferimento | Pacchetto (download) | Ulteriori esempi in GitHub
Questa guida pratica illustra come usare Voce di Azure AI per la conversione del testo in tempo reale. Il riconoscimento vocale in tempo reale è ideale per le applicazioni che richiedono trascrizioni immediate, ad esempio dettatura, assistenza di call center e didascalia per le riunioni live.
Per informazioni su come configurare l'ambiente per un'applicazione di esempio, vedere Guida introduttiva: Riconoscere e convertire la voce in testo.
Installare Speech SDK e gli esempi
Il repository Azure-Samples/cognitive-services-speech-sdk contiene esempi scritti in Swift per iOS e Mac. Selezionare un collegamento per visualizzare le istruzioni di installazione per ogni esempio:
Per altre informazioni, vedere le informazioni di riferimento su Speech SDK per Objective-C.
Usare un endpoint personalizzato
Con il riconoscimento vocale personalizzato è possibile caricare i propri dati, testare ed eseguire il training di un modello personalizzato, confrontare l'accuratezza dei modelli e distribuire un modello in un endpoint personalizzato. Nell'esempio seguente viene illustrato come impostare un endpoint personalizzato:
let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);
Eseguire e usare un contenitore
I contenitori del servizio Voce forniscono API di endpoint di query basate su WebSocket a cui si accede tramite Speech SDK e l'interfaccia della riga di comando di Voce. Per impostazione predefinita, l'SDK e l'interfaccia della riga di comando di Voce usano il servizio Voce pubblico. Per usare il contenitore, è necessario modificare il metodo di inizializzazione. Usare un URL host del contenitore invece di chiave e area.
Per ulteriori informazioni sui contenitori, vedere URL host in Installare ed eseguire contenitori di Voce con Docker.
Documentazione di riferimento | Pacchetto (PyPi) | Ulteriori esempi in GitHub
Questa guida pratica illustra come usare Voce di Azure AI per la conversione del testo in tempo reale. Il riconoscimento vocale in tempo reale è ideale per le applicazioni che richiedono trascrizioni immediate, ad esempio dettatura, assistenza di call center e didascalia per le riunioni live.
Per informazioni su come configurare l'ambiente per un'applicazione di esempio, vedere Guida introduttiva: Riconoscere e convertire la voce in testo.
Creare un'istanza di configurazione del riconoscimento vocale
Per chiamare il servizio Voce con Speech SDK, è necessario creare un'istanza di SpeechConfig
. Questa classe include informazioni sulla sottoscrizione, ad esempio la chiave vocale e l'area associata, l'endpoint, l'host o il token di autorizzazione.
- Creare una risorsa Voce nel portale di Azure. Ottenere la chiave e l'area della risorsa Voce.
- Creare un'istanza di
SpeechConfig
usando il codice seguente. SostituireYourSpeechKey
eYourSpeechRegion
con la chiave e l'area della risorsa Voce.
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
È possibile inizializzare SpeechConfig
in altri modi:
- Usare un enpoint e passarlo un endpoint del servizio Voce. La chiave vocale e il token di autorizzazione sono facoltativi.
- Usare un host e passarlo in un indirizzo host. La chiave vocale e il token di autorizzazione sono facoltativi.
- Usare un token di autorizzazione con l'area o la località associata.
Nota
Sia che si esegua il riconoscimento vocale, la sintesi vocale, la traduzione o il riconoscimento finalità, è sempre necessario creare una configurazione.
Riconoscimento vocale da un microfono
Per effettuare il riconoscimento vocale usando il microfono del dispositivo, creare un'istanza SpeechRecognizer
senza passare AudioConfig
, quindi passare speech_config
:
import azure.cognitiveservices.speech as speechsdk
def from_mic():
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
print("Speak into your microphone.")
speech_recognition_result = speech_recognizer.recognize_once_async().get()
print(speech_recognition_result.text)
from_mic()
Se si vuole usare un dispositivo di input audio specifico, è necessario specificare l'ID del dispositivo in AudioConfig
e passarlo al parametro audio_config
del costruttore di SpeechRecognizer
. Per informazioni su come ottenere l'ID dispositivo, vedere Selezionare un dispositivo di input audio con Speech SDK.
Riconoscimento vocale da un file
Se si vuole specificare un file audio invece di usare un microfono per il riconoscimento vocale, è comunque necessario creare un’istanza AudioConfig
e usare il parametro filename
.
import azure.cognitiveservices.speech as speechsdk
def from_file():
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
audio_config = speechsdk.AudioConfig(filename="your_file_name.wav")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
speech_recognition_result = speech_recognizer.recognize_once_async().get()
print(speech_recognition_result.text)
from_file()
Gestione degli errori
Gli esempi precedenti ottengono semplicemente il testo riconosciuto dalla proprietà speech_recognition_result.text
. Per gestire gli errori e altre risposte, è necessario scrivere codice per gestire il risultato. Il seguente codice valuta la proprietà speech_recognition_result.reason
e:
- Stampa il risultato del riconoscimento:
speechsdk.ResultReason.RecognizedSpeech
. - Se non esiste una corrispondenza di riconoscimento, informa l'utente:
speechsdk.ResultReason.NoMatch
. - Se viene rilevato un errore, stampa il messaggio di errore:
speechsdk.ResultReason.Canceled
.
if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech:
print("Recognized: {}".format(speech_recognition_result.text))
elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch:
print("No speech could be recognized: {}".format(speech_recognition_result.no_match_details))
elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = speech_recognition_result.cancellation_details
print("Speech Recognition canceled: {}".format(cancellation_details.reason))
if cancellation_details.reason == speechsdk.CancellationReason.Error:
print("Error details: {}".format(cancellation_details.error_details))
print("Did you set the speech resource key and region values?")
Usare il riconoscimento continuo
Gli esempi precedenti usano il riconoscimento singolo, che riconosce una singola espressione. La fine di una singola espressione viene determinata restando in ascolto del silenzio al termine o finché non vengono elaborati al massimo 15 secondi di audio.
Al contrario, si usa il riconoscimento continuo quando si vuole controllare il momento in cui interrompere il riconoscimento. Esso richiede la connessione a EventSignal
per ottenere i risultati del riconoscimento. Per interrompere il riconoscimento, è necessario chiamare stop_continuous_recognition() o stop_continuous_recognition_async(). Ecco un esempio di riconoscimento continuo eseguito su un file di input audio.
Per iniziare, definire l'input e inizializzare un SpeechRecognizer
:
audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
Successivamente, creare una variabile per gestire lo stato del riconoscimento vocale. Impostare la variabile su False
perché all'inizio del riconoscimento, si può presupporre che non sia terminato.
done = False
A questo punto, creare un callback per arrestare il riconoscimento continuo quando si riceve evt
. Tieni in considerazione i seguenti punti:
- Quando si riceve
evt
, viene stampato il messaggioevt
. - Dopo la ricezione di
evt
, viene effettuata una chiamata a stop_continuous_recognition () per arrestare il riconoscimento. - Lo stato del riconoscimento cambia in
True
.
def stop_cb(evt):
print('CLOSING on {}'.format(evt))
speech_recognizer.stop_continuous_recognition()
nonlocal done
done = True
L’esempio di codice seguente mostra come connettere i callback agli eventi inviati da SpeechRecognizer
. Gli eventi sono:
recognizing
: segnale per gli eventi contenenti i risultati del riconoscimento intermedio.recognized
: segnale per gli eventi contenenti i risultati finali del riconoscimento, che indicano un tentativo di riconoscimento riuscito.session_started
: segnale per gli eventi che indicano l’inizio di una sessione di riconoscimento (operazione).session_stopped
: segnale per gli eventi che indicano la fine di una sessione di riconoscimento (operazione).canceled
: segnale per gli eventi che contengono risultati di riconoscimento annullati. Questi risultati indicano un tentativo di riconoscimento annullato in seguito a una richiesta di annullamento diretto. In alternativa, indicano un errore di trasporto o protocollo.
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))
speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)
Con tutte le impostazioni configurate, è possibile chiamare start_continuous_recognition ():
speech_recognizer.start_continuous_recognition()
while not done:
time.sleep(.5)
Modificare la lingua di origine
Un'attività comune per il riconoscimento vocale è la specifica della lingua di input (o di origine). Il seguente esempio mostra come modificare la lingua di input in tedesco. Nel codice trovare l'istanza SpeechConfig
e aggiungere questa riga direttamente sotto di essa:
speech_config.speech_recognition_language="de-DE"
speech_recognition_language
è un parametro che accetta una stringa come argomento. Per un elenco delle impostazioni locali supportate, vedere Lingua e supporto vocale per il servizio Voce.
Identificazione della lingua
È possibile usare l'identificazione della lingua con il riconoscimento vocale quando è necessario identificare la lingua in un'origine audio e quindi trascriverla in testo.
Per un esempio di codice completo, vedere Identificazione della lingua.
Usare un endpoint personalizzato
Con il riconoscimento vocale personalizzato è possibile caricare i propri dati, testare ed eseguire il training di un modello personalizzato, confrontare l'accuratezza dei modelli e distribuire un modello in un endpoint personalizzato. Nell'esempio seguente viene illustrato come impostare un endpoint personalizzato.
speech_config = speechsdk.SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
Eseguire e usare un contenitore
I contenitori del servizio Voce forniscono API di endpoint di query basate su WebSocket a cui si accede tramite Speech SDK e l'interfaccia della riga di comando di Voce. Per impostazione predefinita, l'SDK e l'interfaccia della riga di comando di Voce usano il servizio Voce pubblico. Per usare il contenitore, è necessario modificare il metodo di inizializzazione. Usare un URL host del contenitore invece di chiave e area.
Per ulteriori informazioni sui contenitori, vedere URL host in Installare ed eseguire contenitori di Voce con Docker.
Segmentazione semantica
La segmentazione semantica è una strategia di segmentazione del riconoscimento vocale progettata per attenuare i problemi associati alla segmentazione basata sul silenzio:
- Under-segmentation: quando gli utenti parlano per molto tempo senza pause, possono vedere una lunga sequenza di testo senza interruzioni ("muro di testo"), che degrada gravemente l'esperienza di leggibilità.
- Over-segmentation: quando un utente si sospende per un breve periodo di tempo, il meccanismo di rilevamento del silenzio può segmentare in modo errato.
Invece di basarsi sui timeout del silenzio, i segmenti di segmentazione semantica e restituisce i risultati finali quando rileva la punteggiatura finale della frase ,ad esempio '.' o '?'. Ciò migliora l'esperienza utente con segmenti di qualità superiore, semanticamente completi e impedisce risultati intermedi lunghi.
Per usare la segmentazione semantica, è necessario impostare la proprietà seguente nell'istanza SpeechConfig
usata per creare un oggetto SpeechRecognizer
:
speech_config.set_property(speechsdk.PropertyId.Speech_SegmentationStrategy, "Semantic")
Di seguito sono riportate alcune limitazioni della segmentazione semantica:
- Per usare la segmentazione semantica, è necessario Speech SDK versione 1.41 o successiva.
- La segmentazione semantica è destinata solo all'uso nel riconoscimento continuo. Sono inclusi scenari come la trascrizione e la didascalia. Non deve essere usato nella modalità di riconoscimento e dettatura singola.
- La segmentazione semantica non è disponibile per tutte le lingue e le impostazioni locali. Attualmente, la segmentazione semantica è disponibile solo per le impostazioni locali inglese (en), ad esempio en-US, en-GB, en-IN e en-AU.
- La segmentazione semantica non supporta ancora i punteggi di attendibilità e gli elenchi NBest. Di conseguenza, non è consigliabile segmentare semantica se si usano punteggi di attendibilità o elenchi NBest.
Informazioni di riferimento sull'API REST di riconoscimento vocale | Informazioni di riferimento sull'API REST di riconoscimento vocale per audio brevi | Ulteriori esempi in GitHub
Questa guida pratica illustra come usare Voce di Azure AI per la conversione del testo in tempo reale. Il riconoscimento vocale in tempo reale è ideale per le applicazioni che richiedono trascrizioni immediate, ad esempio dettatura, assistenza di call center e didascalia per le riunioni live.
Per informazioni su come configurare l'ambiente per un'applicazione di esempio, vedere Guida introduttiva: Riconoscere e convertire la voce in testo.
Convertire il parlato in testo
Al prompt dei comandi, eseguire questo comando. Inserire i valori seguenti nel comando:
- La chiave di sottoscrizione per la risorsa Voce
- L'area del servizio Voce
- Il percorso del file audio di input
curl --location --request POST 'https://INSERT_REGION_HERE.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: audio/wav' \
--data-binary @'INSERT_AUDIO_FILE_PATH_HERE'
Verrà restituita una risposta simile all'esempio seguente:
{
"RecognitionStatus": "Success",
"DisplayText": "My voice is my passport, verify me.",
"Offset": 6600000,
"Duration": 32100000
}
Per altre informazioni, vedere la documentazione di riferimento dell'API REST di riconoscimento vocale.
Questa guida pratica illustra come usare Voce di Azure AI per la conversione del testo in tempo reale. Il riconoscimento vocale in tempo reale è ideale per le applicazioni che richiedono trascrizioni immediate, ad esempio dettatura, assistenza di call center e didascalia per le riunioni live.
Per informazioni su come configurare l'ambiente per un'applicazione di esempio, vedere Guida introduttiva: Riconoscere e convertire la voce in testo.
Riconoscimento vocale da un microfono
Collegare e accendere il microfono del PC. Disattiva tutte le app che potrebbero usare il microfono. Alcuni computer dispongono di un microfono incorporato, mentre altri richiedono la configurazione di un dispositivo Bluetooth.
A questo punto si è pronti per eseguire l'interfaccia della riga di comando vocale per Voce al fine di utilizzare il riconoscimento vocale dal microfono. Dalla riga di comando passare alla directory che contiene il file binario dell'interfaccia della riga di comando per Voce. Poi eseguire quindi il comando seguente.
spx recognize --microphone
Nota
La lingua predefinita dell'interfaccia della riga di comando per Voce è l’inglese. È possibile scegliere una lingua diversa dalla tabella Riconoscimento vocale. Ad esempio, aggiungere --source de-DE
per il riconoscimento vocale in tedesco.
Parlare nel microfono ed è possibile vedere la trascrizione delle parole in testo in tempo reale. L'interfaccia della riga di comando di Voce si arresta dopo un periodo di silenzio o quando si seleziona CTRL+C.
Riconoscimento vocale da un file
L'interfaccia della riga di comando per Voce può eseguire il riconoscimento vocale in molti formati di file e linguaggi naturali. In questo esempio è possibile usare un file .wav (16 kHz o 8 kHz, a 16 bit e PCM mono) che contiene la voce in lingua inglese. In alternativa, se si vuole un esempio rapido, scaricare il file whatstheweatherlike.wav e copiarlo nella stessa directory del file binario dell'interfaccia della riga di comando di Voce.
Usare il comando seguente per eseguire l'interfaccia della riga di comando di Voce per riconoscere la voce presente nel file audio:
spx recognize --file whatstheweatherlike.wav
Nota
La lingua predefinita dell'interfaccia della riga di comando per Voce è l’inglese. È possibile scegliere una lingua diversa dalla tabella Riconoscimento vocale. Ad esempio, aggiungere --source de-DE
per il riconoscimento vocale in tedesco.
L'interfaccia della riga di comando per Voce mostra una trascrizione testuale della voce sullo schermo.
Eseguire e usare un contenitore
I contenitori del servizio Voce forniscono API di endpoint di query basate su WebSocket a cui si accede tramite Speech SDK e l'interfaccia della riga di comando di Voce. Per impostazione predefinita, l'SDK e l'interfaccia della riga di comando di Voce usano il servizio Voce pubblico. Per usare il contenitore, è necessario modificare il metodo di inizializzazione. Usare un URL host del contenitore invece di chiave e area.
Per ulteriori informazioni sui contenitori, vedere URL host in Installare ed eseguire contenitori di Voce con Docker.