Compartir vía


Implementación de la identificación del idioma

La identificación del idioma se usa para identificar los idiomas que se hablan en el audio mediante la comparación con una lista de idiomas admitidos.

Entre los casos de uso de identificación de idioma (LID)se incluyen:

  • Reconocimiento con conversión de voz en texto cuando necesite identificar el idioma de un origen de audio y transcribirlo en texto.
  • Traducción de voz cuando necesite identificar el idioma de un origen de audio y traducirlo en otro idioma.

Para el reconocimiento de voz, la latencia inicial es mayor con la identificación del idioma. Solo debe incluir esta característica opcional si es necesario.

Establecer opciones de configuración

Si usa la identificación de idioma con la conversión de voz en texto o con la traducción de voz, hay algunos conceptos y opciones de configuración que son comunes.

A continuación, realice una solicitud de reconocimiento único o de reconocimiento continuo al servicio de voz.

En este artículo se proporcionan fragmentos de código para describir los conceptos. Se proporcionan vínculos a ejemplos completos para cada caso de uso.

Idiomas candidatos

Proporcione idiomas candidatos con el objeto AutoDetectSourceLanguageConfig. Espera que al menos uno de los candidatos esté en el audio. Puede incluir hasta 4 idiomas para la identificación de idioma al principio o hasta 10 idiomas en la identificación de idioma continua. El servicio de voz devuelve uno de los idiomas candidatos proporcionados incluso si esos idiomas no estaban en el audio. Por ejemplo, si fr-FR (francés) e en-US (inglés) se proporcionan como candidatos, pero se habla alemán, el servicio devuelve fr-FR o en-US.

Debe proporcionar el código de la configuración regional completo con un separador de guiones (-), pero la identificación del idioma solo usa una configuración regional por idioma base. No incluya varias configuraciones regionales para el mismo idioma, por ejemplo, en-US y 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];

Para obtener más información, consulte los idiomas admitidos.

Identificación de idioma al principio e identificación continua

El servicio de voz admite ambos tipos de identificación.

Nota:

La identificación continua de idiomas solo se admite con los SDK de Speech en C#, C++, Java (solo de voz en texto), JavaScript (solo de voz en texto) y Python.

  • La identificación de idioma al principio identifica el idioma en los primeros segundos del audio. Use este tipo de identificación si el idioma del audio no va a cambiar. Con la identificación de idioma al principio se detecta un único idioma y se devuelve en menos de 5 segundos.
  • La LID continua puede identificar varios idiomas durante el audio. Use la identificación continua si el idioma puede cambiar durante el transcurso del audio. La identificación continua no admite el cambio de idiomas dentro de la misma frase. Por ejemplo, si está hablando principalmente en español e incluye algunas palabras en inglés, no detecta el cambio de idioma por palabra.

Implemente la identificación al principio o la identificación continua mediante una llamada a métodos para que realicen un reconocimiento único o uno continuo. La identificación de idioma continua solo se admite con el reconocimiento continuo.

Reconocimiento único o continuo

La identificación del idioma se completa con objetos y operaciones de reconocimiento. Realice una solicitud al servicio voz para el reconocimiento de audio.

Nota:

No confunda el reconocimiento con la identificación. El reconocimiento se puede usar con o sin identificación de idioma.

Llame al método de reconocimiento único o a los métodos de inicio y detención del reconocimiento continuo. Puede elegir entre:

  • Reconocimiento único con identificación de idioma al principio. No se admite la identificación de idioma continua para el reconocimiento único.
  • Use el reconocimiento continuo con LID de inicio.
  • Use el reconocimiento continuo con LID continuo.

La propiedad SpeechServiceConnection_LanguageIdMode solo es necesaria para la identificación de idioma continua. Sin ello, el servicio de voz tiene como valor predeterminado la LID al principio. Los valores admitidos son AtStart para LID inicial o Continuous para LID 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()

Use la conversión de voz a texto

Puede usar el reconocimiento con conversión de voz en texto cuando necesite identificar el idioma de un origen de audio y transcribirlo en texto. Para más información, consulte Introducción a la conversión de voz en texto.

Nota

El reconocimiento con conversión de voz en texto con identificación del idioma al principio se admite con los SDK de Voz en C#, C++, Python, Java, JavaScript y Objective-C. El reconocimiento con conversión de voz en texto con la identificación continua del idioma solo se admite con los SDK de Voz en C#, C++, Java, JavaScript y Python.

Actualmente, para el reconocimiento de la conversión de voz en texto con identificación continua del idioma, debe crear un SpeechConfig a partir de la cadena de punto de conexión wss://{region}.stt.speech.microsoft.com/speech/universal/v2, como se muestra en los ejemplos de código. En una versión futura del SDK no tendrá que establecerla.

Consulte más ejemplos de reconocimiento con conversión de voz en texto con identificación del idioma en 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;
}

