Implementowanie identyfikacji języka

Identyfikacja języka służy do identyfikowania języków mówionych w dźwiękach w porównaniu z listą obsługiwanych języków.

Przypadki użycia identyfikacji języka (LID) obejmują:

  • Rozpoznawanie mowy na tekst, gdy trzeba zidentyfikować język w źródle audio, a następnie transkrybować go do tekstu.
  • Tłumaczenie mowy, gdy musisz zidentyfikować język w źródle audio, a następnie przetłumaczyć go na inny język.

W przypadku rozpoznawania mowy początkowe opóźnienie jest wyższe z identyfikacją języka. Tę opcjonalną funkcję należy uwzględnić tylko w razie potrzeby.

Ustawianie opcji konfiguracji

Niezależnie od tego, czy używasz identyfikacji języka z zamianą mowy na tekst , czy z tłumaczeniem mowy, istnieją pewne typowe pojęcia i opcje konfiguracji.

Następnie należy wysłać żądanie rozpoznawania raz lub ciągłego rozpoznawania do usługi Rozpoznawanie mowy.

Ważne

Interfejsy API identyfikacji języka są uproszczone przy użyciu zestawu Speech SDK w wersji 1.25 lub nowszej. Właściwości SpeechServiceConnection_SingleLanguageIdPriority i SpeechServiceConnection_ContinuousLanguageIdPriority zostały usunięte. Pojedyncza właściwość SpeechServiceConnection_LanguageIdMode zastępuje je. Nie trzeba już określać priorytetów między małym opóźnieniem a wysoką dokładnością. W przypadku ciągłego rozpoznawania mowy lub tłumaczenia należy wybrać tylko, czy uruchamiać funkcję identyfikacji języka od początku, czy ciągłej identyfikacji języka.

Ten artykuł zawiera fragmenty kodu opisujące pojęcia. Podano linki do pełnych przykładów dla każdego przypadku użycia.

Języki kandydatów

Udostępniasz języki kandydatów do AutoDetectSourceLanguageConfig obiektu . Oczekujesz, że co najmniej jeden z kandydatów jest w dźwięku. Można dołączyć do czterech języków na początku LID lub maksymalnie 10 języków w przypadku ciągłej LID. Usługa mowa zwraca jeden z języków kandydatów podanych nawet wtedy, gdy te języki nie były w dźwięku. Jeśli na przykład fr-FR (francuski) i en-US (angielski) są dostarczane jako kandydaci, ale język niemiecki jest używany, usługa zwraca wartość fr-FR lub en-US.

Musisz podać pełne ustawienia regionalne z separatorem kreski (-), ale identyfikacja języka używa tylko jednego ustawienia regionalnego dla języka podstawowego. Nie uwzględniaj wielu ustawień regionalnych dla tego samego języka, na przykład en-US i 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];

Aby uzyskać więcej informacji, zobacz obsługiwane języki.

Przy uruchamianiu i ciągłej identyfikacji języka

Rozpoznawanie mowy obsługuje zarówno identyfikację języka na początku, jak i ciągłą (LID).

Uwaga

Ciągła identyfikacja języka jest obsługiwana tylko w przypadku zestawów SDK mowy w języku C#, C++, Java (tylko w przypadku zamiany mowy na tekst), języka JavaScript (tylko w przypadku zamiany mowy na tekst) i języka Python.

  • Od początku LID identyfikuje język raz w ciągu pierwszych kilku sekund dźwięku. Użyj pokrywy przy uruchamianiu, jeśli język w dźwięku nie ulegnie zmianie. W przypadku pokrywy przy uruchamianiu pojedynczy język jest wykrywany i zwracany w mniej niż 5 sekund.
  • Ciągła pokrywka może identyfikować wiele języków podczas dźwięku. Użyj ciągłej pokrywy, jeśli język w dźwięku może ulec zmianie. Ciągła pokrywa nie obsługuje zmian języków w tym samym zdaniu. Jeśli na przykład mówisz głównie po hiszpańsku i wstawiasz niektóre wyrazy w języku angielskim, nie wykrywa zmiany języka na słowo.

