Implementare l'identificazione della lingua

L'identificazione della lingua viene usata per identificare le lingue parlate nell'audio rispetto a un elenco di lingue supportate.

I casi d'uso di identificazione della lingua includono:

  • Riconoscimento vocale, quando è necessario identificare la lingua in un'origine audio e quindi trascriverla in testo.
  • Traduzione vocale, quando è necessario identificare la lingua in un'origine audio e quindi tradurla in un'altra lingua.

Per il riconoscimento vocale la latenza iniziale è più elevata con l'identificazione della lingua. È consigliabile includere questa funzionalità facoltativa solo se necessaria.

Impostare le opzioni di configurazione

Se si usa l'identificazione della lingua con riconoscimento vocale o con traduzione vocale, esistono alcuni concetti e opzioni di configurazione comuni.

Si effettua quindi una richiesta al servizio Voce, di eseguire il riconoscimento per una sola volta o in modo continuo.

Importante

Le API di identificazione della lingua sono state semplificate con Speech SDK versione 1.25 e successive. Le proprietà SpeechServiceConnection_SingleLanguageIdPriority e SpeechServiceConnection_ContinuousLanguageIdPriority sono state rimosse. Li sostituisce una singola proprietà SpeechServiceConnection_LanguageIdMode. Non è più necessario assegnare la priorità tra bassa latenza e accuratezza elevata. Per riconoscimento vocale o traduzione in modo continuo, è sufficiente scegliere tra eseguire l'identificazione della lingua in modo continuo o all'avvio.

Per descrivere i concetti, questo articolo fornisce frammenti di codice. Vengono forniti collegamenti a esempi completi per ciascun caso d'uso.

Lingue candidate

Indicare le lingue candidate con l'oggetto AutoDetectSourceLanguageConfig. Si prevede che l’audio contenga almeno una delle lingue candidate. È possibile includere fino a quattro lingue per LID all'avvio o fino a 10 lingue per LID in modo continuo. Il servizio Voce restituisce una delle lingue candidate indicate anche se tali lingue non erano presenti nell'audio. Ad esempio, se le lingue candidate indicate sono fr-FR (francese) e en-US (inglese), e tuttavia è parlato il tedesco, il servizio restituisce fr-FR o en-US.

Benché sia necessario specificare le impostazioni locali complete con il separatore (-), l'identificazione della lingua usa solo un’impostazione locale per lingua di base. Non includere più impostazioni locali per una stessa lingua, ad esempio en-US e en-GB.

var autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "de-DE", "zh-CN" });
auto autoDetectSourceLanguageConfig = 
    AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "de-DE", "zh-CN" });
auto_detect_source_language_config = \
    speechsdk.languageconfig.AutoDetectSourceLanguageConfig(languages=["en-US", "de-DE", "zh-CN"])
AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig.fromLanguages(Arrays.asList("en-US", "de-DE", "zh-CN"));
var autoDetectSourceLanguageConfig = SpeechSDK.AutoDetectSourceLanguageConfig.fromLanguages([("en-US", "de-DE", "zh-CN"]);
NSArray *languages = @[@"en-US", @"de-DE", @"zh-CN"];
SPXAutoDetectSourceLanguageConfiguration* autoDetectSourceLanguageConfig = \
    [[SPXAutoDetectSourceLanguageConfiguration alloc]init:languages];

Per altre informazioni, vedere Lingue supportate.

Identificazione della lingua all'avvio e in modo continuo

Il servizio Voce supporta l'identificazione della lingua all'avvio e in modo continuo.

Nota

L'identificazione in modo continuo della lingua è supportata solo con SDK voce in C#, C++, Java (solo per il riconoscimento vocale), JavaScript (solo per il riconoscimento vocale) e Python.

  • LID all’avvio identifica la lingua una sola volta entro i primi secondi di audio. Usare il LID all'avvio se la lingua nell'audio non cambia. LID all’avvio rileva una singola lingua in meno di 5 secondi.
  • LID in modo continuo è in grado di identificare più lingue nel corso dell’audio. Utilizzare il LID in modo continuo se vi è la possibilità di modifiche di lingua nell’audio. LID in modo continuo non supporta la modifica della lingua in una stessa frase. Ad esempio, se si parla principalmente lo spagnolo e si inseriscono alcune parole in inglese, non viene rilevata la modifica della lingua in base alla parola.

È possibile implementare il LID all'avvio o in modo continuo chiamando i metodi per riconoscere una sola volta o in modo continuo. L'identificazione della lingua in modo continuo è supportato solo con riconoscimento in modo continuo.

Riconoscimento singolo o in modo continuo

L'identificazione della lingua è completata da oggetti e operazioni di riconoscimento. Effettuare una richiesta al servizio Voce per il riconoscimento dell'audio.

Nota

Non confondere il riconoscimento con l'identificazione. È possibile usare il riconoscimento con o senza identificazione della lingua.

Chiamare il metodo "riconosci una sola volta" o avviare e arrestare i metodi di riconoscimento in modo continuo. È possibile scegliere tra:

  • Riconoscimento singolo con identificazione della lingua all'avvio. LID in modo continuo non è supportato per riconosci una sola volta.
  • Usare il riconoscimento in modo continuo con LID all'avvio.
  • Utilizzare il riconoscimento in modo continuo con LID continuo.

La proprietà SpeechServiceConnection_LanguageIdMode è necessaria solo per il LID in modo continuo. Senza di essa, il servizio Voce viene impostato su LID all'avvio per impostazione predefinita. Sono supportati i valori AtStart per LID all’avvio o Continuous per LID in modo continuo.

// Recognize once with At-start LID. Continuous LID isn't supported for recognize once.
var result = await recognizer.RecognizeOnceAsync();

// Start and stop continuous recognition with At-start LID
await recognizer.StartContinuousRecognitionAsync();
await recognizer.StopContinuousRecognitionAsync();

// Start and stop continuous recognition with Continuous LID
speechConfig.SetProperty(PropertyId.SpeechServiceConnection_LanguageIdMode, "Continuous");
await recognizer.StartContinuousRecognitionAsync();
await recognizer.StopContinuousRecognitionAsync();
// Recognize once with At-start LID. Continuous LID isn't supported for recognize once.
auto result = recognizer->RecognizeOnceAsync().get();

// Start and stop continuous recognition with At-start LID
recognizer->StartContinuousRecognitionAsync().get();
recognizer->StopContinuousRecognitionAsync().get();

// Start and stop continuous recognition with Continuous LID
speechConfig->SetProperty(PropertyId::SpeechServiceConnection_LanguageIdMode, "Continuous");
recognizer->StartContinuousRecognitionAsync().get();
recognizer->StopContinuousRecognitionAsync().get();
// Recognize once with At-start LID. Continuous LID isn't supported for recognize once.
SpeechRecognitionResult  result = recognizer->RecognizeOnceAsync().get();

// Start and stop continuous recognition with At-start LID
recognizer.startContinuousRecognitionAsync().get();
recognizer.stopContinuousRecognitionAsync().get();

// Start and stop continuous recognition with Continuous LID
speechConfig.setProperty(PropertyId.SpeechServiceConnection_LanguageIdMode, "Continuous");
recognizer.startContinuousRecognitionAsync().get();
recognizer.stopContinuousRecognitionAsync().get();
# Recognize once with At-start LID. Continuous LID isn't supported for recognize once.
result = recognizer.recognize_once()

# Start and stop continuous recognition with At-start LID
recognizer.start_continuous_recognition()
recognizer.stop_continuous_recognition()

# Start and stop continuous recognition with Continuous LID
speech_config.set_property(property_id=speechsdk.PropertyId.SpeechServiceConnection_LanguageIdMode, value='Continuous')
recognizer.start_continuous_recognition()
recognizer.stop_continuous_recognition()

Usa riconoscimento vocale

Usare il riconoscimento per conversione della voce in testo scritto quando è necessario identificare una lingua in un'origine audio e quindi trascriverla in testo. Per altre informazioni, vedere la panoramica del riconoscimento vocale.

Nota

Il riconoscimento vocale con identificazione della lingua all'avvio è supportato con gli SDK del servizio Voce in C#, C++, Python, Java, JavaScript e Objective-C. Il riconoscimento vocale con identificazione della lingua in modo continuo è supportato solo con gli SDK del servizio Voce in C#, C++, Java, JavaScript e Python.

Attualmente per il riconoscimento vocale con identificazione della lingua in modo continuo, è necessario creare un oggetto SpeechConfig dalla stringa dall'endpoint wss://{region}.stt.speech.microsoft.com/speech/universal/v2, come illustrato negli esempi di codice. In una versione futura dell'SDK tale operazione non sarà più necessaria.

Altri esempi di riconoscimento vocale con identificazione della lingua sono disponibili in GitHub.

using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey","YourServiceRegion");

var autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig.FromLanguages(
        new string[] { "en-US", "de-DE", "zh-CN" });

using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
using (var recognizer = new SpeechRecognizer(
    speechConfig,
    autoDetectSourceLanguageConfig,
    audioConfig))
{
    var speechRecognitionResult = await recognizer.RecognizeOnceAsync();
    var autoDetectSourceLanguageResult =
        AutoDetectSourceLanguageResult.FromResult(speechRecognitionResult);
    var detectedLanguage = autoDetectSourceLanguageResult.Language;
}

Altri esempi di riconoscimento vocale con identificazione della lingua sono disponibili in GitHub.

using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Audio;

auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey","YourServiceRegion");

auto autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "de-DE", "zh-CN" });

