Erkennen von Sprache
Referenzdokumentation | Paket (NuGet) | Zusätzliche Beispiele auf GitHub
In dieser Schrittanleitung erfahren Sie, wie Sie den Azure KI Speech für die Echtzeitkonvertierung von Sprache in Text verwenden. Die Echtzeit-Spracherkennung eignet sich ideal für Anwendungen, die eine sofortige Transkription erfordern, z. B. Diktate, Callcenterunterstützung und Untertitelung von Livebesprechungen.
Informationen zum Einrichten der Umgebung für eine Beispielanwendung finden Sie unter Schnellstart: Erkennen von Sprache und Konvertieren von Sprache in Text.
Erstellen einer Speech-Konfigurationsinstanz
Um den Speech-Dienst über das Speech SDK aufrufen zu können, muss eine SpeechConfig
-Instanz erstellt werden. Diese Klasse enthält Informationen zu Ihrem Abonnement. Hierzu zählen etwa Ihr Schlüssel und die zugeordnete Region, der Endpunkt, der Host oder das Autorisierungstoken.
- Erstellen Sie eine Speech-Ressource im Azure-Portal. Abrufen des Speech-Ressourcenschlüssel und des Endpunkts.
- Erstellen Sie mithilfe des folgenden Codes eine
SpeechConfig
-Instanz. Ersetzen SieYourSpeechKey
undYourSpeechRegion
durch Ihren Speech-Ressourcenschlüssel und Ihre Region.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
}
}
Sie können SpeechConfig
auf verschiedene Arten initialisieren:
- Verwenden Sie einen Endpunkt, und übergeben Sie einen Speech-Dienstendpunkt. Ein Schlüssel oder Autorisierungstoken ist optional.
- Verwenden Sie einen Host, und übergeben Sie eine Hostadresse. Ein Schlüssel oder Autorisierungstoken ist optional.
- Verwenden Sie ein Autorisierungstoken mit der zugeordneten Region/dem zugehörigen Standort.
Hinweis
Eine Konfiguration ist immer erforderlich. Dabei spielt es keine Rolle, ob Sie eine Spracherkennung, eine Sprachsynthese, eine Übersetzung oder eine Absichtserkennung durchführen möchten.
Schnellstart: Erkennen von Spracheingaben per Mikrofon
Um Sprache über das Mikrofon Ihres Geräts zu erkennen, erstellen Sie mithilfe der Methode FromDefaultMicrophoneInput()
eine AudioConfig
-Instanz. Initialisieren Sie dann das Objekt SpeechRecognizer
, indem Sie speechConfig
und audioConfig
übergeben.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromMic(SpeechConfig speechConfig)
{
using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Console.WriteLine("Speak into your microphone.");
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromMic(speechConfig);
}
}
Wenn Sie ein bestimmtes Audioeingabegerät verwenden möchten, müssen Sie in AudioConfig
die Geräte-ID angeben. Informationen zum Abrufen der Geräte-ID finden Sie unter Auswählen eines Audioeingabegeräts mit dem Speech SDK.
Erkennen von Sprache aus einer Datei
Wenn Sie Sprache aus einer Audiodatei erkennen möchten, anstatt ein Mikrofon zu verwenden, müssen Sie trotzdem eine AudioConfig
-Instanz erstellen. Allerdings rufen Sie FromDefaultMicrophoneInput()
nicht auf. Sie rufen FromWavFileInput()
auf und übergeben den Dateipfad:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromFile(SpeechConfig speechConfig)
{
using var audioConfig = AudioConfig.FromWavFileInput("PathToFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromFile(speechConfig);
}
}
Erkennen von Sprache aus einem In-Memory-Stream (Arbeitsspeicherdatenstrom)
In vielen Anwendungsfällen ist es wahrscheinlich, dass Ihre Audiodaten aus Azure Blob Storage stammen oder sich andernfalls bereits als byte[]
-Instanz oder eine ähnliche Rohdatenstruktur im Arbeitsspeicher befinden. Im folgenden Beispiel wird PushAudioInputStream
verwendet, um Sprache zu erkennen. Dabei handelt es sich im Wesentlichen um einen abstrahierten Arbeitsspeicherdatenstrom. Der Beispielcode führt die folgenden Aufgaben aus:
- Schreibt mithilfe der Funktion
Write()
, die einebyte[]
-Instanz akzeptiert, unformatierte Audiodaten (PCM) inPushAudioInputStream
. - Liest eine WAV-Datei mithilfe von
FileReader
zu Demonstrationszwecken. Wenn Sie bereits über Audiodaten in einerbyte[]
-Instanz verfügen, können Sie direkt zum Schreiben des Inhalts in den Eingabestream springen. - Das Standardformat sind 16-Bit- und 16-kHz-Monopulscodemodulationsdaten (PCM). Zum Anpassen des Formats können Sie mithilfe der statischen Funktion
AudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels)
einAudioStreamFormat
-Objekt anCreatePushStream()
übergeben.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromStream(SpeechConfig speechConfig)
{
var reader = new BinaryReader(File.OpenRead("PathToFile.wav"));
using var audioConfigStream = AudioInputStream.CreatePushStream();
using var audioConfig = AudioConfig.FromStreamInput(audioConfigStream);
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
byte[] readBytes;
do
{
readBytes = reader.ReadBytes(1024);
audioConfigStream.Write(readBytes, readBytes.Length);
} while (readBytes.Length > 0);
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromStream(speechConfig);
}
}
Bei der Verwendung eines Pushstreams als Eingabe wird davon ausgegangen, dass es sich bei den Audiodaten um unformatierte PCM-Daten handelt, weshalb Header übersprungen werden. Die API funktioniert in bestimmten Fällen auch dann noch, wenn der Header nicht übersprungen wird. Um die besten Ergebnisse zu erzielen, empfiehlt es sich jedoch, eine Logik zum Lesen der Header zu implementieren, sodass byte[]
am Anfang der Audiodaten beginnt.
Umgang mit Fehlern
Die vorherigen Beispiele rufen einfach den erkannten Text aus der Eigenschaft speechRecognitionResult.Text
ab. Um Fehler und andere Antworten zu behandeln, müssen Sie Code schreiben, der das Ergebnis verarbeitet. Der folgende Code wertet die Eigenschaft speechRecognitionResult.Reason
aus und geht wie folgt vor:
- Das Erkennungsergebnis wird ausgegeben:
ResultReason.RecognizedSpeech
. - Wurde kein Erkennungstreffer gefunden, wird der Benutzer davon in Kenntnis gesetzt:
ResultReason.NoMatch
. - Ist ein Fehler aufgetreten, wird die Fehlermeldung ausgegeben:
ResultReason.Canceled
.
switch (speechRecognitionResult.Reason)
{
case ResultReason.RecognizedSpeech:
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
break;
case ResultReason.NoMatch:
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled:
var cancellation = CancellationDetails.FromResult(speechRecognitionResult);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");
if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
}
break;
}
Verwenden kontinuierlicher Erkennung
In den vorherigen Beispielen wird Einzelerkennung verwendet, bei der eine einzelne Äußerung erkannt wird. Zur Erkennung des Endes einer einzelnen Äußerung wird auf Stille am Ende gelauscht oder gewartet, bis maximal 15 Sekunden an Audiodaten verarbeitet wurden.
Im Gegensatz dazu verwenden Sie kontinuierliche Erkennung, wenn Sie steuern möchten, wann die Erkennung beendet wird. Für die kontinuierliche Erkennung müssen die Ereignisse Recognizing
, Recognized
und Canceled
abonniert werden, um die Erkennungsergebnisse zu erhalten. Zum Beenden der Erkennung muss StopContinuousRecognitionAsync
aufgerufen werden. Im folgenden Beispiel wird eine kontinuierliche Erkennung für eine Audioeingabedatei durchgeführt.
Beginnen Sie mit dem Definieren der Eingabe und dem Initialisieren von SpeechRecognizer
:
using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Erstellen Sie als Nächstes eine TaskCompletionSource<int>
-Instanz, um den Zustand der Spracherkennung zu verwalten:
var stopRecognition = new TaskCompletionSource<int>();
Abonnieren Sie als Nächstes die Ereignisse, die von SpeechRecognizer
gesendet werden:
Recognizing
: Signal für Ereignisse mit Erkennungszwischenergebnissen.Recognized
: Signal für Ereignisse mit Endergebnissen der Erkennung, was auf einen erfolgreichen Erkennungsversuch hindeutet.SessionStopped
: Signal für Ereignisse, die das Ende einer Erkennungssitzung (bzw. eines Erkennungsvorgangs) anzeigen.Canceled
: Signal für Ereignisse mit Ergebnissen einer abgebrochenen Erkennung. Diese Ergebnisse weisen auf einen Erkennungsversuch hin, der aufgrund einer direkten Abbruchanforderung abgebrochen wurde. Alternativ weisen sie auf einen Datentransport- oder Protokollfehler hin.
speechRecognizer.Recognizing += (s, e) =>
{
Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};
speechRecognizer.Recognized += (s, e) =>
{
if (e.Result.Reason == ResultReason.RecognizedSpeech)
{
Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
}
else if (e.Result.Reason == ResultReason.NoMatch)
{
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
}
};
speechRecognizer.Canceled += (s, e) =>
{
Console.WriteLine($"CANCELED: Reason={e.Reason}");
if (e.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
}
stopRecognition.TrySetResult(0);
};
speechRecognizer.SessionStopped += (s, e) =>
{
Console.WriteLine("\n Session stopped event.");
stopRecognition.TrySetResult(0);
};
Rufen Sie nach Abschluss der Einrichtung StartContinuousRecognitionAsync
auf, um die Erkennung zu starten:
await speechRecognizer.StartContinuousRecognitionAsync();
// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });
// Make the following call at some point to stop recognition:
// await speechRecognizer.StopContinuousRecognitionAsync();
Ändern der Quellsprache
Eine gängige Aufgabe für die Spracherkennung ist die Angabe der Eingabesprache (Ausgangssprache). Das folgende Beispiel zeigt, wie Sie die Eingabesprache zu Italienisch ändern. Suchen Sie in Ihrem Code Ihre SpeechConfig
-Instanz, und fügen Sie direkt darunter die folgende Zeile hinzu:
speechConfig.SpeechRecognitionLanguage = "it-IT";
Von der Eigenschaft SpeechRecognitionLanguage
wird eine Zeichenfolge im Format „Sprache-Gebietsschema“ erwartet. Eine Liste unterstützter Gebietsschemas finden Sie unter Sprach- und Stimmunterstützung für den Speech-Dienst.
Sprachenerkennung
Sie können die Sprachidentifikation mit Spracherkennung verwenden, wenn Sie die Sprache einer Audioquelle identifizieren und diese dann in Text transkribieren müssen.
Ein vollständiges Codebeispiel finden Sie unter Sprachenerkennung.
Verwenden Sie einen benutzerdefinierten Endpunkt
Mit Custom Speech können Sie eigene Daten hochladen, ein benutzerdefiniertes Modell testen und trainieren, die Genauigkeit zwischen Modellen vergleichen und ein Modell auf einem benutzerdefinierten Endpunkt bereitstellen. Das folgende Beispiel zeigt, wie Sie einen benutzerdefinierten Endpunkt festlegen.
var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);
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.
Weitere Informationen zu Containern finden Sie unter Host-URLs beim Installieren und Ausführen von Speech-Containern mit Docker.
Ändern der Behandlung von Stille
Wenn ein Benutzer oder eine Benutzerin schneller oder langsamer als üblich spricht, führt das Standardverhalten für sprachlose Stille in Eingabeaudiodaten möglicherweise nicht zum erwarteten Ergebnis. Dies sind häufige Probleme bei der Behandlung von Stille:
- Bei schnellem Sprechen werden mehrere Sätze zu einem einzelnen Erkennungsergebnis verkettet, statt die Sätze in einzelne Ergebnisse aufzuteilen.
- Bei langsamem Sprechen werden Teile eines einzelnen Satzes in mehrere Ergebnisse aufgeteilt.
- Eine Einzelerkennung endet beim Warten auf den Sprechbeginn zu früh.
Diese Probleme können durch Festlegen einer der zwei Timeouteigenschaften in der SpeechConfig
InstanzSpeechRecognizer
behoben werden, die zum Erstellen des folgenden verwendet wird:
- Das Segmentierungs-Timeout passt an, wie viel sprachfremdes Audio innerhalb eines Ausdrucks zulässig ist, der aktuell gesprochen wird, bevor dieser Ausdruck als „fertig“ angesehen wird.
- Höhere Werte machen die Ergebnisse in der Regel länger und lassen längere Pausen beim Sprechen innerhalb eines Satzes zu, aber führen auch dazu, dass die Erstellung der Ergebnisse länger dauert. Es können auch separate Ausdrücke zu einem einzigen Ergebnis kombinieren, wenn die Einstellung zu hoch festgelegt ist.
- Niedrigere Werte führen im Allgemeinen zu kürzeren Ergebnissen und sorgen für schnellere und häufigere Unterbrechungen zwischen Ausdrücken, können aber auch bewirken, dass einzelne Ausdrücke in mehrere Ergebnisse getrennt werden, wenn der Wert zu niedrig ist.
- Dieses Timeout kann auf ganzzahlige Werte zwischen 100 und 5000 Millisekunden festgelegt werden, wobei 500 einen typischen Standardwert darstellt.
- Initial silence timeout (Anfangsstille-Timeout) passt an, wie viel sprachfremdes Audio vor einem Ausdruck zulässig ist, bevor der Erkennungsversuch mit dem Ergebnis „keine Übereinstimmung“ endet.
- Höhere Werte geben den Sprechern mehr Zeit, zu reagieren und mit dem Sprechen zu beginnen, können aber auch zu einer langsamen Reaktion führen, wenn nichts gesprochen wird.
- Mit niedrigeren Werten wird eine schnelle Ausgabe von „Keine Übereinstimmung“ sichergestellt, was eine schneller reagierende Benutzerumgebung und eine kontrolliertere Audioverarbeitung sicherstellt, einen Sprecher aber zu früh abschneiden kann, wenn der Wert zu niedrig festgelegt ist.
- Da bei der fortlaufenden Erkennung viele Ergebnisse generiert werden, bestimmt dieser Wert, wie oft Ergebnisse mit „keine Übereinstimmung“ eingehen, wirkt sich aber ansonsten nicht auf den Inhalt der Erkennungsergebnisse aus.
- Dieses Timeout kann auf jeden nicht negativen ganzzahligen Wert in Millisekunden eingestellt werden, oder auf 0, um es vollständig zu deaktivieren. 5000 ist ein typischer Standardwert für die Erkennung von Einzelaufnahmen, während 15000 ein typischer Standardwert für die kontinuierliche Erkennung ist.
Da die Änderung dieser Timeouts mit Kompromissen verbunden ist, sollten die Einstellungen nur geändert werden, wenn ein Problem im Zusammenhang mit der Behandlung von Stille auftritt. Mit den Standardwerten wird die Mehrheit gesprochener Audiosignale optimal behandelt, und Probleme sollten nur in ungewöhnlichen Szenarien auftreten.
Beispiel: Benutzer, die eine Seriennummer wie „ABC-123-4567“ sprechen, halten zwischen den Zeichengruppen so lange inne, dass die Seriennummer in mehrere Ergebnisse unterteilt wird. Probieren Sie in diesem Fall einen höheren Wert wie 2000 ms für das Timeout für die Segmentierung von Stille:
speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "2000");
Beispiel: Die Sprache eines aufgezeichneten Referenten ist so schnell, dass mehrere Sätze in einer Zeile kombiniert werden, wobei nur ein- oder zweimal pro Minute große Erkennungsergebnisse eingehen. In diesem Fall kann das Festlegen des Stille-Timeouts für die Segmentierung auf einen niedrigeren Wert wie 300 ms helfen:
speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "300");
Beispiel: Eine Einzelerkennung, bei der ein Sprecher aufgefordert wird, eine Seriennummer zu finden und zu lesen, endet zu früh, während die Nummer gesucht wird. In diesem Fall könnte ein längeres Anfangsstille-Timeout wie 10000 ms helfen:
speechConfig.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000");
Semantische Segmentierung
Die semantische Segmentierung ist eine Strategie zur Spracherkennung, die darauf ausgelegt ist, Probleme im Zusammenhang mit der stillebasierten Segmentierung zu mindern:
- Untersegmentierung: Wenn Benutzer eine lange Zeit ohne Pausen sprechen, kann eine lange Textsequenz ohne Unterbrechungen („Textwand“) entstehen, was die Lesbarkeit erheblich beeinträchtigt.
- Übersegmentierung: Wenn ein Benutzer kurze Zeit pausiert, segmentiert der Stilleerkennungsmechanismus ggf. falsch.
Anstatt sich auf Stilletimeouts zu verlassen, segmentiert die semantische Segmentierung und gibt endgültige Ergebnisse zurück, wenn Satzzeichen (wie . oder ?) erkannt werden. Dies verbessert die Benutzererfahrung mit qualitativ hochwertigeren, semantisch vollständigen Segmenten und verhindert lange Zwischenergebnisse.
Um die semantische Segmentierung zu verwenden, müssen Sie die folgende Eigenschaft für die SpeechConfig
-Instanz festlegen, die zum Erstellen von SpeechRecognizer
verwendet wird:
speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");
Einige der Einschränkungen der semantischen Segmentierung sind:
- Sie benötigen das Speech SDK, Version 1.41 oder höher, um die semantische Segmentierung zu verwenden.
- Die semantische Segmentierung ist nur für die Verwendung in Continuous Recognition vorgesehen. Dazu gehören Szenarios wie Transkription und Untertitelerstellung. Sie sollte nicht im einfachen Erkennungs- und Diktiermodus verwendet werden.
- Die semantische Segmentierung ist nicht für alle Sprachen und Gebietsschemas verfügbar. Derzeit ist die semantische Segmentierung nur für englischsprachige Gebietsschemas (en-US, en-GB, en-IN und en-AU) verfügbar.
- Die semantische Segmentierung unterstützt noch keine Konfidenzbewertungen und NBest-Listen. Daher wird die semantische Segmentierung nicht empfohlen, wenn Sie Konfidenzbewertungen oder NBest-Listen verwenden.
Referenzdokumentation | Paket (NuGet) | Zusätzliche Beispiele auf GitHub
In dieser Schrittanleitung erfahren Sie, wie Sie den Azure KI Speech für die Echtzeitkonvertierung von Sprache in Text verwenden. Die Echtzeit-Spracherkennung eignet sich ideal für Anwendungen, die eine sofortige Transkription erfordern, z. B. Diktate, Callcenterunterstützung und Untertitelung von Livebesprechungen.
Informationen zum Einrichten der Umgebung für eine Beispielanwendung finden Sie unter Schnellstart: Erkennen von Sprache und Konvertieren von Sprache in Text.
Erstellen einer Speech-Konfigurationsinstanz
Um den Speech-Dienst über das Speech SDK aufrufen zu können, muss eine SpeechConfig
-Instanz erstellt werden. Diese Klasse enthält Informationen zu Ihrem Abonnement. Hierzu zählen etwa Ihr Schlüssel und die zugeordnete Region, der Endpunkt, der Host oder das Autorisierungstoken.
- Erstellen Sie eine Speech-Ressource im Azure-Portal. Abrufen des Speech-Ressourcenschlüssel und des Endpunkts.
- Erstellen Sie mithilfe des folgenden Codes eine
SpeechConfig
-Instanz. Ersetzen SieYourSpeechKey
undYourSpeechRegion
durch Ihren Speech-Ressourcenschlüssel und Ihre Region.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
auto speechConfig = SpeechConfig::FromSubscription("YourSpeechKey", "YourSpeechRegion");
Sie können SpeechConfig
auf verschiedene Arten initialisieren:
- Verwenden Sie einen Endpunkt, und übergeben Sie einen Speech-Dienstendpunkt. Ein Schlüssel oder Autorisierungstoken ist optional.
- Verwenden Sie einen Host, und übergeben Sie eine Hostadresse. Ein Schlüssel oder Autorisierungstoken ist optional.
- Verwenden Sie ein Autorisierungstoken mit der zugeordneten Region/dem zugehörigen Standort.
Hinweis
Eine Konfiguration ist immer erforderlich. Dabei spielt es keine Rolle, ob Sie eine Spracherkennung, eine Sprachsynthese, eine Übersetzung oder eine Absichtserkennung durchführen möchten.
Schnellstart: Erkennen von Spracheingaben per Mikrofon
Um Sprache über das Mikrofon Ihres Geräts zu erkennen, erstellen Sie mithilfe von der Elementfunktion FromDefaultMicrophoneInput()
eine AudioConfig
-Instanz. Initialisieren Sie dann das Objekt SpeechRecognizer
, indem Sie audioConfig
und config
übergeben.
using namespace Microsoft::CognitiveServices::Speech::Audio;
auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
cout << "Speak into your microphone." << std::endl;
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;
Wenn Sie ein bestimmtes Audioeingabegerät verwenden möchten, müssen Sie in AudioConfig
die Geräte-ID angeben. Informationen zum Abrufen der Geräte-ID finden Sie unter Auswählen eines Audioeingabegeräts mit dem Speech SDK.
Erkennen von Sprache aus einer Datei
Wenn Sie Sprache aus einer Audiodatei erkennen möchten, anstatt ein Mikrofon zu verwenden, müssen Sie trotzdem eine AudioConfig
-Instanz erstellen. Allerdings rufen Sie FromDefaultMicrophoneInput()
nicht auf. Sie rufen FromWavFileInput()
auf und übergeben den Dateipfad:
using namespace Microsoft::CognitiveServices::Speech::Audio;
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;
Erkennen von Sprache mithilfe der Recognizer-Klasse
Von der Klasse SpeechRecognizer für das Speech SDK für C++ werden verschiedene Methoden für die Spracherkennung verfügbar gemacht.
Einzelerkennung
Bei der Einzelerkennung wird eine einzelne Äußerung asynchron erkannt. Zur Erkennung des Endes einer einzelnen Äußerung wird auf Stille am Ende gelauscht oder gewartet, bis maximal 15 Sekunden an Audiodaten verarbeitet wurden. Das folgende Beispiel zeigt eine asynchrone Einzelerkennung mit RecognizeOnceAsync
:
auto result = speechRecognizer->RecognizeOnceAsync().get();
Sie müssen etwas Code schreiben, um das Ergebnis zu behandeln. In diesem Beispiel wird result->Reason
ausgewertet und:
- Das Erkennungsergebnis wird ausgegeben:
ResultReason::RecognizedSpeech
. - Wurde kein Erkennungstreffer gefunden, wird der Benutzer davon in Kenntnis gesetzt:
ResultReason::NoMatch
. - Ist ein Fehler aufgetreten, wird die Fehlermeldung ausgegeben:
ResultReason::Canceled
.
switch (result->Reason)
{
case ResultReason::RecognizedSpeech:
cout << "We recognized: " << result->Text << std::endl;
break;
case ResultReason::NoMatch:
cout << "NOMATCH: Speech could not be recognized." << std::endl;
break;
case 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;
}
}
break;
default:
break;
}
Kontinuierliche Erkennung
Die kontinuierliche Erkennung ist etwas komplexer als die Einzelerkennung. Für die kontinuierliche Erkennung müssen die Ereignisse Recognizing
, Recognized
und Canceled
abonniert werden, um die Erkennungsergebnisse zu erhalten. Zum Beenden der Erkennung muss StopContinuousRecognitionAsync aufgerufen werden. Im folgenden Beispiel wird eine kontinuierliche Erkennung an einer Audioeingabedatei durchgeführt.
Beginnen Sie mit dem Definieren der Eingabe und dem Initialisieren von SpeechRecognizer
:
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
Als Nächstes erstellen Sie eine Variable, um den Zustand der Spracherkennung zu verwalten. Deklarieren Sie promise<void>
, da Sie zu Beginn der Erkennung sicher davon ausgehen können, dass diese nicht abgeschlossen ist:
promise<void> recognitionEnd;
Abonnieren Sie als Nächstes die Ereignisse, die von SpeechRecognizer
gesendet werden:
Recognizing
: Signal für Ereignisse mit Erkennungszwischenergebnissen.Recognized
: Signal für Ereignisse mit Endergebnissen der Erkennung, was auf einen erfolgreichen Erkennungsversuch hindeutet.SessionStopped
: Signal für Ereignisse, die das Ende einer Erkennungssitzung (bzw. eines Erkennungsvorgangs) anzeigen.Canceled
: Signal für Ereignisse mit Ergebnissen einer abgebrochenen Erkennung. Diese Ergebnisse weisen auf einen Erkennungsversuch hin, der aufgrund einer direkten Abbruchanforderung abgebrochen wurde. Alternativ weisen sie auf einen Datentransport- oder Protokollfehler hin.
speechRecognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
{
cout << "Recognizing:" << e.Result->Text << std::endl;
});
speechRecognizer->Recognized.Connect([](const SpeechRecognitionEventArgs& e)
{
if (e.Result->Reason == ResultReason::RecognizedSpeech)
{
cout << "RECOGNIZED: Text=" << e.Result->Text
<< " (text could not be translated)" << std::endl;
}
else if (e.Result->Reason == ResultReason::NoMatch)
{
cout << "NOMATCH: Speech could not be recognized." << std::endl;
}
});
speechRecognizer->Canceled.Connect([&recognitionEnd](const SpeechRecognitionCanceledEventArgs& e)
{
cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
if (e.Reason == CancellationReason::Error)
{
cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << "\n"
<< "CANCELED: ErrorDetails=" << e.ErrorDetails << "\n"
<< "CANCELED: Did you set the speech resource key and region values?" << std::endl;
recognitionEnd.set_value(); // Notify to stop recognition.
}
});
speechRecognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
{
cout << "Session stopped.";
recognitionEnd.set_value(); // Notify to stop recognition.
});
Rufen Sie nach Abschluss der Einrichtung StartContinuousRecognitionAsync
auf, um die Erkennung zu starten:
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer->StartContinuousRecognitionAsync().get();
// Waits for recognition end.
recognitionEnd.get_future().get();
// Stops recognition.
speechRecognizer->StopContinuousRecognitionAsync().get();
Ändern der Quellsprache
Eine gängige Aufgabe für die Spracherkennung ist die Angabe der Eingabesprache (Ausgangssprache). Das folgende Beispiel zeigt, wie Sie die Eingabesprache zu Deutsch ändern. Suchen Sie in Ihrem Code Ihre SpeechConfig
-Instanz, und fügen Sie direkt darunter die folgende Zeile hinzu:
speechConfig->SetSpeechRecognitionLanguage("de-DE");
SetSpeechRecognitionLanguage
ist ein Parameter, der eine Zeichenfolge als Argument akzeptiert. Eine Liste unterstützter Gebietsschemas finden Sie unter Sprach- und Stimmunterstützung für den Speech-Dienst.
Sprachenerkennung
Sie können die Sprachidentifikation mit Spracherkennung verwenden, wenn Sie die Sprache einer Audioquelle identifizieren und diese dann in Text transkribieren müssen.
Ein vollständiges Codebeispiel finden Sie unter Sprachenerkennung.
Verwenden Sie einen benutzerdefinierten Endpunkt
Mit Custom Speech können Sie eigene Daten hochladen, ein benutzerdefiniertes Modell testen und trainieren, die Genauigkeit zwischen Modellen vergleichen und ein Modell auf einem benutzerdefinierten Endpunkt bereitstellen. Das folgende Beispiel zeigt, wie Sie einen benutzerdefinierten Endpunkt festlegen.
auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);
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.
Weitere Informationen zu Containern finden Sie unter Host-URLs beim Installieren und Ausführen von Speech-Containern mit Docker.
Semantische Segmentierung
Die semantische Segmentierung ist eine Strategie zur Spracherkennung, die darauf ausgelegt ist, Probleme im Zusammenhang mit der stillebasierten Segmentierung zu mindern:
- Untersegmentierung: Wenn Benutzer eine lange Zeit ohne Pausen sprechen, kann eine lange Textsequenz ohne Unterbrechungen („Textwand“) entstehen, was die Lesbarkeit erheblich beeinträchtigt.
- Übersegmentierung: Wenn ein Benutzer kurze Zeit pausiert, segmentiert der Stilleerkennungsmechanismus ggf. falsch.
Anstatt sich auf Stilletimeouts zu verlassen, segmentiert die semantische Segmentierung und gibt endgültige Ergebnisse zurück, wenn Satzzeichen (wie . oder ?) erkannt werden. Dies verbessert die Benutzererfahrung mit qualitativ hochwertigeren, semantisch vollständigen Segmenten und verhindert lange Zwischenergebnisse.
Um die semantische Segmentierung zu verwenden, müssen Sie die folgende Eigenschaft für die SpeechConfig
-Instanz festlegen, die zum Erstellen von SpeechRecognizer
verwendet wird:
speechConfig->SetProperty(PropertyId::Speech_SegmentationStrategy, "Semantic");
Einige der Einschränkungen der semantischen Segmentierung sind:
- Sie benötigen das Speech SDK, Version 1.41 oder höher, um die semantische Segmentierung zu verwenden.
- Die semantische Segmentierung ist nur für die Verwendung in Continuous Recognition vorgesehen. Dazu gehören Szenarios wie Transkription und Untertitelerstellung. Sie sollte nicht im einfachen Erkennungs- und Diktiermodus verwendet werden.
- Die semantische Segmentierung ist nicht für alle Sprachen und Gebietsschemas verfügbar. Derzeit ist die semantische Segmentierung nur für englischsprachige Gebietsschemas (en-US, en-GB, en-IN und en-AU) verfügbar.
- Die semantische Segmentierung unterstützt noch keine Konfidenzbewertungen und NBest-Listen. Daher wird die semantische Segmentierung nicht empfohlen, wenn Sie Konfidenzbewertungen oder NBest-Listen verwenden.
Referenzdokumentation | Paket (Go) | Zusätzliche Beispiele auf GitHub
In dieser Schrittanleitung erfahren Sie, wie Sie den Azure KI Speech für die Echtzeitkonvertierung von Sprache in Text verwenden. Die Echtzeit-Spracherkennung eignet sich ideal für Anwendungen, die eine sofortige Transkription erfordern, z. B. Diktate, Callcenterunterstützung und Untertitelung von Livebesprechungen.
Informationen zum Einrichten der Umgebung für eine Beispielanwendung finden Sie unter Schnellstart: Erkennen von Sprache und Konvertieren von Sprache in Text.
Erkennen von Sprache-in-Text von einem Mikrofon
- Erstellen Sie eine Speech-Ressource im Azure-Portal. Abrufen des Speech-Ressourcenschlüssel und des Endpunkts.
- Verwenden Sie das folgende Codebeispiel, um die Spracherkennung über Ihr standardmäßiges Gerätemikrofon durchzuführen. Ersetzen Sie
YourSpeechKey
undYourSpeechRegion
durch Ihren Speech-Ressourcenschlüssel und Ihre Region. Wenn Sie das Skript ausführen, wird eine Erkennungssitzung mit Ihrem Standardmikrofon gestartet und Text ausgegeben:
package main
import (
"bufio"
"fmt"
"os"
"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)
func sessionStartedHandler(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Started (ID=", event.SessionID, ")")
}
func sessionStoppedHandler(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Stopped (ID=", event.SessionID, ")")
}
func recognizingHandler(event speech.SpeechRecognitionEventArgs) {
defer event.Close()
fmt.Println("Recognizing:", event.Result.Text)
}
func recognizedHandler(event speech.SpeechRecognitionEventArgs) {
defer event.Close()
fmt.Println("Recognized:", event.Result.Text)
}
func cancelledHandler(event speech.SpeechRecognitionCanceledEventArgs) {
defer event.Close()
fmt.Println("Received a cancellation: ", event.ErrorDetails)
fmt.Println("Did you set the speech resource key and region values?")
}
func main() {
subscription := "YourSpeechKey"
region := "YourSpeechRegion"
audioConfig, err := audio.NewAudioConfigFromDefaultMicrophoneInput()
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer audioConfig.Close()
config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer config.Close()
speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer speechRecognizer.Close()
speechRecognizer.SessionStarted(sessionStartedHandler)
speechRecognizer.SessionStopped(sessionStoppedHandler)
speechRecognizer.Recognizing(recognizingHandler)
speechRecognizer.Recognized(recognizedHandler)
speechRecognizer.Canceled(cancelledHandler)
speechRecognizer.StartContinuousRecognitionAsync()
defer speechRecognizer.StopContinuousRecognitionAsync()
bufio.NewReader(os.Stdin).ReadBytes('\n')
}
Führen Sie die folgenden Befehle aus, um eine Datei namens go.mod zu erstellen, die mit auf GitHub gehosteten Komponenten verknüpft ist:
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
Erstellen Sie nun den Code, und führen Sie ihn aus:
go build
go run quickstart
Ausführliche Informationen finden Sie im Referenzinhalt zu der SpeechConfig
-Klasse und der SpeechRecognizer
-Klasse.
Erkennen von Sprache-in-Text aus einer Audiodatei
Verwenden Sie das folgende Beispiel, um die Spracherkennung mit einer Audiodatei durchzuführen. Ersetzen Sie YourSpeechKey
und YourSpeechRegion
durch Ihren Speech-Ressourcenschlüssel und Ihre Region. Ersetzen Sie außerdem die Variable file
durch einen Pfad zu einer WAV-Datei. Wenn Sie das Skript ausführen, erkennt es die Sprache aus der Datei und gibt das Textergebnis aus:
package main
import (
"fmt"
"time"
"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)
func main() {
subscription := "YourSpeechKey"
region := "YourSpeechRegion"
file := "path/to/file.wav"
audioConfig, err := audio.NewAudioConfigFromWavFileInput(file)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer audioConfig.Close()
config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer config.Close()
speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer speechRecognizer.Close()
speechRecognizer.SessionStarted(func(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Started (ID=", event.SessionID, ")")
})
speechRecognizer.SessionStopped(func(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Stopped (ID=", event.SessionID, ")")
})
task := speechRecognizer.RecognizeOnceAsync()
var outcome speech.SpeechRecognitionOutcome
select {
case outcome = <-task:
case <-time.After(5 * time.Second):
fmt.Println("Timed out")
return
}
defer outcome.Close()
if outcome.Error != nil {
fmt.Println("Got an error: ", outcome.Error)
}
fmt.Println("Got a recognition!")
fmt.Println(outcome.Result.Text)
}
Führen Sie die folgenden Befehle aus, um eine Datei namens go.mod zu erstellen, die mit auf GitHub gehosteten Komponenten verknüpft ist:
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
Erstellen Sie nun den Code, und führen Sie ihn aus:
go build
go run quickstart
Ausführliche Informationen finden Sie im Referenzinhalt zu der SpeechConfig
-Klasse und der SpeechRecognizer
-Klasse.
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.
Weitere Informationen zu Containern finden Sie unter Host-URLs beim Installieren und Ausführen von Speech-Containern mit Docker.
Referenzdokumentation | Zusätzliche Beispiele auf GitHub
In dieser Schrittanleitung erfahren Sie, wie Sie den Azure KI Speech für die Echtzeitkonvertierung von Sprache in Text verwenden. Die Echtzeit-Spracherkennung eignet sich ideal für Anwendungen, die eine sofortige Transkription erfordern, z. B. Diktate, Callcenterunterstützung und Untertitelung von Livebesprechungen.
Informationen zum Einrichten der Umgebung für eine Beispielanwendung finden Sie unter Schnellstart: Erkennen von Sprache und Konvertieren von Sprache in Text.
Erstellen einer Speech-Konfigurationsinstanz
Um den Speech-Dienst über das Speech SDK aufrufen zu können, muss eine SpeechConfig-Instanz erstellt werden. Diese Klasse enthält Informationen zu Ihrem Abonnement. Hierzu zählen etwa Ihr Schlüssel und die zugeordnete Region, der Endpunkt, der Host oder das Autorisierungstoken.
- Erstellen Sie eine Speech-Ressource im Azure-Portal. Abrufen des Speech-Ressourcenschlüssel und des Endpunkts.
- Erstellen Sie mithilfe Ihres Speech-Schlüssels und der Speech-Region eine
SpeechConfig
-Instanz.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
}
}
Sie können SpeechConfig
auf verschiedene Arten initialisieren:
- Verwenden Sie einen Endpunkt, und übergeben Sie einen Speech-Dienstendpunkt. Ein Schlüssel oder Autorisierungstoken ist optional.
- Verwenden Sie einen Host, und übergeben Sie eine Hostadresse. Ein Schlüssel oder Autorisierungstoken ist optional.
- Verwenden Sie ein Autorisierungstoken mit der zugeordneten Region/dem zugehörigen Standort.
Hinweis
Eine Konfiguration ist immer erforderlich. Dabei spielt es keine Rolle, ob Sie eine Spracherkennung, eine Sprachsynthese, eine Übersetzung oder eine Absichtserkennung durchführen möchten.
Erkennen von Spracheingaben per Mikrofon
Um Sprache über das Mikrofon Ihres Geräts zu erkennen, erstellen Sie mithilfe der Methode fromDefaultMicrophoneInput()
eine AudioConfig
-Instanz. Initialisieren Sie dann das Objekt SpeechRecognizer
, indem Sie audioConfig
und config
übergeben.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
fromMic(speechConfig);
}
public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
System.out.println("Speak into your microphone.");
Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult speechRecognitionResult = task.get();
System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
}
}
Wenn Sie ein bestimmtes Audioeingabegerät verwenden möchten, müssen Sie in AudioConfig
die Geräte-ID angeben. Informationen zum Abrufen der Geräte-ID finden Sie unter Auswählen eines Audioeingabegeräts mit dem Speech SDK.
Erkennen von Sprache aus einer Datei
Wenn Sie Sprache aus einer Audiodatei erkennen möchten, anstatt ein Mikrofon zu verwenden, müssen Sie trotzdem eine AudioConfig
-Instanz erstellen. Allerdings rufen Sie FromDefaultMicrophoneInput()
nicht auf. Sie rufen fromWavFileInput()
auf und übergeben den Dateipfad:
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
fromFile(speechConfig);
}
public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult speechRecognitionResult = task.get();
System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
}
}
Umgang mit Fehlern
Die vorherigen Beispiele rufen einfach den erkannten Text mithilfe von speechRecognitionResult.getText()
ab. Um Fehler und andere Antworten zu behandeln, müssen Sie Code schreiben, der das Ergebnis verarbeitet. Im folgenden Beispiel wird speechRecognitionResult.getReason()
ausgewertet und:
- Das Erkennungsergebnis wird ausgegeben:
ResultReason.RecognizedSpeech
. - Wurde kein Erkennungstreffer gefunden, wird der Benutzer davon in Kenntnis gesetzt:
ResultReason.NoMatch
. - Ist ein Fehler aufgetreten, wird die Fehlermeldung ausgegeben:
ResultReason.Canceled
.
switch (speechRecognitionResult.getReason()) {
case ResultReason.RecognizedSpeech:
System.out.println("We recognized: " + speechRecognitionResult.getText());
exitCode = 0;
break;
case ResultReason.NoMatch:
System.out.println("NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled: {
CancellationDetails cancellation = CancellationDetails.fromResult(speechRecognitionResult);
System.out.println("CANCELED: Reason=" + cancellation.getReason());
if (cancellation.getReason() == CancellationReason.Error) {
System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
System.out.println("CANCELED: Did you set the speech resource key and region values?");
}
}
break;
}
Verwenden kontinuierlicher Erkennung
In den vorherigen Beispielen wird Einzelerkennung verwendet, bei der eine einzelne Äußerung erkannt wird. Zur Erkennung des Endes einer einzelnen Äußerung wird auf Stille am Ende gelauscht oder gewartet, bis maximal 15 Sekunden an Audiodaten verarbeitet wurden.
Im Gegensatz dazu verwenden Sie kontinuierliche Erkennung, wenn Sie steuern möchten, wann die Erkennung beendet wird. Für die kontinuierliche Erkennung müssen die Ereignisse recognizing
, recognized
und canceled
abonniert werden, um die Erkennungsergebnisse zu erhalten. Zum Beenden der Erkennung muss stopContinuousRecognitionAsync
aufgerufen werden. Im folgenden Beispiel wird eine kontinuierliche Erkennung für eine Audioeingabedatei durchgeführt.
Beginnen Sie mit dem Definieren der Eingabe und dem Initialisieren von SpeechRecognizer
:
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(config, audioConfig);
Als Nächstes erstellen Sie eine Variable, um den Zustand der Spracherkennung zu verwalten. Deklarieren Sie eine Semaphore
-Instanz im Klassenbereich:
private static Semaphore stopTranslationWithFileSemaphore;
Abonnieren Sie als Nächstes die Ereignisse, die von SpeechRecognizer
gesendet werden:
recognizing
: Signal für Ereignisse mit Erkennungszwischenergebnissen.recognized
: Signal für Ereignisse mit Endergebnissen der Erkennung, was auf einen erfolgreichen Erkennungsversuch hindeutet.sessionStopped
: Signal für Ereignisse, die das Ende einer Erkennungssitzung (bzw. eines Erkennungsvorgangs) anzeigen.canceled
: Signal für Ereignisse mit Ergebnissen einer abgebrochenen Erkennung. Diese Ergebnisse weisen auf einen Erkennungsversuch hin, der aufgrund einer direkten Abbruchanforderung abgebrochen wurde. Alternativ weisen sie auf einen Datentransport- oder Protokollfehler hin.
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);
speechRecognizer.recognizing.addEventListener((s, e) -> {
System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});
speechRecognizer.recognized.addEventListener((s, e) -> {
if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
System.out.println("RECOGNIZED: Text=" + e.getResult().getText());
}
else if (e.getResult().getReason() == ResultReason.NoMatch) {
System.out.println("NOMATCH: Speech could not be recognized.");
}
});
speechRecognizer.canceled.addEventListener((s, e) -> {
System.out.println("CANCELED: Reason=" + e.getReason());
if (e.getReason() == CancellationReason.Error) {
System.out.println("CANCELED: ErrorCode=" + e.getErrorCode());
System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails());
System.out.println("CANCELED: Did you set the speech resource key and region values?");
}
stopTranslationWithFileSemaphore.release();
});
speechRecognizer.sessionStopped.addEventListener((s, e) -> {
System.out.println("\n Session stopped event.");
stopTranslationWithFileSemaphore.release();
});
Rufen Sie nach Abschluss der Einrichtung startContinuousRecognitionAsync
auf, um die Erkennung zu starten:
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer.startContinuousRecognitionAsync().get();
// Waits for completion.
stopTranslationWithFileSemaphore.acquire();
// Stops recognition.
speechRecognizer.stopContinuousRecognitionAsync().get();
Ändern der Quellsprache
Eine gängige Aufgabe für die Spracherkennung ist die Angabe der Eingabesprache (Ausgangssprache). Das folgende Beispiel zeigt, wie Sie die Eingabesprache zu Französisch ändern. Suchen Sie in Ihrem Code Ihre SpeechConfig
-Instanz, und fügen Sie direkt darunter die folgende Zeile hinzu:
config.setSpeechRecognitionLanguage("fr-FR");
setSpeechRecognitionLanguage
ist ein Parameter, der eine Zeichenfolge als Argument akzeptiert. Beziehen Sie sich auf die Liste der unterstützten Gebietsschemas für die Spracherkennung.
Sprachenerkennung
Sie können die Sprachidentifikation mit Spracherkennung verwenden, wenn Sie die Sprache einer Audioquelle identifizieren und diese dann in Text transkribieren müssen.
Ein vollständiges Codebeispiel finden Sie unter Sprachenerkennung.
Verwenden Sie einen benutzerdefinierten Endpunkt
Mit Custom Speech können Sie eigene Daten hochladen, ein benutzerdefiniertes Modell testen und trainieren, die Genauigkeit zwischen Modellen vergleichen und ein Modell auf einem benutzerdefinierten Endpunkt bereitstellen. Das folgende Beispiel zeigt, wie Sie einen benutzerdefinierten Endpunkt festlegen:
SpeechConfig speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);
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.
Weitere Informationen zu Containern finden Sie unter Host-URLs beim Installieren und Ausführen von Speech-Containern mit Docker.
Semantische Segmentierung
Die semantische Segmentierung ist eine Strategie zur Spracherkennung, die darauf ausgelegt ist, Probleme im Zusammenhang mit der stillebasierten Segmentierung zu mindern:
- Untersegmentierung: Wenn Benutzer eine lange Zeit ohne Pausen sprechen, kann eine lange Textsequenz ohne Unterbrechungen („Textwand“) entstehen, was die Lesbarkeit erheblich beeinträchtigt.
- Übersegmentierung: Wenn ein Benutzer kurze Zeit pausiert, segmentiert der Stilleerkennungsmechanismus ggf. falsch.
Anstatt sich auf Stilletimeouts zu verlassen, segmentiert die semantische Segmentierung und gibt endgültige Ergebnisse zurück, wenn Satzzeichen (wie . oder ?) erkannt werden. Dies verbessert die Benutzererfahrung mit qualitativ hochwertigeren, semantisch vollständigen Segmenten und verhindert lange Zwischenergebnisse.
Um die semantische Segmentierung zu verwenden, müssen Sie die folgende Eigenschaft für die SpeechConfig
-Instanz festlegen, die zum Erstellen von SpeechRecognizer
verwendet wird:
speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");
Einige der Einschränkungen der semantischen Segmentierung sind:
- Sie benötigen das Speech SDK, Version 1.41 oder höher, um die semantische Segmentierung zu verwenden.
- Die semantische Segmentierung ist nur für die Verwendung in Continuous Recognition vorgesehen. Dazu gehören Szenarios wie Transkription und Untertitelerstellung. Sie sollte nicht im einfachen Erkennungs- und Diktiermodus verwendet werden.
- Die semantische Segmentierung ist nicht für alle Sprachen und Gebietsschemas verfügbar. Derzeit ist die semantische Segmentierung nur für englischsprachige Gebietsschemas (en-US, en-GB, en-IN und en-AU) verfügbar.
- Die semantische Segmentierung unterstützt noch keine Konfidenzbewertungen und NBest-Listen. Daher wird die semantische Segmentierung nicht empfohlen, wenn Sie Konfidenzbewertungen oder NBest-Listen verwenden.
Referenzdokumentation | Paket (npm) | Zusätzliche Beispiele auf GitHub | Quellcode der Bibliothek
In dieser Schrittanleitung erfahren Sie, wie Sie den Azure KI Speech für die Echtzeitkonvertierung von Sprache in Text verwenden. Die Echtzeit-Spracherkennung eignet sich ideal für Anwendungen, die eine sofortige Transkription erfordern, z. B. Diktate, Callcenterunterstützung und Untertitelung von Livebesprechungen.
Informationen zum Einrichten der Umgebung für eine Beispielanwendung finden Sie unter Schnellstart: Erkennen von Sprache und Konvertieren von Sprache in Text.
Erstellen einer Speech-Konfigurationsinstanz
Um den Speech-Dienst über das Speech SDK aufrufen zu können, muss eine SpeechConfig
-Instanz erstellt werden. Diese Klasse enthält Informationen zu Ihrem Abonnement. Hierzu zählen etwa Ihr Schlüssel und die zugeordnete Region, der Endpunkt, der Host oder das Autorisierungstoken.
- Erstellen Sie eine Speech-Ressource im Azure-Portal. Abrufen des Speech-Ressourcenschlüssel und des Endpunkts.
- Erstellen Sie mithilfe des folgenden Codes eine
SpeechConfig
-Instanz. Ersetzen SieYourSpeechKey
undYourSpeechRegion
durch Ihren Speech-Ressourcenschlüssel und Ihre Region.
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
Sie können SpeechConfig
auf verschiedene Arten initialisieren:
- Verwenden Sie einen Endpunkt, und übergeben Sie einen Speech-Dienstendpunkt. Ein Schlüssel oder Autorisierungstoken ist optional.
- Verwenden Sie einen Host, und übergeben Sie eine Hostadresse. Ein Schlüssel oder Autorisierungstoken ist optional.
- Verwenden Sie ein Autorisierungstoken mit der zugeordneten Region/dem zugehörigen Standort.
Hinweis
Eine Konfiguration ist immer erforderlich. Dabei spielt es keine Rolle, ob Sie eine Spracherkennung, eine Sprachsynthese, eine Übersetzung oder eine Absichtserkennung durchführen möchten.
Schnellstart: Erkennen von Spracheingaben per Mikrofon
Die Spracherkennung über ein Mikrofon wird in Node.js nicht unterstützt. Sie wird nur in einer browserbasierten JavaScript-Umgebung unterstützt. Weitere Informationen finden Sie im React-Beispiel und unter Implementierung der Spracherkennung über ein Mikrofon auf GitHub. Das React-Beispiel zeigt Entwurfsmuster für den Austausch und die Verwaltung von Authentifizierungstoken. Außerdem wird die Erfassung von Audiodaten über ein Mikrofon oder aus einer Datei für die Konvertierung von Sprache in Text veranschaulicht.
Hinweis
Wenn Sie ein bestimmtes Audioeingabegerät verwenden möchten, müssen Sie in AudioConfig
die Geräte-ID angeben. Informationen zum Abrufen der Geräte-ID finden Sie unter Auswählen eines Audioeingabegeräts mit dem Speech SDK.
Erkennen von Sprache aus einer Datei
Um die Sprache aus einer Audiodatei zu erkennen, erstellen Sie mithilfe der Methode fromWavFileInput()
eine AudioConfig
-Instanz, die ein Buffer
-Objekt akzeptiert. Initialisieren Sie dann SpeechRecognizer
, indem Sie audioConfig
und speechConfig
übergeben.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
function fromFile() {
let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
speechRecognizer.recognizeOnceAsync(result => {
console.log(`RECOGNIZED: Text=${result.text}`);
speechRecognizer.close();
});
}
fromFile();
Erkennen von Sprache aus einem In-Memory-Stream (Arbeitsspeicherdatenstrom)
In vielen Anwendungsfällen stammen Ihre Audiodaten wahrscheinlich aus Azure Blob Storage. Oder sie befinden sich bereits im Arbeitsspeicher als ArrayBuffer
oder eine ähnliche Rohdatenstruktur. Der folgende Code führt folgende Aktionen aus:
- Erstellt einen Pushstream mithilfe von
createPushStream()
. - Liest eine WAV-Datei mithilfe von
fs.createReadStream
zu Demonstrationszwecken. Wenn Sie bereits über Audiodaten imArrayBuffer
verfügen, können Sie direkt zum Schreiben des Inhalts in den Eingabestream springen. - Erstellt eine Audiokonfiguration mithilfe des Pushstreams.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
function fromStream() {
let pushStream = sdk.AudioInputStream.createPushStream();
fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
pushStream.write(arrayBuffer.slice());
}).on('end', function() {
pushStream.close();
});
let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
speechRecognizer.recognizeOnceAsync(result => {
console.log(`RECOGNIZED: Text=${result.text}`);
speechRecognizer.close();
});
}
fromStream();
Bei der Verwendung eines Pushstreams als Eingabe wird davon ausgegangen, dass es sich bei den Audiodaten um unformatierte Pulscodemodulationsdaten (PCM) handelt, die jegliche Header überspringen. Die API funktioniert in bestimmten Fällen auch dann noch, wenn der Header nicht übersprungen wird. Um die besten Ergebnisse zu erzielen, empfiehlt es sich jedoch, eine Logik zum Lesen der Header zu implementieren, sodass fs
am Anfang der Audiodaten beginnt.
Umgang mit Fehlern
Die vorherigen Beispiele rufen einfach den erkannten Text aus der Eigenschaft result.text
ab. Um Fehler und andere Antworten zu behandeln, müssen Sie Code schreiben, der das Ergebnis verarbeitet. Der folgende Code wertet die Eigenschaft result.reason
aus und geht wie folgt vor:
- Das Erkennungsergebnis wird ausgegeben:
ResultReason.RecognizedSpeech
. - Wurde kein Erkennungstreffer gefunden, wird der Benutzer davon in Kenntnis gesetzt:
ResultReason.NoMatch
. - Ist ein Fehler aufgetreten, wird die Fehlermeldung ausgegeben:
ResultReason.Canceled
.
switch (result.reason) {
case sdk.ResultReason.RecognizedSpeech:
console.log(`RECOGNIZED: Text=${result.text}`);
break;
case sdk.ResultReason.NoMatch:
console.log("NOMATCH: Speech could not be recognized.");
break;
case sdk.ResultReason.Canceled:
const cancellation = sdk.CancellationDetails.fromResult(result);
console.log(`CANCELED: Reason=${cancellation.reason}`);
if (cancellation.reason == sdk.CancellationReason.Error) {
console.log(`CANCELED: ErrorCode=${cancellation.ErrorCode}`);
console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
console.log("CANCELED: Did you set the speech resource key and region values?");
}
break;
}
Verwenden kontinuierlicher Erkennung
In den vorherigen Beispielen wird Einzelerkennung verwendet, bei der eine einzelne Äußerung erkannt wird. Zur Erkennung des Endes einer einzelnen Äußerung wird auf Stille am Ende gelauscht oder gewartet, bis maximal 15 Sekunden an Audiodaten verarbeitet wurden.
Im Gegensatz dazu können Sie kontinuierliche Erkennung verwenden, wenn Sie steuern möchten, wann die Erkennung beendet wird. Für die kontinuierliche Erkennung müssen die Ereignisse Recognizing
, Recognized
und Canceled
abonniert werden, um die Erkennungsergebnisse zu erhalten. Um die Erkennung zu beenden, müssen Sie [stopContinuousRecognitionAsync
] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-stopcontinuousrecognitionasync) aufrufen. Im folgenden Beispiel wird eine kontinuierliche Erkennung für eine Audioeingabedatei durchgeführt.
Beginnen Sie mit dem Definieren der Eingabe und dem Initialisieren von SpeechRecognizer
:
const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
Abonnieren Sie anschließend die von SpeechRecognizer
gesendeten Ereignisse:
recognizing
: Signal für Ereignisse mit Erkennungszwischenergebnissen.recognized
: Signal für Ereignisse mit Endergebnissen der Erkennung, was auf einen erfolgreichen Erkennungsversuch hindeutet.sessionStopped
: Signal für Ereignisse, die das Ende einer Erkennungssitzung (bzw. eines Erkennungsvorgangs) anzeigen.canceled
: Signal für Ereignisse mit Ergebnissen einer abgebrochenen Erkennung. Diese Ergebnisse weisen auf einen Erkennungsversuch hin, der aufgrund einer direkten Abbruchanforderung abgebrochen wurde. Alternativ weisen sie auf einen Datentransport- oder Protokollfehler hin.
speechRecognizer.recognizing = (s, e) => {
console.log(`RECOGNIZING: Text=${e.result.text}`);
};
speechRecognizer.recognized = (s, e) => {
if (e.result.reason == sdk.ResultReason.RecognizedSpeech) {
console.log(`RECOGNIZED: Text=${e.result.text}`);
}
else if (e.result.reason == sdk.ResultReason.NoMatch) {
console.log("NOMATCH: Speech could not be recognized.");
}
};
speechRecognizer.canceled = (s, e) => {
console.log(`CANCELED: Reason=${e.reason}`);
if (e.reason == sdk.CancellationReason.Error) {
console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
console.log("CANCELED: Did you set the speech resource key and region values?");
}
speechRecognizer.stopContinuousRecognitionAsync();
};
speechRecognizer.sessionStopped = (s, e) => {
console.log("\n Session stopped event.");
speechRecognizer.stopContinuousRecognitionAsync();
};
Wenn alles konfiguriert wurde, rufen Sie [startContinuousRecognitionAsync
] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-startkeywordrecognitionasync) auf, um die Erkennung zu starten.
speechRecognizer.startContinuousRecognitionAsync();
// Make the following call at some point to stop recognition:
// speechRecognizer.stopContinuousRecognitionAsync();
Ändern der Quellsprache
Eine gängige Aufgabe für die Spracherkennung ist die Angabe der Eingabesprache (Ausgangssprache). Das folgende Beispiel zeigt, wie Sie die Eingabesprache zu Italienisch ändern. Suchen Sie in Ihrem Code Ihre SpeechConfig
-Instanz, und fügen Sie direkt darunter die folgende Zeile hinzu:
speechConfig.speechRecognitionLanguage = "it-IT";
Von der Eigenschaft speechRecognitionLanguage
wird eine Zeichenfolge im Format „Sprache-Gebietsschema“ erwartet. Eine Liste unterstützter Gebietsschemas finden Sie unter Sprach- und Stimmunterstützung für den Speech-Dienst.
Sprachenerkennung
Sie können die Sprachidentifikation mit Spracherkennung verwenden, wenn Sie die Sprache einer Audioquelle identifizieren und diese dann in Text transkribieren müssen.
Ein vollständiges Codebeispiel finden Sie unter Sprachenerkennung.
Verwenden Sie einen benutzerdefinierten Endpunkt
Mit Custom Speech können Sie eigene Daten hochladen, ein benutzerdefiniertes Modell testen und trainieren, die Genauigkeit zwischen Modellen vergleichen und ein Modell auf einem benutzerdefinierten Endpunkt bereitstellen. Das folgende Beispiel zeigt, wie Sie einen benutzerdefinierten Endpunkt festlegen.
var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);
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.
Weitere Informationen zu Containern finden Sie unter Host-URLs beim Installieren und Ausführen von Speech-Containern mit Docker.
Referenzdokumentation | Paket (Download) | Zusätzliche Beispiele auf GitHub
In dieser Schrittanleitung erfahren Sie, wie Sie den Azure KI Speech für die Echtzeitkonvertierung von Sprache in Text verwenden. Die Echtzeit-Spracherkennung eignet sich ideal für Anwendungen, die eine sofortige Transkription erfordern, z. B. Diktate, Callcenterunterstützung und Untertitelung von Livebesprechungen.
Informationen zum Einrichten der Umgebung für eine Beispielanwendung finden Sie unter Schnellstart: Erkennen von Sprache und Konvertieren von Sprache in Text.
Installieren von Speech SDK und Beispielen
Das Repository Azure-Samples/cognitive-services-speech-sdk enthält Beispiele in Objective-C für iOS und Mac. Wählen Sie einen Link aus, um Installationsanweisungen für die einzelnen Beispiele anzuzeigen:
- Erkennen von Spracheingaben per Mikrofon in Objective-C unter macOS
- Erkennen von Spracheingaben in Objective-C unter iOS
- Weitere Beispiele für Objective-C auf iOS
Weitere Informationen finden Sie in der Referenz zum Speech SDK für Objective-C.
Verwenden Sie einen benutzerdefinierten Endpunkt
Mit Custom Speech können Sie eigene Daten hochladen, ein benutzerdefiniertes Modell testen und trainieren, die Genauigkeit zwischen Modellen vergleichen und ein Modell auf einem benutzerdefinierten Endpunkt bereitstellen. Das folgende Beispiel zeigt, wie Sie einen benutzerdefinierten Endpunkt festlegen:
SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:"YourSubscriptionKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];
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.
Weitere Informationen zu Containern finden Sie unter Host-URLs beim Installieren und Ausführen von Speech-Containern mit Docker.
Referenzdokumentation | Paket (Download) | Zusätzliche Beispiele auf GitHub
In dieser Schrittanleitung erfahren Sie, wie Sie den Azure KI Speech für die Echtzeitkonvertierung von Sprache in Text verwenden. Die Echtzeit-Spracherkennung eignet sich ideal für Anwendungen, die eine sofortige Transkription erfordern, z. B. Diktate, Callcenterunterstützung und Untertitelung von Livebesprechungen.
Informationen zum Einrichten der Umgebung für eine Beispielanwendung finden Sie unter Schnellstart: Erkennen von Sprache und Konvertieren von Sprache in Text.
Installieren von Speech SDK und Beispielen
Das Repository Azure-Samples/cognitive-services-speech-sdk enthält Beispiele in Swift für iOS und Mac. Wählen Sie einen Link aus, um Installationsanweisungen für die einzelnen Beispiele anzuzeigen:
Weitere Informationen finden Sie in der Referenz zum Speech SDK für Objective-C.
Verwenden Sie einen benutzerdefinierten Endpunkt
Mit Custom Speech können Sie eigene Daten hochladen, ein benutzerdefiniertes Modell testen und trainieren, die Genauigkeit zwischen Modellen vergleichen und ein Modell auf einem benutzerdefinierten Endpunkt bereitstellen. Das folgende Beispiel zeigt, wie Sie einen benutzerdefinierten Endpunkt festlegen:
let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);
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.
Weitere Informationen zu Containern finden Sie unter Host-URLs beim Installieren und Ausführen von Speech-Containern mit Docker.
Referenzdokumentation | Paket (PyPi) | Zusätzliche Beispiele auf GitHub
In dieser Schrittanleitung erfahren Sie, wie Sie den Azure KI Speech für die Echtzeitkonvertierung von Sprache in Text verwenden. Die Echtzeit-Spracherkennung eignet sich ideal für Anwendungen, die eine sofortige Transkription erfordern, z. B. Diktate, Callcenterunterstützung und Untertitelung von Livebesprechungen.
Informationen zum Einrichten der Umgebung für eine Beispielanwendung finden Sie unter Schnellstart: Erkennen von Sprache und Konvertieren von Sprache in Text.
Erstellen einer Speech-Konfigurationsinstanz
Um den Speech-Dienst über das Speech SDK aufrufen zu können, muss eine SpeechConfig
-Instanz erstellt werden. Diese Klasse enthält Informationen zu Ihrem Abonnement. Hierzu zählen etwa Ihr Sprachschlüssel und die zugehörige Region, der Endpunkt, der Host oder das Autorisierungstoken.
- Erstellen Sie eine Speech-Ressource im Azure-Portal. Abrufen des Speech-Ressourcenschlüssel und des Endpunkts.
- Erstellen Sie mithilfe des folgenden Codes eine
SpeechConfig
-Instanz. Ersetzen SieYourSpeechKey
undYourSpeechRegion
durch Ihren Speech-Ressourcenschlüssel und Ihre Region.
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
Sie können SpeechConfig
auf verschiedene Arten initialisieren:
- Verwenden Sie einen Endpunkt, und übergeben Sie einen Speech-Dienstendpunkt. Ein Schlüssel für die Spracheingabe und ein Autorisierungstoken sind optional.
- Verwenden Sie einen Host, und übergeben Sie eine Hostadresse. Ein Schlüssel für die Spracheingabe und ein Autorisierungstoken sind optional.
- Verwenden Sie ein Autorisierungstoken mit der zugeordneten Region/dem zugehörigen Standort.
Hinweis
Eine Konfiguration ist immer erforderlich. Dabei spielt es keine Rolle, ob Sie eine Spracherkennung, eine Sprachsynthese, eine Übersetzung oder eine Absichtserkennung durchführen möchten.
Erkennen von Spracheingaben per Mikrofon
Um Sprache über das Mikrofon Ihres Geräts zu erkennen, erstellen Sie eine SpeechRecognizer
-Instanz, ohne AudioConfig
zu übergeben, und übergeben Sie dann speech_config
:
import azure.cognitiveservices.speech as speechsdk
def from_mic():
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
print("Speak into your microphone.")
speech_recognition_result = speech_recognizer.recognize_once_async().get()
print(speech_recognition_result.text)
from_mic()
Wenn Sie ein bestimmtes Audioeingabegerät verwenden möchten, müssen Sie in AudioConfig
die Geräte-ID angeben und dann an den audio_config
-Parameter des SpeechRecognizer
-Konstruktors übergeben. Informationen zum Abrufen der Geräte-ID finden Sie unter Auswählen eines Audioeingabegeräts mit dem Speech SDK.
Erkennen von Sprache aus einer Datei
Wenn Sie Sprache aus einer Audiodatei erkennen möchten, anstatt ein Mikrofon zu verwenden, erstellen Sie eine AudioConfig
-Instanz, und verwenden Sie den Parameter filename
:
import azure.cognitiveservices.speech as speechsdk
def from_file():
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
audio_config = speechsdk.AudioConfig(filename="your_file_name.wav")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
speech_recognition_result = speech_recognizer.recognize_once_async().get()
print(speech_recognition_result.text)
from_file()
Behandeln von Fehlern
Die vorherigen Beispiele rufen einfach den erkannten Text aus der Eigenschaft speech_recognition_result.text
ab. Um Fehler und andere Antworten zu behandeln, müssen Sie Code schreiben, der das Ergebnis verarbeitet. Der folgende Code wertet die Eigenschaft speech_recognition_result.reason
aus und geht wie folgt vor:
- Das Erkennungsergebnis wird ausgegeben:
speechsdk.ResultReason.RecognizedSpeech
. - Wurde kein Erkennungstreffer gefunden, wird der Benutzer davon in Kenntnis gesetzt:
speechsdk.ResultReason.NoMatch
. - Ist ein Fehler aufgetreten, wird die Fehlermeldung ausgegeben:
speechsdk.ResultReason.Canceled
.
if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech:
print("Recognized: {}".format(speech_recognition_result.text))
elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch:
print("No speech could be recognized: {}".format(speech_recognition_result.no_match_details))
elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = speech_recognition_result.cancellation_details
print("Speech Recognition canceled: {}".format(cancellation_details.reason))
if cancellation_details.reason == speechsdk.CancellationReason.Error:
print("Error details: {}".format(cancellation_details.error_details))
print("Did you set the speech resource key and region values?")
Verwenden kontinuierlicher Erkennung
In den vorherigen Beispielen wird Einzelerkennung verwendet, bei der eine einzelne Äußerung erkannt wird. Zur Erkennung des Endes einer einzelnen Äußerung wird auf Stille am Ende gelauscht oder gewartet, bis maximal 15 Sekunden an Audiodaten verarbeitet wurden.
Im Gegensatz dazu verwenden Sie kontinuierliche Erkennung, wenn Sie steuern möchten, wann die Erkennung beendet wird. Hierfür müssen Sie eine Verbindung mit EventSignal
herstellen, um die Erkennungsergebnisse zu erhalten. Um die Erkennung zu beenden, müssen Sie stop_continuous_recognition() oder stop_continuous_recognition_async() aufrufen. Im folgenden Beispiel wird eine kontinuierliche Erkennung für eine Audioeingabedatei durchgeführt.
Beginnen Sie mit dem Definieren der Eingabe und dem Initialisieren von SpeechRecognizer
:
audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
Als Nächstes erstellen Sie eine Variable, um den Zustand der Spracherkennung zu verwalten. Legen Sie die Variable auf False
fest, da Sie zu Beginn der Erkennung sicher davon ausgehen können, dass diese nicht abgeschlossen ist:
done = False
Erstellen Sie nun einen Rückruf, um die kontinuierliche Erkennung zu beenden, wenn evt
empfangen wird. Beachten Sie Folgendes:
- Wenn
evt
empfangen wird, wird dieevt
-Nachricht ausgegeben. - Nach dem Empfang von
evt
wirdevt
aufgerufen, um die Erkennung zu beenden. - Der Erkennungszustand wird in
True
geändert.
def stop_cb(evt):
print('CLOSING on {}'.format(evt))
speech_recognizer.stop_continuous_recognition()
nonlocal done
done = True
Im folgenden Codebeispiel wird das Herstellen einer Verbindung zwischen Rückrufen und Ereignissen gezeigt, die von SpeechRecognizer
gesendet werden. Die Ereignisse sind wie folgt:
recognizing
: Signal für Ereignisse mit Erkennungszwischenergebnissen.recognized
: Signal für Ereignisse mit Endergebnissen der Erkennung, was auf einen erfolgreichen Erkennungsversuch hindeutet.session_started
: Signal für Ereignisse, die den Anfang einer Erkennungssitzung (bzw. eines Erkennungsvorgangs) anzeigen.session_stopped
: Signal für Ereignisse, die das Ende einer Erkennungssitzung (bzw. eines Erkennungsvorgangs) anzeigen.canceled
: Signal für Ereignisse mit Ergebnissen einer abgebrochenen Erkennung. Diese Ergebnisse weisen auf einen Erkennungsversuch hin, der aufgrund einer direkten Abbruchanforderung abgebrochen wurde. Alternativ weisen sie auf einen Datentransport- oder Protokollfehler hin.
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))
speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)
Nach Abschluss der Einrichtung kann start_continuous_recognition() aufgerufen werden:
speech_recognizer.start_continuous_recognition()
while not done:
time.sleep(.5)
Ändern der Quellsprache
Eine gängige Aufgabe für die Spracherkennung ist die Angabe der Eingabesprache (Ausgangssprache). Das folgende Beispiel zeigt, wie Sie die Eingabesprache zu Deutsch ändern. Suchen Sie in Ihrem Code Ihre SpeechConfig
-Instanz, und fügen Sie direkt darunter die folgende Zeile hinzu:
speech_config.speech_recognition_language="de-DE"
speech_recognition_language
ist ein Parameter, der eine Zeichenfolge als Argument akzeptiert. Eine Liste unterstützter Gebietsschemas finden Sie unter Sprach- und Stimmunterstützung für den Speech-Dienst.
Sprachenerkennung
Sie können die Sprachidentifikation mit Spracherkennung verwenden, wenn Sie die Sprache einer Audioquelle identifizieren und diese dann in Text transkribieren müssen.
Ein vollständiges Codebeispiel finden Sie unter Sprachenerkennung.
Verwenden Sie einen benutzerdefinierten Endpunkt
Mit Custom Speech können Sie eigene Daten hochladen, ein benutzerdefiniertes Modell testen und trainieren, die Genauigkeit zwischen Modellen vergleichen und ein Modell auf einem benutzerdefinierten Endpunkt bereitstellen. Das folgende Beispiel zeigt, wie Sie einen benutzerdefinierten Endpunkt festlegen.
speech_config = speechsdk.SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
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.
Weitere Informationen zu Containern finden Sie unter Host-URLs beim Installieren und Ausführen von Speech-Containern mit Docker.
Semantische Segmentierung
Die semantische Segmentierung ist eine Strategie zur Spracherkennung, die darauf ausgelegt ist, Probleme im Zusammenhang mit der stillebasierten Segmentierung zu mindern:
- Untersegmentierung: Wenn Benutzer eine lange Zeit ohne Pausen sprechen, kann eine lange Textsequenz ohne Unterbrechungen („Textwand“) entstehen, was die Lesbarkeit erheblich beeinträchtigt.
- Übersegmentierung: Wenn ein Benutzer kurze Zeit pausiert, segmentiert der Stilleerkennungsmechanismus ggf. falsch.
Anstatt sich auf Stilletimeouts zu verlassen, segmentiert die semantische Segmentierung und gibt endgültige Ergebnisse zurück, wenn Satzzeichen (wie . oder ?) erkannt werden. Dies verbessert die Benutzererfahrung mit qualitativ hochwertigeren, semantisch vollständigen Segmenten und verhindert lange Zwischenergebnisse.
Um die semantische Segmentierung zu verwenden, müssen Sie die folgende Eigenschaft für die SpeechConfig
-Instanz festlegen, die zum Erstellen von SpeechRecognizer
verwendet wird:
speech_config.set_property(speechsdk.PropertyId.Speech_SegmentationStrategy, "Semantic")
Einige der Einschränkungen der semantischen Segmentierung sind:
- Sie benötigen das Speech SDK, Version 1.41 oder höher, um die semantische Segmentierung zu verwenden.
- Die semantische Segmentierung ist nur für die Verwendung in Continuous Recognition vorgesehen. Dazu gehören Szenarios wie Transkription und Untertitelerstellung. Sie sollte nicht im einfachen Erkennungs- und Diktiermodus verwendet werden.
- Die semantische Segmentierung ist nicht für alle Sprachen und Gebietsschemas verfügbar. Derzeit ist die semantische Segmentierung nur für englischsprachige Gebietsschemas (en-US, en-GB, en-IN und en-AU) verfügbar.
- Die semantische Segmentierung unterstützt noch keine Konfidenzbewertungen und NBest-Listen. Daher wird die semantische Segmentierung nicht empfohlen, wenn Sie Konfidenzbewertungen oder NBest-Listen verwenden.
REST-API-Referenz zur Spracherkennung | REST-API-Referenz zur Spracherkennung für kurze Audiodaten | Zusätzliche Beispiele auf GitHub
In dieser Schrittanleitung erfahren Sie, wie Sie den Azure KI Speech für die Echtzeitkonvertierung von Sprache in Text verwenden. Die Echtzeit-Spracherkennung eignet sich ideal für Anwendungen, die eine sofortige Transkription erfordern, z. B. Diktate, Callcenterunterstützung und Untertitelung von Livebesprechungen.
Informationen zum Einrichten der Umgebung für eine Beispielanwendung finden Sie unter Schnellstart: Erkennen von Sprache und Konvertieren von Sprache in Text.
Konvertieren von Sprache in Text
Führen Sie an der Eingabeaufforderung den folgenden Befehl aus. Fügen Sie die folgenden Werte in den Befehl ein:
- Ihr Abonnementschlüssel für die Speech-Ressource
- Die Region Ihres Speech-Diensts
- Der Pfad für Audioeingabedateien
curl --location --request POST 'https://INSERT_REGION_HERE.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: audio/wav' \
--data-binary @'INSERT_AUDIO_FILE_PATH_HERE'
Die Antwort sollte in etwa wie im folgenden Beispiel aussehen:
{
"RecognitionStatus": "Success",
"DisplayText": "My voice is my passport, verify me.",
"Offset": 6600000,
"Duration": 32100000
}
Weitere Informationen finden Sie in der REST-API-Referenz zur Spracherkennung.
In dieser Schrittanleitung erfahren Sie, wie Sie den Azure KI Speech für die Echtzeitkonvertierung von Sprache in Text verwenden. Die Echtzeit-Spracherkennung eignet sich ideal für Anwendungen, die eine sofortige Transkription erfordern, z. B. Diktate, Callcenterunterstützung und Untertitelung von Livebesprechungen.
Informationen zum Einrichten der Umgebung für eine Beispielanwendung finden Sie unter Schnellstart: Erkennen von Sprache und Konvertieren von Sprache in Text.
Schnellstart: Erkennen von Spracheingaben per Mikrofon
Schließen Sie ihr PC-Mikrofon an, und schalten Sie es ein. Deaktivieren Sie alle Apps, die möglicherweise auch das Mikrofon verwenden. Einige Computer verfügen über ein eingebautes Mikrofon, während für andere die Konfiguration eines Bluetooth-Geräts erforderlich ist.
Sie sind jetzt bereit, die Speech-Befehlszeilenschnittstelle auszuführen, um über Ihr Mikrofon eingegebene Sprache zu erkennen. Wechseln Sie an der Befehlszeile in das Verzeichnis, das die Binärdatei der Speech-Befehlszeilenschnittstelle enthält. Führen Sie dann den folgenden Befehl aus:
spx recognize --microphone
Hinweis
Die Speech-Befehlszeilenschnittstelle ist standardmäßig auf Englisch eingestellt. Sie können in der Spracherkennungstabelle eine andere Sprache auswählen. Fügen Sie beispielsweise --source de-DE
hinzu, um deutsche Spracheingaben zu erkennen.
Sprechen Sie in das Mikrofon. Daraufhin können Sie in Echtzeit die Transkription Ihrer Worte in Text sehen. Die Speech CLI wird angehalten, wenn Stille erkannt wird oder Sie STRG+C drücken.
Erkennen von Sprache aus einer Datei
Die Speech-Befehlszeilenschnittstelle kann Sprache in vielen Datenformaten und natürlichen Sprachen erkennen. Für dieses Beispiel können Sie eine beliebige WAV-Datei (16 kHz oder 8 kHz, 16-Bit und Mono-PCM) verwenden, die englische Sprache enthält. Oder wenn Sie ein schnelles Beispiel möchten, laden Sie die Datei whattheweatherlike.wav herunter, und kopieren Sie sie in dasselbe Verzeichnis wie die Binärdatei der Speech-Befehlszeilenschnittstelle.
Verwenden Sie den folgenden Befehl, um die Speech CLI auszuführen, um die in der Audiodatei gefundene Sprache zu erkennen:
spx recognize --file whatstheweatherlike.wav
Hinweis
Die Speech-Befehlszeilenschnittstelle ist standardmäßig auf Englisch eingestellt. Sie können in der Spracherkennungstabelle eine andere Sprache auswählen. Fügen Sie beispielsweise --source de-DE
hinzu, um deutsche Spracheingaben zu erkennen.
Die Speech CLI zeigt eine Texttranskription der Sprache auf dem Bildschirm an.
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.
Weitere Informationen zu Containern finden Sie unter Host-URLs beim Installieren und Ausführen von Speech-Containern mit Docker.