Udostępnij za pośrednictwem


Implementowanie identyfikacji języka

Identyfikacja języka służy do identyfikowania języków mówionych w nagraniach dźwiękowych 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 jednorazowego lub ciągłego rozpoznawania do usługi rozpoznawania mowy.

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

Za pomocą obiektu AutoDetectSourceLanguageConfig udostępniasz języki kandydatów. Oczekujesz, że co najmniej jeden z kandydatów jest na nagraniu. Można uwzględnić do czterech języków na początku LID lub maksymalnie 10 języków w przypadku ciągłej LID. Usługa przetwarzania mowy zwraca jeden z podanych języków kandydatów, nawet jeśli te języki nie były zawarte w nagraniu. 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.

Identyfikacja języka przy starcie i w trybie ciągłym

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 C#, C++, Java (dla zamiany mowy na tekst), JavaScript (dla zamiany mowy na tekst), i Python.

  • Od początku LID identyfikuje język raz w ciągu pierwszych kilku sekund dźwięku. Użyj początkowego LID, jeśli język dźwięku się nie zmienia. Dla funkcji LID przy uruchomieniu, pojedynczy język jest wykrywany i zwracany w mniej niż 5 sekund.
  • Ciągła identyfikacja języków może rozpoznawać wiele języków w trakcie odtwarzania audio. Użyj ciągłej identyfikacji języka, jeśli język w dźwięku może się zmienić. Ciągłe rozpoznawanie języka nie wspiera zmiany języka 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.

Można zaimplementować początkowe LID lub ciągłe LID, wywołując metody rozpoznawania jednorazowego lub ciągłego. Ciągły LID jest obsługiwany tylko w przypadku ciągłego rozpoznawania.

Rozpoznawanie jednorazowe lub ciągłe

Identyfikacja języka jest wykonywana za pomocą obiektów i operacji rozpoznawczych. 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 niej.

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

  • Rozpoznaj raz za pomocą At-start LID. Nieobsługiwana jest ciągła identyfikacja języka dla jednokrotnego rozpoznawania.
  • Używaj ciągłego rozpoznawania z początkowym rozpoznawaniem języka.
  • Używaj ciągłego rozpoznawania z ciągłą identyfikacją języka.

Właściwość SpeechServiceConnection_LanguageIdMode jest wymagana tylko w przypadku ciągłej LID. Bez niego usługa mowy jest domyślnie ustawiona na LID na początku. Obsługiwane wartości to AtStart dla początkowego LID lub Continuous dla ciągłego LID.

// 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 mowy na tekst jest używane, gdy trzeba zidentyfikować język w źródle audio, a następnie transkrybować go na tekst. Aby uzyskać więcej informacji, zobacz Omówienie zamiany mowy na tekst.

Uwaga

Rozpoznawanie mowy na tekst z identyfikacją języka na starcie jest obsługiwane w zestawach SDK w językach 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 punktu końcowego, jak pokazano w przykładach kodu.

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.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");

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::FromEndpoint("YourServiceEndpoint", "YourSubscriptionKey");

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 na tekst w czasie rzeczywistym oraz tłumaczeniem mowy. Transkrypcja grupowa obsługuje tylko wykrywanie języka dla domyślnych modeli bazowych.

Przykład ten pokazuje, jak używać wykrywania języka z wykorzystaniem niestandardowego punktu końcowego. 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 fr-FR jest wykrytym językiem, w przykładzie użyty jest niestandardowy punkt końcowy 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 stosować wykrywanie 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 korzystać z wykrywania języka przy użyciu niestandardowego punktu końcowego. Jeśli wykryty język to en-US, w przykładzie użyto modelu domyślnego. Jeśli wykryty język to fr-FR, przykład używa niestandardowego modelu punktu końcowego. 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 język wykryty to fr-FR, w przykładzie używany jest niestandardowy punkt końcowy 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.

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 endpointUrl = new Uri("YourSubscriptionEndpoint");

    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 endpointString = "YourSubscriptionEndpoint";
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 endpoint 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_endpoint = "YourSubscriptionKey","YourServiceEndpoint"
weatherfilename="en-us_zh-cn.wav"

# set up translation parameters: source language and target languages
translation_config = speechsdk.translation.SpeechTranslationConfig(
    subscription=speech_key,
    endpoint=service_endpoint,
    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 punktu końcowego.

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

Aby uzyskać więcej informacji na temat kontenerów, zapoznaj się z przewodnikiem o kontenerach mowy do identyfikacji języka.

Wdrażanie wsadowej transkrypcji 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 zamiany mowy na tekst w czasie rzeczywistym zamiast transkrypcji wsadowej.

W poniższym przykładzie pokazano użycie właściwości languageIdentification z czterema językami kandydackimi. 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"
            ]
        },	
        <...>
    }
}