auto recognizer = SpeechRecognizer::FromConfig(
    speechConfig,
    autoDetectSourceLanguageConfig
    );

speechRecognitionResult = recognizer->RecognizeOnceAsync().get();
auto autoDetectSourceLanguageResult =
    AutoDetectSourceLanguageResult::FromResult(speechRecognitionResult);
auto detectedLanguage = autoDetectSourceLanguageResult->Language;

Altri esempi di riconoscimento vocale con identificazione della lingua sono disponibili in GitHub.

AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig.fromLanguages(Arrays.asList("en-US", "de-DE"));

SpeechRecognizer recognizer = new SpeechRecognizer(
    speechConfig,
    autoDetectSourceLanguageConfig,
    audioConfig);

Future<SpeechRecognitionResult> future = recognizer.recognizeOnceAsync();
SpeechRecognitionResult result = future.get(30, TimeUnit.SECONDS);
AutoDetectSourceLanguageResult autoDetectSourceLanguageResult =
    AutoDetectSourceLanguageResult.fromResult(result);
String detectedLanguage = autoDetectSourceLanguageResult.getLanguage();

recognizer.close();
speechConfig.close();
autoDetectSourceLanguageConfig.close();
audioConfig.close();
result.close();

Altri esempi di riconoscimento vocale con identificazione della lingua sono disponibili in GitHub.

auto_detect_source_language_config = \
        speechsdk.languageconfig.AutoDetectSourceLanguageConfig(languages=["en-US", "de-DE"])
speech_recognizer = speechsdk.SpeechRecognizer(
        speech_config=speech_config, 
        auto_detect_source_language_config=auto_detect_source_language_config, 
        audio_config=audio_config)
result = speech_recognizer.recognize_once()
auto_detect_source_language_result = speechsdk.AutoDetectSourceLanguageResult(result)
detected_language = auto_detect_source_language_result.language
NSArray *languages = @[@"en-US", @"de-DE", @"zh-CN"];
SPXAutoDetectSourceLanguageConfiguration* autoDetectSourceLanguageConfig = \
        [[SPXAutoDetectSourceLanguageConfiguration alloc]init:languages];
SPXSpeechRecognizer* speechRecognizer = \
        [[SPXSpeechRecognizer alloc] initWithSpeechConfiguration:speechConfig
                           autoDetectSourceLanguageConfiguration:autoDetectSourceLanguageConfig
                                              audioConfiguration:audioConfig];