Zaimplementujesz pokrywę początkową lub ciągłą pokrywę, wywołując metody rozpoznawania raz lub ciągłego. Ciągła pokrywka jest obsługiwana tylko w przypadku ciągłego rozpoznawania.

Rozpoznawanie raz lub ciągłe

Identyfikacja języka jest zakończona z obiektami i operacjami rozpoznawania. Prześlij żądanie do usługi Rozpoznawanie mowy w celu rozpoznania dźwięku.

Uwaga

Nie należy mylić rozpoznawania z identyfikacją. Rozpoznawanie może być używane z identyfikacją języka lub bez tej identyfikacji.

Wywołaj metodę "recognize once" lub metod uruchamiania i zatrzymywania ciągłego rozpoznawania. Wybierz jedną z opcji:

  • Rozpoznawaj raz za pomocą pokrywy od początku. Ciągła pokrywka nie jest obsługiwana do rozpoznawania raz.
  • Używaj ciągłego rozpoznawania z pokrywą początkową.
  • Używaj ciągłego rozpoznawania z ciągłą pokrywą.

Właściwość jest wymagana SpeechServiceConnection_LanguageIdMode tylko w przypadku ciągłej POKRYWY. Bez niego usługa rozpoznawania mowy jest domyślnie ustawiona na lid od początku. Obsługiwane wartości są AtStart przeznaczone dla pokrywy początkowej lub Continuous ciągłej POKRYWY.

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

Używanie mowy do tekstu

Rozpoznawanie tekstu jest używane do rozpoznawania tekstu, gdy trzeba zidentyfikować język w źródle audio, a następnie transkrybować go do tekstu. Aby uzyskać więcej informacji, zobacz Omówienie zamiany mowy na tekst.

Uwaga

Rozpoznawanie mowy na tekst przy użyciu identyfikacji języka startowego jest obsługiwane w zestawach SDK rozpoznawania mowy w języku C#, C++, Python, Java, JavaScript i Objective-C. Rozpoznawanie mowy na tekst z ciągłą identyfikacją języka jest obsługiwane tylko w przypadku zestawów SDK rozpoznawania mowy w języku C#, C++, Java, JavaScript i Python.

Obecnie w przypadku rozpoznawania mowy na tekst z ciągłą identyfikacją języka należy utworzyć element SpeechConfig z ciągu punktu końcowego wss://{region}.stt.speech.microsoft.com/speech/universal/v2 , jak pokazano w przykładach kodu. W przyszłej wersji zestawu SDK nie trzeba go ustawiać.

Zobacz więcej przykładów rozpoznawania mowy na tekst przy użyciu identyfikacji języka w usłudze 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;
}

Zobacz więcej przykładów rozpoznawania mowy na tekst przy użyciu identyfikacji języka w usłudze 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;

Zobacz więcej przykładów rozpoznawania mowy na tekst przy użyciu identyfikacji języka w usłudze 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();

Zobacz więcej przykładów rozpoznawania mowy na tekst przy użyciu identyfikacji języka w usłudze 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;
},
{});

Modele niestandardowe zamiany mowy na tekst

Uwaga

Wykrywanie języka przy użyciu modeli niestandardowych może być używane tylko z zamianą mowy w czasie rzeczywistym na tekst i tłumaczenie mowy. Transkrypcja wsadowa obsługuje tylko wykrywanie języka dla domyślnych modeli bazowych.

W tym przykładzie pokazano, jak używać wykrywania języka z niestandardowym punktem końcowym. Jeśli wykryty język to en-US, w przykładzie użyto modelu domyślnego. Jeśli wykryty język to fr-FR, w przykładzie użyto niestandardowego punktu końcowego modelu. Aby uzyskać więcej informacji, zobacz Wdrażanie niestandardowego modelu mowy.

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

W tym przykładzie pokazano, jak używać wykrywania języka z niestandardowym punktem końcowym. Jeśli wykryty język to en-US, w przykładzie użyto modelu domyślnego. Jeśli wykryty język to fr-FR, w przykładzie użyto niestandardowego punktu końcowego modelu. Aby uzyskać więcej informacji, zobacz Wdrażanie niestandardowego modelu mowy.

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

