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 per l'identificazione della lingua (LID) 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 convertirla in un'altra lingua.

Per il riconoscimento vocale, la latenza iniziale è superiore con l'identificazione della lingua. È consigliabile includere questa funzionalità facoltativa solo in base alle esigenze.

Impostare le opzioni di configurazione

Sia che si usi l'identificazione della lingua con il riconoscimento vocale o con la traduzione vocale, esistono alcuni concetti e opzioni di configurazione comuni.

Si effettua quindi una richiesta di riconoscimento una sola volta o di riconoscimento continuo al servizio Voce.

Importante

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

Questo articolo fornisce frammenti di codice per descrivere i concetti. Vengono forniti collegamenti a esempi completi per ogni caso d'uso.

Lingue candidate

Specificare le lingue candidate con l'oggetto AutoDetectSourceLanguageConfig . Ci si aspetta che almeno uno dei candidati si trovi nell'audio. È possibile includere fino a quattro lingue per IL COPERCHIo all'avvio o fino a 10 lingue per IL COPERCHIo continuo. Il servizio Voce restituisce una delle lingue candidate fornite anche se tali lingue non erano presenti nell'audio. Ad esempio, se fr-FR (francese) e en-US (inglese) vengono forniti come candidati, ma il tedesco è parlato, il servizio restituisce fr-FR o en-US.

È necessario specificare le impostazioni locali complete con il separatore trattino (-), ma l'identificazione della lingua usa solo una lingua per ogni lingua di base. Non includere più impostazioni locali per la stessa lingua, en-US ad esempio 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 continua e iniziale

Il riconoscimento vocale supporta sia l'identificazione della lingua iniziale che quella continua (LID).

Nota

L'identificazione continua del linguaggio è supportata solo con gli SDK voce in C#, C++, Java (solo per la sintesi vocale), JavaScript (solo per la sintesi vocale) e Python.

  • All'inizio LID identifica la lingua una volta entro i primi secondi di audio. Usa IL COPERCHIo all'avvio se la lingua nell'audio non cambia. Con IL COPERCHIo all'inizio, viene rilevata una singola lingua e restituita in meno di 5 secondi.
  • Il coperchio continuo può identificare più lingue durante l'audio. Utilizzare il coperchio continuo se la lingua nell'audio potrebbe cambiare. Il coperchio continuo non supporta la modifica delle lingue all'interno della stessa frase. Ad esempio, se si parla principalmente lo spagnolo e si inseriscono alcune parole in inglese, non viene rilevata la modifica della lingua per parola.

È possibile implementare il coperchio all'avvio o il coperchio continuo chiamando i metodi per riconoscere una volta o continuo. Il coperchio continuo è supportato solo con il riconoscimento continuo.

Riconoscere una sola volta o continuo

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

Nota

Non confondere il riconoscimento con l'identificazione. Il riconoscimento può essere usato con o senza identificazione della lingua.

Chiamare il metodo "recognize once" o avviare e arrestare i metodi di riconoscimento continuo. È possibile scegliere tra:

  • Riconosci una volta con COPERCHIo all'avvio. Il coperchio continuo non è supportato per il riconoscimento una sola volta.
  • Usare il riconoscimento continuo con IL COPERCHIo all'avvio.
  • Utilizzare il riconoscimento continuo con COPERCHIo continuo.

La SpeechServiceConnection_LanguageIdMode proprietà è necessaria solo per il coperchio continuo. Senza di esso, il servizio Voce viene impostato per impostazione predefinita su LID all'avvio. I valori supportati sono AtStart per IL COPERCHIo all'avvio o Continuous per IL COPERCHIo 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 vocale per il riconoscimento del testo quando è necessario identificare la lingua in un'origine audio e quindi trascriverla in testo. Per altre informazioni, vedere Cenni preliminari sul riconoscimento vocale.

Nota

Il riconoscimento vocale con l'identificazione del linguaggio iniziale è supportato con Gli SDK voce in C#, C++, Python, Java, JavaScript e Objective-C. Il riconoscimento vocale con identificazione continua del linguaggio è supportato solo con gli SDK voce in C#, C++, Java, JavaScript e Python.

Attualmente per il riconoscimento vocale con l'identificazione della lingua continua, è 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 non è necessario impostarla.

Vedere altri esempi di riconoscimento vocale con identificazione della lingua 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;
}

Vedere altri esempi di riconoscimento vocale con identificazione della lingua 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;

Vedere altri esempi di riconoscimento vocale con identificazione della lingua 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();

Vedere altri esempi di riconoscimento vocale con identificazione della lingua 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 la sintesi vocale in tempo reale e la traduzione vocale. La trascrizione batch supporta solo il rilevamento della lingua per i modelli di base predefiniti.

Questo esempio illustra come usare il rilevamento della lingua con un endpoint personalizzato. Se la lingua rilevata è en-US, l'esempio usa il modello predefinito. Se la lingua rilevata è fr-FR, l'esempio usa l'endpoint del modello personalizzato. Per altre informazioni, vedere Distribuire un modello di riconoscimento vocale 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 illustra come usare il rilevamento della lingua con un endpoint personalizzato. Se la lingua rilevata è en-US, l'esempio usa il modello predefinito. Se la lingua rilevata è fr-FR, l'esempio usa l'endpoint del modello personalizzato. Per altre informazioni, vedere Distribuire un modello di riconoscimento vocale 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 illustra come usare il rilevamento della lingua con un endpoint personalizzato. Se la lingua rilevata è en-US, l'esempio usa il modello predefinito. Se la lingua rilevata è fr-FR, l'esempio usa l'endpoint del modello personalizzato. Per altre informazioni, vedere Distribuire un modello di riconoscimento vocale 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 illustra come usare il rilevamento della lingua con un endpoint personalizzato. Se la lingua rilevata è en-US, l'esempio usa il modello predefinito. Se la lingua rilevata è fr-FR, l'esempio usa l'endpoint del modello personalizzato. Per altre informazioni, vedere Distribuire un modello di riconoscimento vocale 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 illustra come usare il rilevamento della lingua con un endpoint personalizzato. Se la lingua rilevata è en-US, l'esempio usa il modello predefinito. Se la lingua rilevata è fr-FR, l'esempio usa l'endpoint del modello personalizzato. Per altre informazioni, vedere Distribuire un modello di riconoscimento vocale 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 è necessario identificare la lingua in un'origine audio e quindi convertirla in un'altra lingua. Per altre informazioni, vedere Cenni preliminari sulla traduzione vocale.

Nota

La traduzione vocale con identificazione del linguaggio è supportata solo con gli SDK voce 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 non è necessario impostarla.

Vedere altri esempi di traduzione vocale con identificazione della lingua 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}");
            }
        }
    }
}

Vedere altri esempi di traduzione vocale con identificazione della lingua 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;
    }
}

Vedere altri esempi di traduzione vocale con identificazione della lingua 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 voce forniscono API 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, Speech 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 anziché una chiave e un'area.

Quando si esegue l'ID lingua in un contenitore, usare l'oggetto SourceLanguageRecognizer anziché SpeechRecognizer o TranslationRecognizer.

Per altre informazioni sui contenitori, vedere la guida pratica ai contenitori di riconoscimento vocale di identificazione della lingua.

Implementare la trascrizione in batch di riconoscimento vocale

Per identificare i linguaggi con l'API REST di trascrizione batch, usare languageIdentification la proprietà nel corpo della richiesta di Transcriptions_Create .

Avviso

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

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

Nell'esempio seguente viene illustrato l'utilizzo della languageIdentification proprietà 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"
            ]
        },	
        <...>
    }
}