SPXSpeechRecognitionResult *result = [speechRecognizer recognizeOnce];
SPXAutoDetectSourceLanguageResult *languageDetectionResult = [[SPXAutoDetectSourceLanguageResult alloc] init:result];
NSString *detectedLanguage = [languageDetectionResult language];
var autoDetectSourceLanguageConfig = SpeechSDK.AutoDetectSourceLanguageConfig.fromLanguages(["en-US", "de-DE"]);
var speechRecognizer = SpeechSDK.SpeechRecognizer.FromConfig(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speechRecognizer.recognizeOnceAsync((result: SpeechSDK.SpeechRecognitionResult) => {
        var languageDetectionResult = SpeechSDK.AutoDetectSourceLanguageResult.fromResult(result);
        var detectedLanguage = languageDetectionResult.language;
},
{});

Modelli personalizzati di riconoscimento vocale

Nota

Il rilevamento della lingua con modelli personalizzati può essere usato solo con riconoscimento vocale e traduzione vocale in tempo reale. La trascrizione batch supporta solo il rilevamento della lingua per modelli di base predefiniti.

Questo esempio mostra come usare il rilevamento della lingua con un endpoint personalizzato. Se viene rilevata la lingua en-US, l'esempio usa il modello predefinito. Se viene rilevata la lingua fr-FR, l'esempio usa l'endpoint del modello personalizzato. Per altre informazioni, vedere Distribuire un modello conversione voce/testo personalizzato.

var sourceLanguageConfigs = new SourceLanguageConfig[]
{
    SourceLanguageConfig.FromLanguage("en-US"),
    SourceLanguageConfig.FromLanguage("fr-FR", "The Endpoint Id for custom model of fr-FR")
};
var autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig.FromSourceLanguageConfigs(
        sourceLanguageConfigs);

Questo esempio mostra come usare il rilevamento della lingua con un endpoint personalizzato. Se viene rilevata la lingua en-US, l'esempio usa il modello predefinito. Se viene rilevata la lingua fr-FR, l'esempio usa l'endpoint del modello personalizzato. Per altre informazioni, vedere Distribuire un modello conversione voce/testo personalizzato.

std::vector<std::shared_ptr<SourceLanguageConfig>> sourceLanguageConfigs;
sourceLanguageConfigs.push_back(
    SourceLanguageConfig::FromLanguage("en-US"));
sourceLanguageConfigs.push_back(
    SourceLanguageConfig::FromLanguage("fr-FR", "The Endpoint Id for custom model of fr-FR"));

auto autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig::FromSourceLanguageConfigs(
        sourceLanguageConfigs);

Questo esempio mostra come usare il rilevamento della lingua con un endpoint personalizzato. Se viene rilevata la lingua en-US, l'esempio usa il modello predefinito. Se viene rilevata la lingua fr-FR, l'esempio usa l'endpoint del modello personalizzato. Per altre informazioni, vedere Distribuire un modello conversione voce/testo personalizzato.

List sourceLanguageConfigs = new ArrayList<SourceLanguageConfig>();
sourceLanguageConfigs.add(
    SourceLanguageConfig.fromLanguage("en-US"));
sourceLanguageConfigs.add(
    SourceLanguageConfig.fromLanguage("fr-FR", "The Endpoint Id for custom model of fr-FR"));

AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig.fromSourceLanguageConfigs(
        sourceLanguageConfigs);

Questo esempio mostra come usare il rilevamento della lingua con un endpoint personalizzato. Se viene rilevata la lingua en-US, l'esempio usa il modello predefinito. Se viene rilevata la lingua fr-FR, l'esempio usa l'endpoint del modello personalizzato. Per altre informazioni, vedere Distribuire un modello conversione voce/testo personalizzato.

 en_language_config = speechsdk.languageconfig.SourceLanguageConfig("en-US")
 fr_language_config = speechsdk.languageconfig.SourceLanguageConfig("fr-FR", "The Endpoint Id for custom model of fr-FR")
 auto_detect_source_language_config = speechsdk.languageconfig.AutoDetectSourceLanguageConfig(
        sourceLanguageConfigs=[en_language_config, fr_language_config])

Questo esempio mostra come usare il rilevamento della lingua con un endpoint personalizzato. Se viene rilevata la lingua en-US, l'esempio usa il modello predefinito. Se viene rilevata la lingua fr-FR, l'esempio usa l'endpoint del modello personalizzato. Per altre informazioni, vedere Distribuire un modello conversione voce/testo personalizzato.

SPXSourceLanguageConfiguration* enLanguageConfig = [[SPXSourceLanguageConfiguration alloc]init:@"en-US"];
SPXSourceLanguageConfiguration* frLanguageConfig = \
        [[SPXSourceLanguageConfiguration alloc]initWithLanguage:@"fr-FR"
                                                     endpointId:@"The Endpoint Id for custom model of fr-FR"];
NSArray *languageConfigs = @[enLanguageConfig, frLanguageConfig];
SPXAutoDetectSourceLanguageConfiguration* autoDetectSourceLanguageConfig = \
        [[SPXAutoDetectSourceLanguageConfiguration alloc]initWithSourceLanguageConfigurations:languageConfigs];
var enLanguageConfig = SpeechSDK.SourceLanguageConfig.fromLanguage("en-US");
var frLanguageConfig = SpeechSDK.SourceLanguageConfig.fromLanguage("fr-FR", "The Endpoint Id for custom model of fr-FR");
var autoDetectSourceLanguageConfig = SpeechSDK.AutoDetectSourceLanguageConfig.fromSourceLanguageConfigs([enLanguageConfig, frLanguageConfig]);

Eseguire la traduzione vocale

Usare la traduzione vocale quando occorre identificare la lingua in un'origine audio e quindi convertirla in un'altra lingua. Per altre informazioni, vedere panoramica di traduzione vocale.

Nota

La traduzione vocale con identificazione del linguaggio è supportata solo con Speech SDK in C#, C++, JavaScript e Python. Attualmente per la traduzione vocale con identificazione della lingua, è necessario creare un SpeechConfig dalla stringa dell'endpoint wss://{region}.stt.speech.microsoft.com/speech/universal/v2, come illustrato negli esempi di codice. In una versione futura dell'SDK tale operazione non sarà più necessaria.

Altri esempi di traduzione vocale con identificazione della lingua sono disponibili in GitHub.

using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
using Microsoft.CognitiveServices.Speech.Translation;

public static async Task RecognizeOnceSpeechTranslationAsync()
{
    var region = "YourServiceRegion";
    // Currently the v2 endpoint is required. In a future SDK release you won't need to set it.
    var endpointString = $"wss://{region}.stt.speech.microsoft.com/speech/universal/v2";
    var endpointUrl = new Uri(endpointString);

    var config = SpeechTranslationConfig.FromEndpoint(endpointUrl, "YourSubscriptionKey");

    // Source language is required, but currently ignored. 
    string fromLanguage = "en-US";
    speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;

    speechTranslationConfig.AddTargetLanguage("de");
    speechTranslationConfig.AddTargetLanguage("fr");

    var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "de-DE", "zh-CN" });

    using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();

    using (var recognizer = new TranslationRecognizer(
        speechTranslationConfig, 
        autoDetectSourceLanguageConfig,
        audioConfig))
    {

        Console.WriteLine("Say something or read from file...");
        var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

        if (result.Reason == ResultReason.TranslatedSpeech)
        {
            var lidResult = result.Properties.GetProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguageResult);

            Console.WriteLine($"RECOGNIZED in '{lidResult}': Text={result.Text}");
            foreach (var element in result.Translations)
            {
                Console.WriteLine($"    TRANSLATED into '{element.Key}': {element.Value}");
            }
        }
    }
}

