Implémenter l’identification de la langue

L’identification de la langue est utilisée pour identifier les langues parlées en audio par rapport à une liste de langues prises en charge.

Les cas d’usage de l’identification de la langue (LID) sont les suivants :

  • Reconnaissance vocale lorsque vous devez identifier la langue dans une source audio, puis la transcrire en texte.
  • Traduction vocale lorsque vous devez identifier la langue dans une source audio, puis la traduire dans une autre langue.

Pour la reconnaissance vocale, la latence initiale est plus élevée avec l’identification de la langue. Vous devez inclure cette fonctionnalité facultative uniquement si c’est nécessaire.

Définir les options de configuration

Que vous utilisiez l’identification de la langue avec la reconnaissance vocale ou avec la traduction vocale, il existe des concepts et des options de configuration courants.

Vous effectuez ensuite une requête de reconnaissance ponctuelle ou de reconnaissance en continu au service Speech.

Important

Les API d’identification de langue sont simplifiées avec la version 1.25 (et ultérieure) du Kit de développement logiciel (SDK) Speech. Les propriétés SpeechServiceConnection_SingleLanguageIdPriority et SpeechServiceConnection_ContinuousLanguageIdPriority ont été supprimées. Une propriété unique SpeechServiceConnection_LanguageIdMode les remplace. Vous n’avez plus besoin d’accorder la priorité soit à la latence, soit à l’exactitude. Pour la traduction ou la reconnaissance vocale continue, il vous suffit de préciser s’il faut exécuter au démarrage ou en continu l’identification de la langue.

Cet article fournit des extraits de code pour décrire les concepts. Des liens vers des exemples complets pour chaque cas d’usage sont fournis.

Langues candidates

Vous fournissez des langues candidates à l’objet AutoDetectSourceLanguageConfig. Vous vous attendez à ce qu’au moins l’un des candidats soit dans l’audio. Vous pouvez inclure jusqu’à quatre langues pour l’identification de la langue (LID) au démarrage ou jusqu’à dix langues pour l’identification de la langue (LID) en continu. Le service Speech retourne l’une des langues candidates fournies, même si ces langues n’étaient pas dans l’audio. Par exemple, si les langues fr-FR (français) et en-US (anglais) sont fournies comme candidates, mais que de l’allemand est prononcé, le service retourne fr-FR ou en-US.

Vous devez renseigner l’intégralité des paramètres avec un tiret (-) pour séparateur, mais l’identification de la langue utilise uniquement un paramètre régional par langue de base. N’incluez pas plusieurs paramètres régionaux pour la même langue, par exemple, en-US et 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];

Pour plus d’informations, consultez langues prises en charge.

Identification de la langue au démarrage et en continu

Speech prend en charge aussi bien l’identification de la langue (LID) au démarrage et qu’en continu.

Remarque

L’identification de la langue en continu est prise en charge uniquement avec les kits de développement logiciel (SDK) Speech sur C#, C++, Java (pour la reconnaissance vocale uniquement), Javascript (pour la reconnaissance vocale uniquement) et Python.

  • L’identification de la langue au démarrage identifie la langue une fois dans les premières secondes de l’audio. Utilisez l’identification de la langue au démarrage si la langue de l’audio ne change pas. Avec l’identification de la langue au démarrage, une seule langue est détectée et retournée en moins de 5 secondes.
  • L’identification de la langue en continu peut identifier plusieurs langues pendant la séquence audio. Utilisez l’identification de la langue en continu si la langue de l’audio peut changer. L’identification de la langue en continu ne prend pas en charge les changements de langues dans la même phrase. Par exemple, si vous parlez principalement en espagnol et que vous insérez des mots anglais, elle ne détecte pas le changement de langue par mot.

Vous implémentez l’identification de la langue au démarrage ou en continu en appelant des méthodes pour la reconnaissance ponctuelle ou en continu. L’identification de la langue en continu est uniquement prise en charge avec la reconnaissance continue.

Reconnaissance ponctuelle ou en continu

L’identification de la langue est effectuée avec des objets et des opérations de reconnaissance. Effectuez une requête au service Speech pour la reconnaissance de l’audio.

Remarque

Ne confondez pas la reconnaissance avec l’identification. La reconnaissance peut être utilisée avec ou sans identification de la langue.

Appelez la méthode de « reconnaissance ponctuelle » ou les méthodes de reconnaissance en continu au démarrage et à l’arrêt. Vous avez le choix entre :

  • La reconnaissance ponctuelle avec identification de la langue au démarrage. L’identification de la langue en continu n’est pas prise en charge pour la reconnaissance ponctuelle.
  • Utiliser la reconnaissance continue avec identification de la langue au démarrage.
  • Utiliser la reconnaissance continue avec identification de la langue en continu.

La propriété SpeechServiceConnection_LanguageIdMode est uniquement obligatoire pour l’identification de la langue en continu. Sans elle, le service Speech passe par défaut à l’identification de la langue au démarrage. Les valeurs prises en charge sont AtStart pour l’identification de la langue au démarrage et Continuous pour l’identification de la langue en continu.

// 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()

Utiliser la reconnaissance vocale

Vous utilisez la reconnaissance vocale lorsque vous devez identifier la langue dans une source audio, puis la transcrire en texte. Pour plus d’informations, consultez Vue d’ensemble de la reconnaissance vocale.

Notes

La reconnaissance vocale avec identification de la langue au démarrage est prise en charge avec les kits de développement logiciel (SDK) Speech en C#, C++, Python, Java, JavaScript et Objective-C. La reconnaissance vocale avec identification de la langue en continu est prise en charge uniquement avec les kits de développement logiciel (SDK) Speech en C#, C++, Java, JavaScript et Python.