W tym przykładzie pokazano, jak używać wykrywania języka z niestandardowym punktem końcowym. Jeśli wykryty język to en-US, w przykładzie użyto modelu domyślnego. Jeśli wykryty język to fr-FR, w przykładzie użyto niestandardowego punktu końcowego modelu. Aby uzyskać więcej informacji, zobacz Wdrażanie niestandardowego modelu mowy.

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

W tym przykładzie pokazano, jak używać wykrywania języka z niestandardowym punktem końcowym. Jeśli wykryty język to en-US, w przykładzie użyto modelu domyślnego. Jeśli wykryty język to fr-FR, w przykładzie użyto niestandardowego punktu końcowego modelu. Aby uzyskać więcej informacji, zobacz Wdrażanie niestandardowego modelu mowy.

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

W tym przykładzie pokazano, jak używać wykrywania języka z niestandardowym punktem końcowym. Jeśli wykryty język to en-US, w przykładzie użyto modelu domyślnego. Jeśli wykryty język to fr-FR, w przykładzie użyto niestandardowego punktu końcowego modelu. Aby uzyskać więcej informacji, zobacz Wdrażanie niestandardowego modelu mowy.

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

Uruchamianie tłumaczenia mowy

Użyj tłumaczenia mowy, gdy musisz zidentyfikować język w źródle audio, a następnie przetłumaczyć go na inny język. Aby uzyskać więcej informacji, zobacz Omówienie tłumaczenia mowy.

Uwaga

Tłumaczenie mowy z identyfikacją języka jest obsługiwane tylko w przypadku zestawów SDK mowy w języku C#, C++, JavaScript i Python. Obecnie w przypadku tłumaczenia mowy z identyfikacją języka należy utworzyć element SpeechConfig z ciągu punktu końcowego wss://{region}.stt.speech.microsoft.com/speech/universal/v2 , jak pokazano w przykładach kodu. W przyszłej wersji zestawu SDK nie trzeba go ustawiać.

Zobacz więcej przykładów tłumaczenia mowy z identyfikacją języka w usłudze 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}");
            }
        }
    }
}

Zobacz więcej przykładów tłumaczenia mowy z identyfikacją języka w usłudze 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;
    }
}

Zobacz więcej przykładów tłumaczenia mowy z identyfikacją języka w usłudze 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))

Uruchamianie i używanie kontenera

Kontenery mowy udostępniają internetowe interfejsy API punktów końcowych zapytań oparte na protokole Websocket, które są dostępne za pośrednictwem zestawu SPEECH SDK i interfejsu wiersza polecenia usługi Mowa. Domyślnie zestaw SDK usługi Mowa i interfejs wiersza polecenia usługi Mowa używają publicznej usługi rozpoznawania mowy. Aby użyć kontenera, należy zmienić metodę inicjowania. Użyj adresu URL hosta kontenera zamiast klucza i regionu.

Po uruchomieniu identyfikatora języka w kontenerze użyj SourceLanguageRecognizer obiektu zamiast SpeechRecognizer lub TranslationRecognizer.

Aby uzyskać więcej informacji na temat kontenerów, zobacz przewodnik dotyczący kontenerów mowy identyfikacji języka.

Implementowanie transkrypcji wsadowej mowy na tekst

Aby zidentyfikować języki przy użyciu interfejsu API REST transkrypcji usługi Batch, użyj languageIdentification właściwości w treści żądania Transcriptions_Create .

Ostrzeżenie

Transkrypcja wsadowa obsługuje tylko identyfikację języka dla domyślnych modeli bazowych. Jeśli zarówno identyfikacja języka, jak i model niestandardowy są określone w żądaniu transkrypcji, usługa wraca do używania modeli podstawowych dla określonych języków kandydatów. Może to spowodować nieoczekiwane wyniki rozpoznawania.

Jeśli scenariusz zamiany mowy na tekst wymaga zarówno identyfikacji języka, jak i modeli niestandardowych, użyj mowy w czasie rzeczywistym do tekstu zamiast transkrypcji wsadowej.

W poniższym przykładzie pokazano użycie languageIdentification właściwości z czterema językami kandydatów. Aby uzyskać więcej informacji na temat właściwości żądania, zobacz Tworzenie transkrypcji wsadowej.

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