Consulte más ejemplos de reconocimiento con conversión de voz en texto con identificación del idioma en 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;

Consulte más ejemplos de reconocimiento con conversión de voz en texto con identificación del idioma en 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();

Consulte más ejemplos de reconocimiento con conversión de voz en texto con identificación del idioma en 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;
},
{});

Modelos personalizados de conversión de voz en texto

Nota

La detección de idioma con modelos personalizados solo se puede usar con conversión de voz en texto en tiempo real y traducción de voz. La transcripción por lotes solo admite la detección de idioma para los modelos base.

En este ejemplo se muestra cómo usar la detección de idioma con un punto de conexión personalizado. Si el lenguaje detectado es en-US, el ejemplo usa el modelo predeterminado. Si el lenguaje detectado es fr-FR, en el ejemplo se usa el punto de conexión del modelo personalizado. Para más información, consulte Implementación de un modelo de voz personalizada.

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

En este ejemplo se muestra cómo usar la detección de idioma con un punto de conexión personalizado. Si el lenguaje detectado es en-US, el ejemplo usa el modelo predeterminado. Si el lenguaje detectado es fr-FR, en el ejemplo se usa el punto de conexión del modelo personalizado. Para más información, consulte Implementación de un modelo de voz personalizada.

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

En este ejemplo se muestra cómo usar la detección de idioma con un punto de conexión personalizado. Si el lenguaje detectado es en-US, el ejemplo usa el modelo predeterminado. Si el lenguaje detectado es fr-FR, en el ejemplo se usa el punto de conexión del modelo personalizado. Para más información, consulte Implementación de un modelo de voz personalizada.

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

En este ejemplo se muestra cómo usar la detección de idioma con un punto de conexión personalizado. Si el lenguaje detectado es en-US, el ejemplo usa el modelo predeterminado. Si el lenguaje detectado es fr-FR, en el ejemplo se usa el punto de conexión del modelo personalizado. Para más información, consulte Implementación de un modelo de voz personalizada.

 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])

En este ejemplo se muestra cómo usar la detección de idioma con un punto de conexión personalizado. Si el lenguaje detectado es en-US, el ejemplo usa el modelo predeterminado. Si el lenguaje detectado es fr-FR, en el ejemplo se usa el punto de conexión del modelo personalizado. Para más información, consulte Implementación de un modelo de voz personalizada.

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

Ejecución de la traducción de voz

Use la traducción de voz cuando necesite identificar el idioma de un origen de audio y traducirlo en otro idioma. Para más información, consulte Introducción a la traducción de voz.

Nota:

La traducción de voz con identificación de idioma solo es compatible con los SDK de voz en C#, C++, JavaScript y Python. Actualmente, para la traducción de voz con identificación del idioma, debe crear un SpeechConfig a partir de la cadena de punto de conexión wss://{region}.stt.speech.microsoft.com/speech/universal/v2, como se muestra en los ejemplos de código. En una versión futura del SDK no tendrá que establecerla.

Consulte más ejemplos de traducción de voz con identificación del idioma en 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}");
            }
        }
    }
}

Consulte más ejemplos de traducción de voz con identificación del idioma en 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;
    }
}

Consulte más ejemplos de traducción de voz con identificación del idioma en 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))

Ejecutar y usar un contenedor

Los contenedores de voz proporcionan API de punto de conexión de consulta basadas en websocket a las que se accede a través del SDK de Voz y la CLI de Voz. De forma predeterminada, el SDK de Voz y la CLI de Voz usan el servicio de Voz público. Para usar el contenedor, deberá cambiar el método de inicialización. Use una dirección URL de host de contenedor en lugar de la clave y la región.

Al ejecutar el id. de idioma en un contenedor, use el objeto SourceLanguageRecognizer en lugar de SpeechRecognizer o TranslationRecognizer.

Para obtener más información sobre los contenedores, consulte la guía paso a paso de los contenedores de voz de identificación de idioma.

Implementación de la transcripción por lotes de voz a texto

Para identificar idiomas con la API de REST de transcripción por lotes, use la propiedad languageIdentification en el cuerpo de la solicitud Transcriptions_Create.

Advertencia

La transcripción por lotes solo admite la identificación de idioma para los modelos base. Si se especifican tanto la identificación del idioma como un modelo personalizado en la solicitud de transcripción, el servicio vuelve a usar los modelos base para los idiomas candidatos especificados. Esto podría dar lugar a resultados de reconocimiento inesperados.

Si el escenario de conversión de voz a texto requiere identificación de idioma y modelos personalizados, usa la conversión de voz a texto en tiempo real en lugar de la transcripción por lotes.

En el siguiente ejemplo se muestra el uso de la propiedad languageIdentification con cuatro idiomas candidatos. Para obtener más información sobre las propiedades de la solicitud, consulte Creación de una transcripción por lotes.

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