Actuellement, pour la reconnaissance vocale avec identification de la langue en continu, vous devez créer un SpeechConfig à partir de la chaîne de point de terminaison wss://{region}.stt.speech.microsoft.com/speech/universal/v2, comme indiqué dans les exemples de code. Dans une prochaine version du kit de développement logiciel (SDK), vous n’aurez pas besoin de le définir.

Consultez d’autres exemples de reconnaissance vocale avec identification de la langue sur 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;
}

Consultez d’autres exemples de reconnaissance vocale avec identification de la langue sur 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;

Consultez d’autres exemples de reconnaissance vocale avec identification de la langue sur 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();

Consultez d’autres exemples de reconnaissance vocale avec identification de la langue sur 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;
},
{});

Modèles de reconnaissance vocale personnalisés

Notes

La détection de langue avec des modèles personnalisés ne peut être utilisée qu’avec la reconnaissance vocale en temps réel et la traduction vocale. La transcription par lots prend uniquement en charge la détection de langue pour les modèles de base par défaut.

Cet exemple montre comment utiliser la détection de la langue avec un point de terminaison personnalisé. Si la langue détectée est en-US, l’exemple utilise le modèle par défaut. Si la langue détectée est fr-FR, l’exemple utilise le point de terminaison de modèle personnalisé. Pour plus d’informations, consultez Déployer Custom Speech personnalisé.

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

Cet exemple montre comment utiliser la détection de la langue avec un point de terminaison personnalisé. Si la langue détectée est en-US, l’exemple utilise le modèle par défaut. Si la langue détectée est fr-FR, l’exemple utilise le point de terminaison de modèle personnalisé. Pour plus d’informations, consultez Déployer Custom Speech personnalisé.

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

Cet exemple montre comment utiliser la détection de la langue avec un point de terminaison personnalisé. Si la langue détectée est en-US, l’exemple utilise le modèle par défaut. Si la langue détectée est fr-FR, l’exemple utilise le point de terminaison de modèle personnalisé. Pour plus d’informations, consultez Déployer Custom Speech personnalisé.

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

Cet exemple montre comment utiliser la détection de la langue avec un point de terminaison personnalisé. Si la langue détectée est en-US, l’exemple utilise le modèle par défaut. Si la langue détectée est fr-FR, l’exemple utilise le point de terminaison de modèle personnalisé. Pour plus d’informations, consultez Déployer Custom Speech personnalisé.

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

Cet exemple montre comment utiliser la détection de la langue avec un point de terminaison personnalisé. Si la langue détectée est en-US, l’exemple utilise le modèle par défaut. Si la langue détectée est fr-FR, l’exemple utilise le point de terminaison de modèle personnalisé. Pour plus d’informations, consultez Déployer Custom Speech personnalisé.

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

Exécuter la traduction vocale

Utilisez la traduction vocale lorsque vous devez identifier la langue dans une source audio, puis la traduire dans une autre langue. Pour plus d’informations, consultez Vue d’ensemble de la traduction vocale.

Remarque

La traduction vocale avec identification de la langue est prise en charge uniquement avec les SDK Speech en C#, C++, JavaScript et Python. Actuellement, pour la traduction avec identification de la langue, vous devez créer un SpeechConfig à partir de la chaîne de point de terminaison wss://{region}.stt.speech.microsoft.com/speech/universal/v2, comme indiqué dans les exemples de code. Dans une prochaine version du kit de développement logiciel (SDK), vous n’aurez pas besoin de le définir.

Consultez d’autres exemples de traduction vocale avec identification de la langue sur 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}");
            }
        }
    }
}

Consultez d’autres exemples de traduction vocale avec identification de la langue sur 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;
    }
}

Consultez d’autres exemples de traduction vocale avec identification de la langue sur 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))

Exécuter et utiliser un conteneur

Les conteneurs Speech fournissent des API de point de terminaison de requête basées sur WebSocket, accessibles via le Kit de développement logiciel (SDK) Speech et l’interface CLI Speech. Par défaut, le kit de développement logiciel (SDK) Speech et l’interface CLI Speech utilisent le service Speech public. Pour utiliser le conteneur, vous devez changer la méthode d’initialisation. Utilisez une URL d’hôte de conteneur plutôt qu’une clé et une région.

Quand vous exécutez un ID de langage dans un conteneur, utilisez l’objet SourceLanguageRecognizer au lieu de SpeechRecognizer ou TranslationRecognizer.

Pour plus d’informations sur les conteneurs, consultez le guide pratique des conteneurs Speech d’identification du langage.

Implémenter la transcription par lots de reconnaissance vocale

Pour identifier les langues avec l’API REST Transcription par lots, utilisez la propriété languageIdentification dans le corps de votre requête Transcriptions_Create.

Avertissement

La transcription par lots prend uniquement en charge l’identification de la langue pour les modèles de base par défaut. Si l’identification de la langue et un modèle personnalisé sont spécifiées dans la requête de transcription, le service revient aux modèles de base pour les langues candidates spécifiées. Cela peut entraîner des résultats de reconnaissance inattendus.

Si votre scénario de reconnaissance vocale nécessite à la fois l’identification de la langue et des modèles personnalisés, utilisez la reconnaissance vocale en temps réel au lieu de la transcription par lots.

L’exemple suivant montre l’utilisation de la propriété languageIdentification avec quatre langues candidates. Pour plus d’informations sur les propriétés de requête, consultez Créer une transcription par lots.

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