Altri esempi di traduzione vocale con identificazione della lingua sono disponibili in GitHub.

auto region = "YourServiceRegion";
// Currently the v2 endpoint is required. In a future SDK release you won't need to set it.
auto endpointString = std::format("wss://{}.stt.speech.microsoft.com/speech/universal/v2", region);
auto config = SpeechTranslationConfig::FromEndpoint(endpointString, "YourSubscriptionKey");

auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "de-DE" });

// Sets source and target languages
// The source language will be detected by the language detection feature. 
// However, the SpeechRecognitionLanguage still need to set with a locale string, but it will not be used as the source language.
// This will be fixed in a future version of Speech SDK.
auto fromLanguage = "en-US";
config->SetSpeechRecognitionLanguage(fromLanguage);
config->AddTargetLanguage("de");
config->AddTargetLanguage("fr");

// Creates a translation recognizer using microphone as audio input.
auto recognizer = TranslationRecognizer::FromConfig(config, autoDetectSourceLanguageConfig);
cout << "Say something...\n";

// Starts translation, and returns after a single utterance is recognized. The end of a
// single utterance is determined by listening for silence at the end or until a maximum of 15
// seconds of audio is processed. The task returns the recognized text as well as the translation.
// Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
// shot recognition like command or query.
// For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
auto result = recognizer->RecognizeOnceAsync().get();

// Checks result.
if (result->Reason == ResultReason::TranslatedSpeech)
{
    cout << "RECOGNIZED: Text=" << result->Text << std::endl;

    for (const auto& it : result->Translations)
    {
        cout << "TRANSLATED into '" << it.first.c_str() << "': " << it.second.c_str() << std::endl;
    }
}
else if (result->Reason == ResultReason::RecognizedSpeech)
{
    cout << "RECOGNIZED: Text=" << result->Text << " (text could not be translated)" << std::endl;
}
else if (result->Reason == ResultReason::NoMatch)
{
    cout << "NOMATCH: Speech could not be recognized." << std::endl;
}
else if (result->Reason == 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;
    }
}

