Implementieren der Sprachidentifikation
Bei der Sprachidentifikation werden anhand einer Liste unterstützter Sprachen die in der Audioquelle gesprochenen Sprachen identifiziert.
Einige Anwendungsfälle für die Sprachidentifikation:
- Sprache-in-Text-Erkennung, wenn Sie die Sprache in einer Audioquelle identifizieren und sie dann in Text transkribieren müssen.
- Sprachübersetzung: In einer Audioquelle muss die Sprache identifiziert und dann in eine andere Sprache übersetzt werden.
Bei der Spracherkennung ist die anfängliche Latenz mit der Sprachidentifikation höher. Dieses optionale Feature sollten Sie nur bei Bedarf einbeziehen.
Festlegen von Konfigurationsoptionen
Unabhängig davon, ob Sie die Sprachidentifikation mit Spracherkennung oder mit Sprachübersetzung verwenden, gibt es einige gemeinsame Konzepte und Konfigurationsoptionen.
- Definieren Sie eine Liste der in Frage kommenden Sprachen, die Sie in der Audioquelle erwarten.
- Entscheiden Sie, ob Sie die Sprachidentifikation am Anfang oder fortlaufend verwenden möchten.
Anschließend fordern Sie vom Speech-Dienst eine einmalige oder fortlaufende Erkennung an.
Dieser Artikel enthält Codeschnipsel zur Beschreibung der Konzepte. Es werden Links zu vollständigen Beispielen für jeden Anwendungsfall bereitgestellt.
In Frage kommende Sprachen
Sie stellen Kandidatensprachen für das AutoDetectSourceLanguageConfig
-Objekt bereit. Sie erwarten, dass mindestens einer der Kandidaten in den Audiodaten vorkommt. Sie können bis zu vier Sprachen für die anfängliche Sprachidentifikation oder bis zu 10 Sprachen für die fortlaufende Sprachidentifikation einbeziehen. Der Speech-Dienst gibt eine der in Frage kommenden bereitgestellten Sprachen zurück, auch wenn diese Sprachen nicht in der Audioaufnahme enthalten waren. Wenn beispielsweise fr-FR
(Französisch) und en-US
(Englisch) als in Frage kommende Sprachen angegeben werden, aber Deutsch gesprochen wird, gibt der Dienst entweder fr-FR
oder en-US
zurück.
Sie müssen das vollständige Gebietsschema mit einem Bindestrich (-
) als Trennzeichen angeben, aber die Sprachidentifikation verwendet nur ein Gebietsschema pro Basissprache. Verwenden Sie nicht mehrere Gebietsschemas (z. B. en-US
und en-GB
) für dieselbe Sprache.
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];
Weitere Informationen finden Sie unter Sprach- und Regionsunterstützung für die Textanalyse-API.
Anfängliche und fortlaufende Sprachidentifikation
Der Speech-Dienst unterstützt sowohl die anfängliche als auch die fortlaufende Sprachidentifikation.
Hinweis
Fortlaufende Sprachidentifikation wird nur mit Speech-SDKs in C#, C++, Java (nur für Sprache-in-Text), JavaScript (nur für Sprache-in-Text) und Python unterstützt.
- Bei der anfänglichen Sprachidentifikation wird die Sprache nur einmal innerhalb der ersten Sekunden der Audioaufnahme identifiziert. Verwenden Sie die anfängliche Sprachidentifikation, wenn sich die Sprache in der Audioaufnahme nicht ändert. Mit anfänglicher Sprachidentifikation wird eine einzelne Sprache erkannt und in weniger als 5 Sekunden zurückgegeben.
- Die fortlaufende Sprachidentifikation kann während der Audioaufnahme mehrere Sprachen identifizieren. Verwenden Sie die fortlaufende Sprachidentifikation, wenn sich die Sprache in der Audioquelle ändern könnte. Die fortlaufende Sprachidentifikation unterstützt keine Sprachänderungen innerhalb desselben Satzes. Wenn Sie beispielsweise hauptsächlich Spanisch sprechen und einige englische Wörter einfügen, wird die Sprachänderung pro Wort nicht erkannt.
Die anfängliche oder fortlaufende Sprachidentifikation wird durch Aufrufen der Methoden für die einmalige oder fortlaufende Erkennung implementiert. Fortlaufende Sprachidentifikation wird nur mit kontinuierlicher Erkennung unterstützt.
Einmalige oder fortlaufende Erkennung
Die Sprachidentifikation wird durch Erkennungsobjekte und Erkennungsvorgänge vervollständigt. Sie fordern vom Speech-Dienst eine Erkennung von Audiodaten an.
Hinweis
Verwechseln Sie die Erkennung nicht mit der Identifikation. Die Erkennung kann mit oder ohne Sprachidentifikation verwendet werden.
Sie rufen entweder die Methode zur einmaligen Erkennung oder die Methoden zum Starten und Beenden der fortlaufenden Erkennung auf. Zur Auswahl stehen:
- Einmalige Erkennung erfolgt mit anfänglicher Sprachidentifikation. Fortlaufende Sprachidentifikation wird für die einmalige Erkennung nicht unterstützt.
- Sie verwenden die fortlaufende Erkennung mit anfänglicher Sprachidentifikation.
- Sie verwenden die fortlaufende Erkennung mit fortlaufender Sprachidentifikation.
Für die fortlaufende Sprachidentifikation ist nur die Eigenschaft SpeechServiceConnection_LanguageIdMode
erforderlich. Ohne diese Eigenschaft wird der Speech-Dienst standardmäßig auf die anfängliche Sprachidentifikation festgelegt. Die unterstützten Werte sind AtStart
für anfängliche Sprachidentifikation oder Continuous
für fortlaufende Sprachidentifikation.
// 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()
Verwenden der Spracherkennung
Sie verwenden die Sprache-in-Text-Erkennung, wenn Sie die Sprache in einer Audioquelle identifizieren und sie dann in Text transkribieren müssen. Weitere Informationen finden Sie unter Übersicht über die Spracherkennung.
Hinweis
Die Sprache-in-Text-Erkennung mit anfänglicher Sprachidentifikation wird mit Speech-SDKs in C#, C++, Python, Java, JavaScript und Objective-C unterstützt. Die Sprache-in-Text-Erkennung mit fortlaufender Sprachidentifikation wird nur mit Speech-SDKs in C#, C++, Java, JavaScript und Python unterstützt.
Derzeit müssen Sie für die Sprache-in-Text-Erkennung mit kontinuierlicher Sprachidentifikation eine Sprachkonfiguration (SpeechConfig) aus der Endpunktzeichenfolge wss://{region}.stt.speech.microsoft.com/speech/universal/v2
erstellen, wie in den Codebeispielen gezeigt. In einem zukünftigen SDK-Release ist dies nicht mehr erforderlich.
Weitere Beispiele für die Sprache-in-Text-Erkennung mit Sprachidentifikation finden Sie auf 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;
}
Weitere Beispiele für die Sprache-in-Text-Erkennung mit Sprachidentifikation finden Sie auf 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;
Weitere Beispiele für die Sprache-in-Text-Erkennung mit Sprachidentifikation finden Sie auf 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();
Weitere Beispiele für die Sprache-in-Text-Erkennung mit Sprachidentifikation finden Sie auf 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;
},
{});
Benutzerdefinierte Spracherkennungsmodelle
Hinweis
Die Spracherkennung mit benutzerdefinierten Modellen kann nur mit Spracherkennung und Sprachübersetzung in Echtzeit verwendet werden. Die Batchtranskription unterstützt die Spracherkennung nur für Standard-Basismodelle.
In diesem Beispiel wird die Verwendung der Spracherkennung mit einem benutzerdefinierten Endpunkt veranschaulicht. Wenn die erkannte Sprache en-US
ist, wird im Beispiel das Standardmodell verwendet. Wenn die erkannte Sprache fr-FR
ist, wird im Beispiel das Modell mit dem benutzerdefinierten Endpunkt verwendet. Weitere Informationen finden Sie unter Trainieren und Bereitstellen eines Custom Speech-Modells.
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);
In diesem Beispiel wird die Verwendung der Spracherkennung mit einem benutzerdefinierten Endpunkt veranschaulicht. Wenn die erkannte Sprache en-US
ist, wird im Beispiel das Standardmodell verwendet. Wenn die erkannte Sprache fr-FR
ist, wird im Beispiel das Modell mit dem benutzerdefinierten Endpunkt verwendet. Weitere Informationen finden Sie unter Trainieren und Bereitstellen eines Custom Speech-Modells.
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);
In diesem Beispiel wird die Verwendung der Spracherkennung mit einem benutzerdefinierten Endpunkt veranschaulicht. Wenn die erkannte Sprache en-US
ist, wird im Beispiel das Standardmodell verwendet. Wenn die erkannte Sprache fr-FR
ist, wird im Beispiel das Modell mit dem benutzerdefinierten Endpunkt verwendet. Weitere Informationen finden Sie unter Trainieren und Bereitstellen eines Custom Speech-Modells.
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);
In diesem Beispiel wird die Verwendung der Spracherkennung mit einem benutzerdefinierten Endpunkt veranschaulicht. Wenn die erkannte Sprache en-US
ist, wird im Beispiel das Standardmodell verwendet. Wenn die erkannte Sprache fr-FR
ist, wird im Beispiel das Modell mit dem benutzerdefinierten Endpunkt verwendet. Weitere Informationen finden Sie unter Trainieren und Bereitstellen eines Custom Speech-Modells.
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])
In diesem Beispiel wird die Verwendung der Spracherkennung mit einem benutzerdefinierten Endpunkt veranschaulicht. Wenn die erkannte Sprache en-US
ist, wird im Beispiel das Standardmodell verwendet. Wenn die erkannte Sprache fr-FR
ist, wird im Beispiel das Modell mit dem benutzerdefinierten Endpunkt verwendet. Weitere Informationen finden Sie unter Trainieren und Bereitstellen eines Custom Speech-Modells.
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]);
Ausführen der Sprachübersetzung
Sie verwenden die Sprachübersetzung, wenn Sie in einer Audioquelle die Sprache identifizieren und dann in eine andere Sprache übersetzen möchten. Weitere Informationen finden Sie unter Übersicht über die Sprachübersetzung.
Hinweis
Die Sprachübersetzung mit Sprachidentifikation wird nur mit Speech-SDKs in C#, C++, JavaScript und Python unterstützt.
Derzeit müssen Sie für die Sprachübersetzung mit Sprachidentifikation eine Sprachkonfiguration (SpeechConfig) aus der Endpunktzeichenfolge wss://{region}.stt.speech.microsoft.com/speech/universal/v2
erstellen, wie in den Codebeispielen gezeigt. In einem zukünftigen SDK-Release ist dies nicht mehr erforderlich.
Weitere Beispiele für die Sprachübersetzung mit Sprachidentifikation finden Sie auf 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}");
}
}
}
}
Weitere Beispiele für die Sprachübersetzung mit Sprachidentifikation finden Sie auf 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;
}
}
Weitere Beispiele für die Sprachübersetzung mit Sprachidentifikation finden Sie auf 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))
Ausführen und Verwenden eines Containers
Speech-Container bieten websocketbasierte Abfrageendpunkt-APIs, auf die über das Speech SDK und die Speech-CLI zugegriffen wird. Standardmäßig verwenden das Speech SDK und die Speech-CLI den öffentlichen Speech-Dienst. Um den Container verwenden zu können, müssen Sie die Initialisierungsmethode ändern. Verwenden Sie eine Containerhost-URL anstelle von Schlüssel und Region.
Wenn Sie die Sprach-ID in einem Container ausführen, verwenden Sie das SourceLanguageRecognizer
-Objekt anstelle von SpeechRecognizer
oder TranslationRecognizer
.
Weitere Informationen zu Containern finden Sie in der Schrittanleitung zur Sprachenerkennung in Speech-Containern.
Implementieren der Sprach-in-Text-Batchtranskription
Um Sprachen mit der REST-API für die Batchtranskription zu identifizieren, verwenden Sie die languageIdentification
-Eigenschaft im Textkörper Ihrer Transcriptions_Create-Anforderung.
Warnung
Die Batchtranskription unterstützt die Sprachenerkennung nur für Standard-Basismodelle. Wenn in der Transkriptionsanforderung sowohl die Sprachidentifikation als auch die Verwendung eines benutzerdefinierten Modells angegeben sind, greift der Dienst auf die Basismodelle für die angegebenen in Frage kommenden Sprachen zurück. Dies kann zu unerwarteten Ergebnissen bei der Erkennung führen.
Wenn ihr Spracherkennungsszenario sowohl die Sprachenerkennung als auch benutzerdefinierte Modelle erfordert, verwenden Sie die Spracherkennung in Echtzeit anstelle der Batchtranskription.
Das folgende Beispiel zeigt die Verwendung der Eigenschaft languageIdentification
mit vier in Frage kommenden Sprachen. Weitere Informationen zu Anforderungseigenschaften finden Sie unter Erstellen einer Batchtranskription.
{
<...>
"properties": {
<...>
"languageIdentification": {
"candidateLocales": [
"en-US",
"ja-JP",
"zh-CN",
"hi-IN"
]
},
<...>
}
}