Altri esempi di traduzione vocale con identificazione della lingua sono disponibili in GitHub.

import azure.cognitiveservices.speech as speechsdk
import time
import json

speech_key, service_region = "YourSubscriptionKey","YourServiceRegion"
weatherfilename="en-us_zh-cn.wav"

# set up translation parameters: source language and target languages
# Currently the v2 endpoint is required. In a future SDK release you won't need to set it. 
endpoint_string = "wss://{}.stt.speech.microsoft.com/speech/universal/v2".format(service_region)
translation_config = speechsdk.translation.SpeechTranslationConfig(
    subscription=speech_key,
    endpoint=endpoint_string,
    speech_recognition_language='en-US',
    target_languages=('de', 'fr'))
audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)

# Specify the AutoDetectSourceLanguageConfig, which defines the number of possible languages
auto_detect_source_language_config = speechsdk.languageconfig.AutoDetectSourceLanguageConfig(languages=["en-US", "de-DE", "zh-CN"])

# Creates a translation recognizer using and audio file as input.
recognizer = speechsdk.translation.TranslationRecognizer(
    translation_config=translation_config, 
    audio_config=audio_config,
    auto_detect_source_language_config=auto_detect_source_language_config)

# Starts translation, and returns after a single utterance is recognized. The end of a
# single utterance is determined by listening for silence at the end or until a maximum of 15
# seconds of audio is processed. The task returns the recognition text as result.
# Note: Since recognize_once() returns only a single utterance, it is suitable only for single
# shot recognition like command or query.
# For long-running multi-utterance recognition, use start_continuous_recognition() instead.
result = recognizer.recognize_once()

# Check the result
if result.reason == speechsdk.ResultReason.TranslatedSpeech:
    print("""Recognized: {}
    German translation: {}
    French translation: {}""".format(
        result.text, result.translations['de'], result.translations['fr']))
elif result.reason == speechsdk.ResultReason.RecognizedSpeech:
    print("Recognized: {}".format(result.text))
    detectedSrcLang = result.properties[speechsdk.PropertyId.SpeechServiceConnection_AutoDetectSourceLanguageResult]
    print("Detected Language: {}".format(detectedSrcLang))
elif result.reason == speechsdk.ResultReason.NoMatch:
    print("No speech could be recognized: {}".format(result.no_match_details))
elif result.reason == speechsdk.ResultReason.Canceled:
    print("Translation canceled: {}".format(result.cancellation_details.reason))
    if result.cancellation_details.reason == speechsdk.CancellationReason.Error:
        print("Error details: {}".format(result.cancellation_details.error_details))

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.

Quando si esegue l'identificazione della lingua in un contenitore, usare l'oggetto SourceLanguageRecognizer invece di SpeechRecognizer o TranslationRecognizer.

Per altre informazioni sui contenitori, vedere la guida pratica contenitori di parlato per l’identificazione della lingua.

Implementare riconoscimento vocale/trascrizione batch

Per identificare le lingue con API REST di trascrizione batch, usare la proprietà languageIdentification nel corpo della richiesta di Transcriptions_Create.

Avviso

La trascrizione batch supporta solo l'identificazione della lingua per modelli base predefiniti. Se nella richiesta di trascrizione sono specificati sia l'identificazione della lingua sia un modello personalizzato, il servizio esegue il fallback per usare i modelli base per le lingue candidate specificate. Questo potrebbe comportare risultati di riconoscimento imprevisti.

Se lo scenario di riconoscimento vocale richiede sia l'identificazione della lingua che i modelli personalizzati, usare riconoscimento vocale in tempo reale invece di trascrizione batch.

L’esempio seguente mostra l'utilizzo della proprietà languageIdentification con quattro lingue candidate. Per altre informazioni sulle proprietà della richiesta, vedere Creare una trascrizione batch.

{
    <...>
    
    "properties": {
    <...>
    
        "languageIdentification": {
            "candidateLocales": [
            "en-US",
            "ja-JP",
            "zh-CN",
            "hi-IN"
            ]
        },	
        <...>
    }
}