Aan de slag met spraakomzetting

Een van de belangrijkste functies van de Speech-service is de mogelijkheid om menselijke spraak te herkennen en om te vertalen naar andere talen. In deze quickstart leert u hoe u de Speech SDK in uw apps en producten gebruikt om spraakvertalingen van hoge kwaliteit uit te voeren. In deze quickstart worden onder andere de volgende onderwerpen behandeld:

  • Spraak-naar-tekst vertalen
  • Spraak omzetten naar meerdere doeltalen
  • Directe spraak-naar-spraak-vertaling uitvoeren

Naar voorbeelden op GitHub

Zie de C#-quickstartvoorbeelden op GitHub als u direct naar voorbeeldcode wilt gaan.

Vereisten

In dit artikel wordt ervan uitgegaan dat u een Azure-account en een abonnement op de Speech-service hebt. Als u geen account en abonnement hebt, kunt u de Speech-service gratis uitproberen.

De Speech-SDK installeren

Voordat u iets kunt doen, moet u de Speech SDK installeren. Afhankelijk van uw platform volgt u de instructies in de sectie Get the Speech SDK van het artikel About the Speech SDK (Informatie over de Speech SDK).

Afhankelijkheden importeren

Als u de voorbeelden in dit artikel wilt uitvoeren, moet u de volgende instructies using toevoegen boven aan het bestand Program.cs.

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
using Microsoft.CognitiveServices.Speech.Translation;

Gevoelige gegevens en omgevingsvariabelen

De voorbeeldbroncode in dit artikel is afhankelijk van omgevingsvariabelen voor het opslaan van gevoelige gegevens, zoals de abonnementssleutel en regio van de Spraak-resource. De klasse bevat twee waarden die zijn toegewezen vanuit de omgevingsvariabelen van Program de static readonly string hostmachines, namelijk SPEECH__SUBSCRIPTION__KEY en SPEECH__SERVICE__REGION . Beide velden vallen binnen het klassebereik, waardoor ze toegankelijk zijn binnen de methode-instanties van de klasse. Zie omgevingsvariabelen en toepassingsconfiguratie voor meer informatie over omgevingsvariabelen.

public class Program
{
    static readonly string SPEECH__SUBSCRIPTION__KEY =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SUBSCRIPTION__KEY));
    
    static readonly string SPEECH__SERVICE__REGION =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SERVICE__REGION));

    static Task Main() => Task.CompletedTask;
}

Een configuratie voor spraakvertaling maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechTranslationConfig maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

Tip

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.

Er zijn een paar manieren waarop u een SpeechTranslationConfig kunt initialiseren:

  • Met een abonnement: geef een sleutel en de bijbehorende regio door.
  • Met een eindpunt: geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Met een host: geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Met een autorisatietoken: geef een autorisatietoken en de bijbehorende regio door.

Laten we eens kijken hoe een SpeechTranslationConfig wordt gemaakt met behulp van een sleutel en regio. U kunt deze referenties ophalen door de stappen te volgen in De Speech-service gratis uitproberen.

public class Program
{
    static readonly string SPEECH__SUBSCRIPTION__KEY =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SUBSCRIPTION__KEY));
    
    static readonly string SPEECH__SERVICE__REGION =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SERVICE__REGION));

    static Task Main() => TranslateSpeechAsync();

    static async Task TranslateSpeechAsync()
    {
        var translationConfig =
            SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    }
}

Brontaal wijzigen

Een veelvoorkomende taak van spraakvertaling is het opgeven van de invoertaal (of brontaal). Laten we eens kijken hoe u de invoertaal wijzigt in Italiaans. In uw code communiceert u met het SpeechTranslationConfig exemplaar en wijst u deze toe aan de eigenschap SpeechRecognitionLanguage .

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    // Source (input) language
    translationConfig.SpeechRecognitionLanguage = "it-IT";
}

De eigenschap SpeechRecognitionLanguage verwacht een indelingstekenreeks voor taal-landinstellingen. U kunt in de lijst met ondersteunde Landinstellingen en talen een willekeurige waarde opgeven in de kolom Landinstelling.

Vertaaltaal toevoegen

Een andere veelvoorkomende taak van spraakvertaling is het opgeven van doeltalen, er is ten minste één vereist, maar het gebruik van meerdere talen wordt ondersteund. Met het volgende codefragment worden zowel het Frans als het Duits als de doelen voor de vertaaltaal vastgesteld.

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    translationConfig.SpeechRecognitionLanguage = "it-IT";
    
    // Translate to languages. See, https://aka.ms/speech/sttt-languages
    translationConfig.AddTargetLanguage("fr");
    translationConfig.AddTargetLanguage("de");
}

Bij elke aanroep AddTargetLanguage van wordt een nieuwe doelvertalingstaal opgegeven. Met andere woorden, wanneer spraak wordt herkend vanuit de brontaal, is elke doelvertaling beschikbaar als onderdeel van de resulterende vertaalbewerking.

Een vertaal recognizer initialiseren

Nadat u een SpeechTranslationConfig hebt gemaakt, is de volgende stap het initialiseren van een TranslationRecognizer. Wanneer u een TranslationRecognizer initialiseert, moet u er uw translationConfig aan doorgeven. Het configuratieobject biedt de referenties die de spraakservice nodig heeft om uw aanvraag te valideren.

Als u spraak wilt herkennen met de standaardmicrofoon van uw apparaat, ziet u hier hoe de TranslationRecognizer eruit moet zien:

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(translationConfig.AddTargetLanguage);

    using var recognizer = new TranslationRecognizer(translationConfig);
}

Als u het audio-invoerapparaat wilt opgeven, moet u een AudioConfig maken en de parameter audioConfig opgeven bij het initialiseren van uw TranslationRecognizer.

Eerst verwijst u als volgt naar AudioConfig het -object:

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(translationConfig.AddTargetLanguage);

    using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
    using var recognizer = new TranslationRecognizer(translationConfig, audioConfig);
}

Als u een audiobestand wilt opgeven in plaats van een microfoon te gebruiken, moet u nog steeds een audioConfig opgeven. Wanneer u echter een AudioConfig maakt in plaats van FromDefaultMicrophoneInput aan te roepen, roept u FromWavFileInput aan en geeft u de parameter filename door.

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(translationConfig.AddTargetLanguage);

    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    using var recognizer = new TranslationRecognizer(translationConfig, audioConfig);
}

Spraak vertalen

Voor het vertalen van spraak is de Speech SDK afhankelijk van een microfoon of audiobestandsinvoer. Spraakherkenning vindt plaats vóór spraakvertaling. Nadat alle objecten zijn initialiseren, roept u de functie recognize-once aan en krijgt u het resultaat.

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(translationConfig.AddTargetLanguage);

    using var recognizer = new TranslationRecognizer(translationConfig);

    Console.Write($"Say something in '{fromLanguage}' and ");
    Console.WriteLine($"we'll translate into '{string.Join("', '", toLanguages)}'.\n");
    
    var result = await recognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        Console.WriteLine($"Recognized: \"{result.Text}\":");
        foreach (var (language, translation) in result.Translations)
        {
            Console.WriteLine($"Translated into '{language}': {translation}");
        }
    }
}

Zie de basisbeginselen van spraakherkenning voor meer informatie over spraak-naar-tekst.

Vertalingen synthetiseren

Na een geslaagde spraakherkenning en vertaling bevat het resultaat alle vertalingen in een woordenlijst. De Translations woordenlijstsleutel is de doelvertalingstaal en de waarde is de vertaalde tekst. Herkende spraak kan worden vertaald en vervolgens gesynthetiseerd in een andere taal (spraak-naar-spraak).

Synthese op basis van gebeurtenissen

Het TranslationRecognizer object geeft een gebeurtenis Synthesizing weer. De gebeurtenis wordt meerdere keren gebruikt en biedt een mechanisme om de gesynthetiseerde audio op te halen uit het vertaalherkenningsresultaat. Zie Handmatige synthese als u vertaalt naar meerdere talen. Geef de synthesestem op door een toe te wijzen en een gebeurtenis-handler voor de gebeurtenis op te geven VoiceName en de audio op te Synthesizing halen. In het volgende voorbeeld wordt de vertaalde audio opgeslagen als een WAV-bestand.

Belangrijk

De synthese op basis van gebeurtenissen werkt alleen met één vertaling. Voeg niet meerdere doeltalen voor vertaling toe. Daarnaast moet de dezelfde taal zijn als de VoiceName doelvertalingstaal, bijvoorbeeld ; "de" kan worden toe te staan aan "de-DE-Hedda" .

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguage = "de";
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    translationConfig.AddTargetLanguage(toLanguage);

    // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
    translationConfig.VoiceName = "de-DE-Hedda";

    using var recognizer = new TranslationRecognizer(translationConfig);

    recognizer.Synthesizing += (_, e) =>
    {
        var audio = e.Result.GetAudio();
        Console.WriteLine($"Audio synthesized: {audio.Length:#,0} byte(s) {(audio.Length == 0 ? "(Complete)" : "")}");

        if (audio.Length > 0)
        {
            File.WriteAllBytes("YourAudioFile.wav", audio);
        }
    };

    Console.Write($"Say something in '{fromLanguage}' and ");
    Console.WriteLine($"we'll translate into '{toLanguage}'.\n");

    var result = await recognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        Console.WriteLine($"Recognized: \"{result.Text}\"");
        Console.WriteLine($"Translated into '{toLanguage}': {result.Translations[toLanguage]}");
    }
}

Handmatige synthese

De Translations woordenlijst kan worden gebruikt voor het synthetiseren van audio uit de vertaaltekst. Door elke vertaling heen en weer te gaan en de vertaling te synthetiseren. Bij het maken van een instantie moet de eigenschap van het SpeechSynthesizer object zijn ingesteld op de SpeechConfig SpeechSynthesisVoiceName gewenste stem. Het volgende voorbeeld wordt omgezet in vijf talen en elke vertaling wordt vervolgens gesynthetiseerd naar een audiobestand in de bijbehorende neurale taal.

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SERVICE__KEY, SPEECH__SERVICE__REGION);

    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "de", "en", "it", "pt", "zh-Hans" };
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(translationConfig.AddTargetLanguage);

    using var recognizer = new TranslationRecognizer(translationConfig);

    Console.Write($"Say something in '{fromLanguage}' and ");
    Console.WriteLine($"we'll translate into '{string.Join("', '", toLanguages)}'.\n");

    var result = await recognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
        var languageToVoiceMap = new Dictionary<string, string>
        {
            ["de"] = "de-DE-KatjaNeural",
            ["en"] = "en-US-AriaNeural",
            ["it"] = "it-IT-ElsaNeural",
            ["pt"] = "pt-BR-FranciscaNeural",
            ["zh-Hans"] = "zh-CN-XiaoxiaoNeural"
        };

        Console.WriteLine($"Recognized: \"{result.Text}\"");

        foreach (var (language, translation) in result.Translations)
        {
            Console.WriteLine($"Translated into '{language}': {translation}");

            var speechConfig =
                SpeechConfig.FromSubscription(
                    SPEECH__SERVICE__KEY, SPEECH__SERVICE__REGION);
            speechConfig.SpeechSynthesisVoiceName = languageToVoiceMap[language];

            using var audioConfig = AudioConfig.FromWavFileOutput($"{language}-translation.wav");
            using var synthesizer = new SpeechSynthesizer(speechConfig, audioConfig);
            
            await synthesizer.SpeakTextAsync(translation);
        }
    }
}

Zie de basisbeginselen van spraaksynthese voor meer informatie over spraaksynthese.

Meertalige vertaling met taalidentificatie

In veel scenario's weet u mogelijk niet welke invoertalen u moet opgeven. Met behulp van taalidentificatie kunt u maximaal tien mogelijke invoertalen opgeven en automatisch vertalen in uw doeltalen.

In het volgende voorbeeld wordt continue vertaling van een audiobestand gebruikt en wordt automatisch de invoertaal gedetecteerd, zelfs als de gesproken taal verandert. Wanneer u het voorbeeld hebt uitgevoerd en automatisch wordt en-US gedetecteerd omdat deze zijn gedefinieerd in de zh-CN AutoDetectSourceLanguageConfig . Vervolgens wordt de spraak vertaald naar en de zoals opgegeven in de fr aanroepen naar AddTargetLanguage() .

Belangrijk

Deze functie is momenteel beschikbaar als preview-versie.

using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

public static async Task MultiLingualTranslation()
{
    var region = "<paste-your-region>";
    // currently the v2 endpoint is required for this design pattern
    var endpointString = $"wss://{region}.stt.speech.microsoft.com/speech/universal/v2";
    var endpointUrl = new Uri(endpointString);
    
    var config = SpeechConfig.FromEndpoint(endpointUrl, "<paste-your-subscription-key>");

    // Source lang is required, but is currently NoOp 
    string fromLanguage = "en-US";
    config.SpeechRecognitionLanguage = fromLanguage;

    config.AddTargetLanguage("de");
    config.AddTargetLanguage("fr");

    config.SetProperty(PropertyId.SpeechServiceConnection_ContinuousLanguageIdPriority, "Latency");
    var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });

    var stopTranslation = new TaskCompletionSource<int>();
    using (var audioInput = AudioConfig.FromWavFileInput(@"path-to-your-audio-file.wav"))
    {
        using (var recognizer = new TranslationRecognizer(config, autoDetectSourceLanguageConfig, audioInput))
        {
            recognizer.Recognizing += (s, e) =>
            {
                var lidResult = e.Result.Properties.GetProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguageResult);

                Console.WriteLine($"RECOGNIZING in '{lidResult}': Text={e.Result.Text}");
                foreach (var element in e.Result.Translations)
                {
                    Console.WriteLine($"    TRANSLATING into '{element.Key}': {element.Value}");
                }
            };

            recognizer.Recognized += (s, e) => {
                if (e.Result.Reason == ResultReason.TranslatedSpeech)
                {
                    var lidResult = e.Result.Properties.GetProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguageResult);

                    Console.WriteLine($"RECOGNIZED in '{lidResult}': Text={e.Result.Text}");
                    foreach (var element in e.Result.Translations)
                    {
                        Console.WriteLine($"    TRANSLATED into '{element.Key}': {element.Value}");
                    }
                }
                else if (e.Result.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
                    Console.WriteLine($"    Speech not translated.");
                }
                else if (e.Result.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
            };

            recognizer.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 update the subscription info?");
                }

                stopTranslation.TrySetResult(0);
            };

            recognizer.SpeechStartDetected += (s, e) => {
                Console.WriteLine("\nSpeech start detected event.");
            };

            recognizer.SpeechEndDetected += (s, e) => {
                Console.WriteLine("\nSpeech end detected event.");
            };

            recognizer.SessionStarted += (s, e) => {
                Console.WriteLine("\nSession started event.");
            };

            recognizer.SessionStopped += (s, e) => {
                Console.WriteLine("\nSession stopped event.");
                Console.WriteLine($"\nStop translation.");
                stopTranslation.TrySetResult(0);
            };

            // Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
            Console.WriteLine("Start translation...");
            await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

            Task.WaitAny(new[] { stopTranslation.Task });
            await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
        }
    }
}

Een van de belangrijkste functies van de Speech-service is de mogelijkheid om menselijke spraak te herkennen en om te vertalen naar andere talen. In deze quickstart leert u hoe u de Speech SDK in uw apps en producten gebruikt om spraakvertalingen van hoge kwaliteit uit te voeren. In deze quickstart komen onder andere de volgende onderwerpen aan bod:

  • Spraak-naar-tekst vertalen
  • Spraak omzetten naar meerdere doeltalen
  • Directe spraak-naar-spraak-vertaling uitvoeren

Naar voorbeelden op GitHub

Raadpleeg de C++-quickstartvoorbeelden op GitHub als u direct naar voorbeeldcode wilt gaan.

Vereisten

In dit artikel wordt ervan uitgegaan dat u een Azure-account en een abonnement op de Speech-service hebt. Als u geen account en abonnement hebt, kunt u de Speech-service gratis uitproberen.

De Speech-SDK installeren

Voordat u iets kunt doen, moet u de Speech SDK installeren. Afhankelijk van uw platform volgt u de instructies in de sectie Get the Speech SDK van het artikel About the Speech SDK (Over de Speech SDK).

Afhankelijkheden importeren

Als u de voorbeelden in dit artikel wilt uitvoeren, moet u de volgende instructies en toevoegen aan het begin #include using van het C++-codebestand.

#include <iostream> // cin, cout
#include <fstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <speechapi_cxx.h>

using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Audio;
using namespace Microsoft::CognitiveServices::Speech::Translation;

Gevoelige gegevens en omgevingsvariabelen

De voorbeeldbroncode in dit artikel is afhankelijk van omgevingsvariabelen voor het opslaan van gevoelige gegevens, zoals de abonnementssleutel en regio van de Spraak-resource. Het C++-codebestand bevat twee tekenreekswaarden die zijn toegewezen vanuit de omgevingsvariabelen van de hostmachines, namelijk SPEECH__SUBSCRIPTION__KEY en SPEECH__SERVICE__REGION . Beide velden vallen binnen het klassebereik, waardoor ze toegankelijk zijn binnen de methode-instanties van de klasse. Zie omgevingsvariabelen en toepassingsconfiguratie voor meer informatie over omgevingsvariabelen.

auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");

Een configuratie voor spraakvertaling maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechTranslationConfig maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

Tip

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.

Er zijn een paar manieren waarop u een SpeechTranslationConfig kunt initialiseren:

  • Met een abonnement: geef een sleutel en de bijbehorende regio door.
  • Met een eindpunt: geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Met een host: geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Met een autorisatietoken: geef een autorisatietoken en de bijbehorende regio door.

Laten we eens kijken hoe een SpeechTranslationConfig wordt gemaakt met behulp van een sleutel en regio. U kunt deze referenties ophalen door de stappen te volgen in De Speech-service gratis uitproberen.

auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");

void translateSpeech() {
    auto config =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
}

int main(int argc, char** argv) {
    setlocale(LC_ALL, "");
    translateSpeech();
    return 0;
}

Brontaal wijzigen

Een veelvoorkomende taak van spraakvertaling is het opgeven van de invoertaal (of brontaal). Laten we eens kijken hoe u de invoertaal wijzigt in Italiaans. In uw code communiceert u met het exemplaar SpeechTranslationConfig en roept u de methode SetSpeechRecognitionLanguage aan.

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    // Source (input) language
    translationConfig->SetSpeechRecognitionLanguage("it-IT");
}

De eigenschap SpeechRecognitionLanguage verwacht een indelingstekenreeks voor taal-landinstellingen. U kunt in de lijst met ondersteunde Landinstellingen en talen een willekeurige waarde opgeven in de kolom Landinstelling.

Vertaaltaal toevoegen

Een andere veelvoorkomende taak van spraakvertaling is het opgeven van doeltalen, ten minste één is vereist, maar veelvouden worden ondersteund. Met het volgende codefragment worden zowel het Frans als het Duits als doelen voor de vertaaltaal vastgesteld.

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    translationConfig->SetSpeechRecognitionLanguage("it-IT");

    // Translate to languages. See, https://aka.ms/speech/sttt-languages
    translationConfig->AddTargetLanguage("fr");
    translationConfig->AddTargetLanguage("de");
}

Bij elke aanroep van AddTargetLanguage wordt een nieuwe doelvertalingstaal opgegeven. Met andere woorden, wanneer spraak wordt herkend vanuit de brontaal, is elke doelvertaling beschikbaar als onderdeel van de resulterende vertaalbewerking.

Een vertaal recognizer initialiseren

Nadat u een SpeechTranslationConfig hebt gemaakt, is de volgende stap het initialiseren van een TranslationRecognizer. Wanneer u een TranslationRecognizer initialiseert, moet u er uw translationConfig aan doorgeven. Het configuratieobject levert de referenties die de spraakservice nodig heeft om uw aanvraag te valideren.

Als u spraak wilt herkennen met de standaardmicrofoon van uw apparaat, ziet u hier hoe de TranslationRecognizer eruit moet zien:

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "it", "fr", "de" };
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        translationConfig->AddTargetLanguage(language);
    }

    auto recognizer = TranslationRecognizer::FromConfig(translationConfig);
}

Als u het audio-invoerapparaat wilt opgeven, moet u een AudioConfig maken en de parameter audioConfig opgeven bij het initialiseren van uw TranslationRecognizer.

Eerst verwijst u als AudioConfig volgt naar het object:

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "it", "fr", "de" };
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        translationConfig->AddTargetLanguage(language);
    }

    auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
    auto recognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}

Als u een audiobestand wilt opgeven in plaats van een microfoon te gebruiken, moet u nog steeds een audioConfig opgeven. Wanneer u echter een AudioConfig maakt in plaats van FromDefaultMicrophoneInput aan te roepen, roept u FromWavFileInput aan en geeft u de parameter filename door.

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "it", "fr", "de" };
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        translationConfig->AddTargetLanguage(language);
    }

    auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    auto recognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}

Spraak vertalen

Voor het vertalen van spraak is de Speech SDK afhankelijk van een microfoon of audiobestandsinvoer. Spraakherkenning vindt plaats vóór spraakvertaling. Nadat alle objecten zijn initialiseren, roept u de functie recognize-once aan en krijgt u het resultaat.

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    string fromLanguage = "en-US";
    string toLanguages[3] = { "it", "fr", "de" };
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        translationConfig->AddTargetLanguage(language);
    }

    auto recognizer = TranslationRecognizer::FromConfig(translationConfig);
    cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";

    auto result = recognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        cout << "Recognized: \"" << result->Text << "\"" << std::endl;
        for (auto pair : result->Translations)
        {
            auto language = pair.first;
            auto translation = pair.second;
            cout << "Translated into '" << language << "': " << translation << std::endl;
        }
    }
}

Zie de basisbeginselen van spraakherkenning voor meer informatie over spraak-naar-tekst.

Vertalingen synthetiseren

Na een geslaagde spraakherkenning en vertaling bevat het resultaat alle vertalingen in een woordenlijst. De Translations woordenlijstsleutel is de doelvertalingstaal en de waarde is de vertaalde tekst. Herkende spraak kan worden vertaald en vervolgens gesynthetiseerd in een andere taal (spraak-naar-spraak).

Op gebeurtenissen gebaseerde synthese

Het TranslationRecognizer -object geeft een gebeurtenis Synthesizing weer. De gebeurtenis wordt meerdere keren in werking gebracht en biedt een mechanisme om de gesynthetiseerde audio op te halen uit het resultaat van de vertalingsherkenning. Zie Handmatige synthese als u naar meerdere talen vertaalt. Geef de synthesestem op door een toe te wijzen en een gebeurtenis-handler voor de gebeurtenis op te geven SetVoiceName en de audio op te Synthesizing halen. In het volgende voorbeeld wordt de vertaalde audio opgeslagen als een WAV-bestand.

Belangrijk

De op gebeurtenissen gebaseerde synthese werkt alleen met één vertaling. Voeg niet meerdere doeltalen toe. Daarnaast moet de dezelfde taal zijn als de doelvertalingstaal, bijvoorbeeld SetVoiceName ; kan worden toe te staan aan "de" "de-DE-Hedda" .

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguage = "de";
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    translationConfig->AddTargetLanguage(toLanguage);

    // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
    translationConfig->SetVoiceName("de-DE-Hedda");

    auto recognizer = TranslationRecognizer::FromConfig(translationConfig);
    recognizer->Synthesizing.Connect([](const TranslationSynthesisEventArgs& e)
        {
            auto audio = e.Result->Audio;
            auto size = audio.size();
            cout << "Audio synthesized: " << size << " byte(s)" << (size == 0 ? "(COMPLETE)" : "") << std::endl;

            if (size > 0) {
                ofstream file("translation.wav", ios::out | ios::binary);
                auto audioData = audio.data();
                file.write((const char*)audioData, sizeof(audio[0]) * size);
                file.close();
            }
        });

    cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";

    auto result = recognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        cout << "Recognized: \"" << result->Text << "\"" << std::endl;
        for (auto pair : result->Translations)
        {
            auto language = pair.first;
            auto translation = pair.second;
            cout << "Translated into '" << language << "': " << translation << std::endl;
        }
    }
}

Handmatige synthese

De Translations woordenlijst kan worden gebruikt om audio uit de vertaaltekst te synthetiseren. Door elke vertaling heen gaan en de vertaling synthetiseren. Bij het maken van een instantie moet de eigenschap van het SpeechSynthesizer object zijn ingesteld op de SpeechConfig SetSpeechSynthesisVoiceName gewenste stem. Het volgende voorbeeld wordt omgezet in vijf talen en elke vertaling wordt vervolgens gesynthetiseerd naar een audiobestand in de bijbehorende neurale taal.

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "de", "en", "it", "pt", "zh-Hans" };
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        translationConfig->AddTargetLanguage(language);
    }

    auto recognizer = TranslationRecognizer::FromConfig(translationConfig);

    cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";

    auto result = recognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
        map<string, string> languageToVoiceMap;
        languageToVoiceMap["de"] = "de-DE-KatjaNeural";
        languageToVoiceMap["en"] = "en-US-AriaNeural";
        languageToVoiceMap["it"] = "it-IT-ElsaNeural";
        languageToVoiceMap["pt"] = "pt-BR-FranciscaNeural";
        languageToVoiceMap["zh-Hans"] = "zh-CN-XiaoxiaoNeural";

        cout << "Recognized: \"" << result->Text << "\"" << std::endl;
        for (auto pair : result->Translations)
        {
            auto language = pair.first;
            auto translation = pair.second;
            cout << "Translated into '" << language << "': " << translation << std::endl;

            auto speech_config =
                SpeechConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
            speech_config->SetSpeechSynthesisVoiceName(languageToVoiceMap[language]);

            auto audio_config = AudioConfig::FromWavFileOutput(language + "-translation.wav");
            auto synthesizer = SpeechSynthesizer::FromConfig(speech_config, audio_config);

            synthesizer->SpeakTextAsync(translation).get();
        }
    }
}

Zie de basisbeginselen van spraaksynthese voor meer informatie over spraaksynthese.

Meertalige vertaling met taalidentificatie

In veel scenario's weet u mogelijk niet welke invoertalen u moet opgeven. Met behulp van taalidentificatie kunt u maximaal tien mogelijke invoertalen opgeven en automatisch vertalen in uw doeltalen.

In het volgende voorbeeld wordt continue vertaling van een audiobestand gebruikt en wordt automatisch de invoertaal gedetecteerd, zelfs als de gesproken taal verandert. Wanneer u het voorbeeld hebt uitgevoerd en en-US automatisch wordt gedetecteerd omdat deze zijn gedefinieerd in de zh-CN AutoDetectSourceLanguageConfig . Vervolgens wordt de spraak vertaald naar en de zoals opgegeven in de fr aanroepen naar AddTargetLanguage() .

Belangrijk

Deze functie is momenteel beschikbaar als preview-versie.

using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Audio;

void MultiLingualTranslation()
{
    auto region = "<paste-your-region>";
    // currently the v2 endpoint is required for this design pattern
    auto endpointString = std::format("wss://{}.stt.speech.microsoft.com/speech/universal/v2", region);
    auto config = SpeechConfig::FromEndpoint(endpointString, "<paste-your-subscription-key>");

    config->SetProperty(PropertyId::SpeechServiceConnection_ContinuousLanguageIdPriority, "Latency");
    auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });

    promise<void> recognitionEnd;
    // Source lang is required, but is currently NoOp 
    auto fromLanguage = "en-US";
    config->SetSpeechRecognitionLanguage(fromLanguage);
    config->AddTargetLanguage("de");
    config->AddTargetLanguage("fr");

    auto audioInput = AudioConfig::FromWavFileInput("path-to-your-audio-file.wav");
    auto recognizer = TranslationRecognizer::FromConfig(config, autoDetectSourceLanguageConfig, audioInput);

    recognizer->Recognizing.Connect([](const TranslationRecognitionEventArgs& e)
        {
            std::string lidResult = e.Result->Properties.GetProperty(PropertyId::SpeechServiceConnection_AutoDetectSourceLanguageResult);

            cout << "Recognizing in Language = "<< lidResult << ":" << e.Result->Text << std::endl;
            for (const auto& it : e.Result->Translations)
            {
                cout << "  Translated into '" << it.first.c_str() << "': " << it.second.c_str() << std::endl;
            }
        });

    recognizer->Recognized.Connect([](const TranslationRecognitionEventArgs& e)
        {
            if (e.Result->Reason == ResultReason::TranslatedSpeech)
            {
                std::string lidResult = e.Result->Properties.GetProperty(PropertyId::SpeechServiceConnection_AutoDetectSourceLanguageResult);
                cout << "RECOGNIZED in Language = " << lidResult << ": Text=" << e.Result->Text << std::endl;
            }
            else 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;
            }

            for (const auto& it : e.Result->Translations)
            {
                cout << "  Translated into '" << it.first.c_str() << "': " << it.second.c_str() << std::endl;
            }
        });

    recognizer->Canceled.Connect([&recognitionEnd](const TranslationRecognitionCanceledEventArgs& e)
        {
            cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
            if (e.Reason == CancellationReason::Error)
            {
                cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << std::endl;
                cout << "CANCELED: ErrorDetails=" << e.ErrorDetails << std::endl;
                cout << "CANCELED: Did you update the subscription info?" << std::endl;

                recognitionEnd.set_value();
            }
        });

    recognizer->Synthesizing.Connect([](const TranslationSynthesisEventArgs& e)
        {
            auto size = e.Result->Audio.size();
            cout << "Translation synthesis result: size of audio data: " << size
                << (size == 0 ? "(END)" : "");
        });

    recognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
        {
            cout << "Session stopped.";
            recognitionEnd.set_value();
        });

    // Starts continuos recognition. Use StopContinuousRecognitionAsync() to stop recognition.
    recognizer->StartContinuousRecognitionAsync().get();
    recognitionEnd.get_future().get();
    recognizer->StopContinuousRecognitionAsync().get();
}

Een van de belangrijkste functies van de Speech-service is de mogelijkheid om menselijke spraak te herkennen en om te vertalen naar andere talen. In deze quickstart leert u hoe u de Speech SDK in uw apps en producten gebruikt om spraakvertalingen van hoge kwaliteit uit te voeren. In deze quickstart komen onder andere de volgende onderwerpen aan bod:

  • Spraak-naar-tekst vertalen
  • Spraak omzetten naar meerdere doeltalen
  • Directe spraak-naar-spraak-vertaling uitvoeren

Naar voorbeelden op GitHub

Raadpleeg de Java-quickstartvoorbeelden op GitHub als u direct naar voorbeeldcode wilt gaan.

Vereisten

In dit artikel wordt ervan uitgegaan dat u een Azure-account en een abonnement op de Speech-service hebt. Als u geen account en abonnement hebt, kunt u de Speech-service gratis uitproberen.

De Speech-SDK installeren

Voordat u iets kunt doen, moet u de Speech SDK installeren. Afhankelijk van uw platform volgt u de instructies in de sectie Get the Speech SDK van het artikel About the Speech SDK (Over de Speech SDK).

Afhankelijkheden importeren

Als u de voorbeelden in dit artikel wilt uitvoeren, moet u de volgende instructies import boven aan de *opnemen. Java-codebestand.

package speech;

import java.io.*;
import java.util.*;
import java.util.concurrent.*;
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.*;
import com.microsoft.cognitiveservices.speech.translation.*;

Gevoelige gegevens en omgevingsvariabelen

De voorbeeldbroncode in dit artikel is afhankelijk van omgevingsvariabelen voor het opslaan van gevoelige gegevens, zoals de abonnementssleutel en regio van de Spraak-resource. Het Java-codebestand bevat twee waarden die zijn toegewezen vanuit de omgevingsvariabelen van static final String de hostmachines, namelijk SPEECH__SUBSCRIPTION__KEY en SPEECH__SERVICE__REGION . Beide velden vallen binnen het klassebereik, waardoor ze toegankelijk zijn binnen de methode-instanties van de klasse. Zie omgevingsvariabelen en toepassingsconfiguratie voor meer informatie over omgevingsvariabelen.

public class App {

    static final String SPEECH__SUBSCRIPTION__KEY = System.getenv("SPEECH__SUBSCRIPTION__KEY");
    static final String SPEECH__SERVICE__REGION = System.getenv("SPEECH__SERVICE__REGION");

    public static void main(String[] args) { }
}

Een spraakvertalingsconfiguratie maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechTranslationConfig maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

Tip

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.

Er zijn een paar manieren waarop u een SpeechTranslationConfig kunt initialiseren:

  • Met een abonnement: geef een sleutel en de bijbehorende regio door.
  • Met een eindpunt: geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Met een host: geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Met een autorisatietoken: geef een autorisatietoken en de bijbehorende regio door.

Laten we eens kijken hoe een SpeechTranslationConfig wordt gemaakt met behulp van een sleutel en regio. U kunt deze referenties ophalen door de stappen te volgen in De Speech-service gratis uitproberen.

public class App {

    static final String SPEECH__SUBSCRIPTION__KEY = System.getenv("SPEECH__SERVICE__KEY");
    static final String SPEECH__SERVICE__REGION = System.getenv("SPEECH__SERVICE__REGION");

    public static void main(String[] args) {
        try {
            translateSpeech();
            System.exit(0);
        } catch (Exception ex) {
            System.out.println(ex);
            System.exit(1);
        }
    }

    static void translateSpeech() {
        SpeechTranslationConfig config = SpeechTranslationConfig.fromSubscription(
            SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    }
}

Brontaal wijzigen

Een veelvoorkomende taak van spraakvertaling is het opgeven van de invoertaal (of brontaal). Laten we eens kijken hoe u de invoertaal wijzigt in Italiaans. In uw code communiceert u met het SpeechTranslationConfig exemplaar en roept u de methode setSpeechRecognitionLanguage aan.

static void translateSpeech() {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    // Source (input) language
    translationConfig.setSpeechRecognitionLanguage("it-IT");
}

De setSpeechRecognitionLanguage functie verwacht een notatiereeks voor taal/taal. U kunt in de lijst met ondersteunde Landinstellingen en talen een willekeurige waarde opgeven in de kolom Landinstelling.

Vertaaltaal toevoegen

Een andere veelvoorkomende taak van spraakvertaling is het opgeven van doeltalen, ten minste één is vereist, maar veelvouden worden ondersteund. Met het volgende codefragment worden zowel het Frans als het Duits als doelen voor de vertaaltaal vastgesteld.

static void translateSpeech() {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    translationConfig.setSpeechRecognitionLanguage("it-IT");

    // Translate to languages. See, https://aka.ms/speech/sttt-languages
    translationConfig.addTargetLanguage("fr");
    translationConfig.addTargetLanguage("de");
}

Bij elke aanroep van addTargetLanguage wordt een nieuwe doelvertalingstaal opgegeven. Met andere woorden, wanneer spraak wordt herkend vanuit de brontaal, is elke doelvertaling beschikbaar als onderdeel van de resulterende vertaalbewerking.

Een vertaal recognizer initialiseren

Nadat u een SpeechTranslationConfig hebt gemaakt, is de volgende stap het initialiseren van een TranslationRecognizer. Wanneer u een TranslationRecognizer initialiseert, moet u er uw translationConfig aan doorgeven. Het configuratieobject levert de referenties die de spraakservice nodig heeft om uw aanvraag te valideren.

Als u spraak wilt herkennen met de standaardmicrofoon van uw apparaat, ziet u hier hoe de TranslationRecognizer eruit moet zien:

static void translateSpeech() {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        translationConfig.addTargetLanguage(language);
    }

    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
    }
}

Als u het audio-invoerapparaat wilt opgeven, moet u een AudioConfig maken en de parameter audioConfig opgeven bij het initialiseren van uw TranslationRecognizer.

Eerst verwijst u als AudioConfig volgt naar het object:

static void translateSpeech() {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        translationConfig.addTargetLanguage(language);
    }

    AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig, audioConfig)) {
        
    }
}

Als u een audiobestand wilt opgeven in plaats van een microfoon te gebruiken, moet u nog steeds een audioConfig opgeven. Wanneer u echter een AudioConfig maakt in plaats van fromDefaultMicrophoneInput aan te roepen, roept u fromWavFileInput aan en geeft u de parameter filename door.

static void translateSpeech() {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        translationConfig.addTargetLanguage(language);
    }

    AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig, audioConfig)) {
        
    }
}

Spraak vertalen

Voor het vertalen van spraak is de Speech SDK afhankelijk van een microfoon of audiobestandsinvoer. Spraakherkenning vindt plaats vóór spraakvertaling. Nadat alle objecten zijn initialiseren, roept u de functie recognize-once aan en krijgt u het resultaat.

static void translateSpeech() throws ExecutionException, InterruptedException {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        translationConfig.addTargetLanguage(language);
    }

    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
        System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);

        TranslationRecognitionResult result = recognizer.recognizeOnceAsync().get();
        if (result.getReason() == ResultReason.TranslatedSpeech) {
            System.out.printf("Recognized: \"%s\"\n", result.getText());
            for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
                System.out.printf("Translated into '%s': %s\n", pair.getKey(), pair.getValue());
            }
        }
    }
}

Zie de basisbeginselen van spraakherkenning voor meer informatie over spraak-naar-tekst.

Vertalingen synthetiseren

Na een geslaagde spraakherkenning en vertaling bevat het resultaat alle vertalingen in een woordenlijst. De getTranslations functie retourneert een woordenlijst met de sleutel als de doelvertalingstaal en de waarde is de vertaalde tekst. Herkende spraak kan worden vertaald en vervolgens gesynthetiseerd in een andere taal (spraak-naar-spraak).

Op gebeurtenissen gebaseerde synthese

Het TranslationRecognizer -object geeft een gebeurtenis synthesizing weer. De gebeurtenis wordt meerdere keren in werking gebracht en biedt een mechanisme om de gesynthetiseerde audio op te halen uit het resultaat van de vertalingsherkenning. Zie Handmatige synthese als u naar meerdere talen vertaalt. Geef de synthesestem op door een toe te wijzen en een gebeurtenis-handler voor de gebeurtenis op te geven setVoiceName en de audio op te synthesizing halen. In het volgende voorbeeld wordt de vertaalde audio opgeslagen als een WAV-bestand.

Belangrijk

De op gebeurtenissen gebaseerde synthese werkt alleen met één vertaling. Voeg niet meerdere doeltalen toe. Daarnaast moet de dezelfde taal zijn als de doelvertalingstaal, bijvoorbeeld setVoiceName ; kan worden toe te staan aan "de" "de-DE-Hedda" .

static void translateSpeech() throws ExecutionException, FileNotFoundException, InterruptedException, IOException {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    String fromLanguage = "en-US";
    String toLanguage = "de";
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    translationConfig.addTargetLanguage(toLanguage);

    // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
    translationConfig.setVoiceName("de-DE-Hedda");

    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
        recognizer.synthesizing.addEventListener((s, e) -> {
            byte[] audio = e.getResult().getAudio();
            int size = audio.length;
            System.out.println("Audio synthesized: " + size + " byte(s)" + (size == 0 ? "(COMPLETE)" : ""));

            if (size > 0) {
                try (FileOutputStream file = new FileOutputStream("translation.wav")) {
                    file.write(audio);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });

        System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);

        TranslationRecognitionResult result = recognizer.recognizeOnceAsync().get();
        if (result.getReason() == ResultReason.TranslatedSpeech) {
            System.out.printf("Recognized: \"%s\"\n", result.getText());
            for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
                String language = pair.getKey();
                String translation = pair.getValue();
                System.out.printf("Translated into '%s': %s\n", language, translation);
            }
        }
    }
}

Handmatige synthese

De getTranslations functie retourneert een woordenlijst die kan worden gebruikt voor het synthetiseren van audio uit de vertaaltekst. Door elke vertaling heen gaan en de vertaling synthetiseren. Bij het maken van een instantie moet de eigenschap van het SpeechSynthesizer object zijn ingesteld op de SpeechConfig setSpeechSynthesisVoiceName gewenste stem. Het volgende voorbeeld wordt omgezet in vijf talen en elke vertaling wordt vervolgens gesynthetiseerd naar een audiobestand in de bijbehorende neurale taal.

static void translateSpeech() throws ExecutionException, InterruptedException {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "de", "en", "it", "pt", "zh-Hans" };
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        translationConfig.addTargetLanguage(language);
    }

    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
        System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);

        TranslationRecognitionResult result = recognizer.recognizeOnceAsync().get();
        if (result.getReason() == ResultReason.TranslatedSpeech) {
            // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
            Map<String, String> languageToVoiceMap = new HashMap<String, String>();
            languageToVoiceMap.put("de", "de-DE-KatjaNeural");
            languageToVoiceMap.put("en", "en-US-AriaNeural");
            languageToVoiceMap.put("it", "it-IT-ElsaNeural");
            languageToVoiceMap.put("pt", "pt-BR-FranciscaNeural");
            languageToVoiceMap.put("zh-Hans", "zh-CN-XiaoxiaoNeural");

            System.out.printf("Recognized: \"%s\"\n", result.getText());
            for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
                String language = pair.getKey();
                String translation = pair.getValue();
                System.out.printf("Translated into '%s': %s\n", language, translation);

                SpeechConfig speechConfig =
                    SpeechConfig.fromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
                speechConfig.setSpeechSynthesisVoiceName(languageToVoiceMap.get(language));

                AudioConfig audioConfig = AudioConfig.fromWavFileOutput(language + "-translation.wav");
                try (SpeechSynthesizer synthesizer = new SpeechSynthesizer(speechConfig, audioConfig)) {
                    synthesizer.SpeakTextAsync(translation).get();
                }
            }
        }
    }
}

Zie de basisbeginselen van spraaksynthese voor meer informatie over spraaksynthese.

Een van de belangrijkste functies van de Speech-service is de mogelijkheid om menselijke spraak te herkennen en om te vertalen naar andere talen. In deze quickstart leert u hoe u de Speech SDK in uw apps en producten kunt gebruiken om spraakvertalingen van hoge kwaliteit uit te voeren. In deze quickstart komen onder andere de volgende onderwerpen aan bod:

  • Spraak-naar-tekst vertalen
  • Spraak omzetten naar meerdere doeltalen
  • Directe spraak-naar-spraak-vertaling uitvoeren

Naar voorbeelden op GitHub

Raadpleeg de JavaScript-quickstartvoorbeelden op GitHub als u direct naar voorbeeldcode wilt gaan.

Vereisten

In dit artikel wordt ervan uitgegaan dat u een Azure-account en een abonnement op de Speech-service hebt. Als u geen account en abonnement hebt, kunt u de Speech-service gratis uitproberen.

De Speech-SDK installeren

Voordat u iets kunt doen, moet u de Speech-SDK installeren voor JavaScript. Gebruik de volgende instructies, afhankelijk van uw platform:

Afhankelijk van de doelomgeving gebruikt u daarnaast een van de volgende opties:

Download en extraheerde de Speech SDK voor JavaScript microsoft.cognitiveservices.speech.sdk.bundle.js en plaats het in een map die toegankelijk is voor uw HTML-bestand.

<script src="microsoft.cognitiveservices.speech.sdk.bundle.js"></script>;

Tip

Als u een webbrowser als doel hebt en de tag <script> gebruikt, is het voorvoegsel sdk niet nodig. Het voorvoegsel sdk is een alias die wordt gebruikt om de require-module te benoemen.

Een vertaalconfiguratie maken

Als u de vertaalservice wilt aanroepen met behulp van de Speech SDK, moet u een SpeechTranslationConfig maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

Notitie

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie. Er zijn een paar manieren waarop u een SpeechTranslationConfig kunt initialiseren:

  • Met een abonnement: geef een sleutel en de bijbehorende regio door.
  • Met een eindpunt: geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Met een host: geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Met een autorisatietoken: geef een autorisatietoken en de bijbehorende regio door.

Laten we eens kijken hoe een SpeechTranslationConfig wordt gemaakt met behulp van een sleutel en regio. U kunt deze referenties ophalen door de stappen te volgen in De Speech-service gratis uitproberen.

const speechTranslationConfig = SpeechTranslationConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");

Een translator initialiseren

Nadat u een SpeechTranslationConfig hebt gemaakt, is de volgende stap het initialiseren van een TranslationRecognizer. Wanneer u een TranslationRecognizer initialiseert, moet u er uw speechTranslationConfig aan doorgeven. Hiermee worden de referenties verstrekt die de vertaalservice nodig heeft om uw aanvraag te valideren.

Als u spraak vertaalt die wordt geleverd via de standaardmicrofoon van uw apparaat, ziet u hier hoe TranslationRecognizer de eruit moet zien:

const translator = new TranslationRecognizer(speechTranslationConfig);

Als u het audio-invoerapparaat wilt opgeven, moet u een AudioConfig maken en de parameter audioConfig opgeven bij het initialiseren van uw TranslationRecognizer.

Tip

Meer informatie over het ophalen van de apparaat-id voor het audio-invoerapparaat. Verwijs als volgt naar het AudioConfig-object:

const audioConfig = AudioConfig.fromDefaultMicrophoneInput();
const recognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);

Als u een audiobestand wilt opgeven in plaats van een microfoon te gebruiken, moet u nog steeds een audioConfig opgeven. Dit kan echter alleen worden gedaan wanneer het doel node.js is en wanneer u een AudioConfig maakt, in plaats van fromDefaultMicrophoneInput aan te roepen, roept u fromWavFileOutput aan en geeft u de parameter filename door.

const audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
const recognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);

Spraak vertalen

De klasse TranslationRecognizer voor de Speech SDK voor JavaScript maakt een aantal methoden bekend die u kunt gebruiken voor spraakvertaling.

  • Opstartvertaling (asynchroon) : voert vertaling uit in een niet-blokkerende (asynchrone) modus. Hiermee wordt één utterance vertaald. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt.
  • Continue vertaling (asynchroon) : initieert asynchroon een continue vertaalbewerking. De gebruiker registreert zich bij gebeurtenissen en verwerkt verschillende toepassingsgebeurtenissen. Als u asynchrone continue vertaling wilt stoppen, roept u stopContinuousRecognitionAsync aan.

Notitie

Meer informatie over het kiezen van een spraakherkenningsmodus.

Een doeltaal opgeven

Als u wilt vertalen, moet u zowel een brontaal als ten minste één doeltaal opgeven. U kunt een brontaal kiezen met behulp van een taal die wordt vermeld in de spraakvertalingstabel. Zoek uw opties voor vertaalde taal via dezelfde koppeling. Uw opties voor doeltalen verschillen wanneer u tekst wilt weergeven of gesynthetiseerde vertaalde spraak wilt horen. Als u wilt vertalen van het Engels naar het Duits, wijzigt u het translation config-object:

speechTranslationConfig.speechRecognitionLanguage = "en-US";
speechTranslationConfig.addTargetLanguage("de");

Herkenning van begin

Hier is een voorbeeld van asynchrone at-start-vertaling met behulp van recognizeOnceAsync :

recognizer.recognizeOnceAsync(result => {
    // Interact with result
});

U moet code schrijven om het resultaat af te handelen. In dit voorbeeld wordt de result.reason geëvalueerd voor een vertaling naar het Duits:

recognizer.recognizeOnceAsync(
  function (result) {
    let translation = result.translations.get("de");
    window.console.log(translation);
    recognizer.close();
  },
  function (err) {
    window.console.log(err);
    recognizer.close();
});

Uw code kan ook updates verwerken die worden geleverd terwijl de vertaling wordt verwerkt. U kunt deze updates gebruiken om visuele feedback te geven over de voortgang van de vertaling. Zie dit JavaScriptNode.js voorbeeld voor voorbeeldcode waarin updates worden weer gegeven tijdens het vertaalproces. De volgende code geeft ook details weer die tijdens het vertaalproces zijn geproduceerd.

recognizer.recognizing = function (s, e) {
    var str = ("(recognizing) Reason: " + SpeechSDK.ResultReason[e.result.reason] +
            " Text: " +  e.result.text +
            " Translation:");
    str += e.result.translations.get("de");
    console.log(str);
};
recognizer.recognized = function (s, e) {
    var str = "\r\n(recognized)  Reason: " + SpeechSDK.ResultReason[e.result.reason] +
            " Text: " + e.result.text +
            " Translation:";
    str += e.result.translations.get("de");
    str += "\r\n";
    console.log(str);
};

Doorlopende vertaling

Continue vertaling is iets belangrijker dan herkenning bij het begin. U moet zich abonneren op de gebeurtenissen recognizing, recognizeden canceled om de herkenningsresultaten op te halen. Als u de vertaling wilt stoppen, moet u stopContinuousRecognitionAsync aanroepen. Hier is een voorbeeld van hoe continue vertaling wordt uitgevoerd op een audio-invoerbestand.

Laten we beginnen met het definiëren van de invoer en het initialiseren van een TranslationRecognizer:

const translator = new TranslationRecognizer(speechTranslationConfig);

We nemen een abonnement op de gebeurtenissen die vanuit de TranslationRecognizer worden verzonden.

  • recognizing: Signaal voor gebeurtenissen met tussenliggende vertaalresultaten.
  • recognized: Signaal voor gebeurtenissen met uiteindelijke vertalingsresultaten (wat wijst op een geslaagde vertaalpoging).
  • sessionStopped: Signaal voor gebeurtenissen die het einde van een vertaalsessie (bewerking) aangeven.
  • canceled: Signaal voor gebeurtenissen met geannuleerde vertalingsresultaten (die wijzen op een vertaalpoging die is geannuleerd als gevolg van of een directe annuleringsaanvraag of een transport- of protocolfout).
recognizer.recognizing = (s, e) => {
    console.log(`TRANSLATING: Text=${e.result.text}`);
};
recognizer.recognized = (s, e) => {
    if (e.result.reason == ResultReason.RecognizedSpeech) {
        console.log(`TRANSLATED: Text=${e.result.text}`);
    }
    else if (e.result.reason == ResultReason.NoMatch) {
        console.log("NOMATCH: Speech could not be translated.");
    }
};
recognizer.canceled = (s, e) => {
    console.log(`CANCELED: Reason=${e.reason}`);
    if (e.reason == CancellationReason.Error) {
        console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
        console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
        console.log("CANCELED: Did you update the subscription info?");
    }
    recognizer.stopContinuousRecognitionAsync();
};
recognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    recognizer.stopContinuousRecognitionAsync();
};

Nu alles is ingesteld, kunnen we startContinuousRecognitionAsync aanroepen.

// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
recognizer.startContinuousRecognitionAsync();
// Something later can call, stops recognition.
// recognizer.StopContinuousRecognitionAsync();

Een brontaal kiezen

Een veelvoorkomende taak voor spraakvertaling is het opgeven van de invoertaal (of brontaal). Laten we eens kijken hoe u de invoertaal wijzigt in Italiaans. Zoek uw in uw code SpeechTranslationConfig en voeg de volgende regel direct eronder toe.

speechTranslationConfig.speechRecognitionLanguage = "it-IT";

De eigenschap speechRecognitionLanguage verwacht een indelingstekenreeks voor taal-landinstellingen. U kunt in de lijst met ondersteunde Landinstellingen en talen een willekeurige waarde opgeven in de kolom Landinstelling.

Kies een of meer doeltalen

De Speech SDK kan parallel worden vertaald naar meerdere doeltalen. De beschikbare doeltalen verschillen enigszins van de lijst met brontalen en u geeft doeltalen op met behulp van een taalcode in plaats van een taal. Bekijk een lijst met taalcodes voor tekstdoelen in de spraakvertalingstabel op de pagina voor taalondersteuning. U vindt hier ook details over vertaling in gesynthetiseerde talen.

Met de volgende code wordt het Duits als doeltaal toegevoegd:

translationConfig.addTargetLanguage("de");

Omdat er meerdere doeltalen kunnen worden vertaald, moet uw code de doeltaal opgeven bij het onderzoeken van het resultaat. Met de volgende code worden vertaalresultaten voor het Duits ontvangen.

recognizer.recognized = function (s, e) {
    var str = "\r\n(recognized)  Reason: " +
            sdk.ResultReason[e.result.reason] +
            " Text: " + e.result.text + " Translations:";
    var language = "de";
    str += " [" + language + "] " + e.result.translations.get(language);
    str += "\r\n";
    // show str somewhere
};

Een van de belangrijkste functies van de Speech-service is de mogelijkheid om menselijke spraak te herkennen en om te vertalen naar andere talen. In deze quickstart leert u hoe u de Speech SDK in uw apps en producten kunt gebruiken om spraakvertalingen van hoge kwaliteit uit te voeren. In deze quickstart komen onder andere de volgende onderwerpen aan bod:

  • Spraak-naar-tekst vertalen
  • Spraak omzetten naar meerdere doeltalen
  • Directe spraak-naar-spraak-vertaling uitvoeren

Naar voorbeelden op GitHub

Raadpleeg de Python-quickstartvoorbeelden op GitHub als u direct naar voorbeeldcode wilt gaan.

Vereisten

In dit artikel wordt ervan uitgegaan dat u een Azure-account en een abonnement op de Speech-service hebt. Als u geen account en abonnement hebt, kunt u de Speech-service gratis uitproberen.

De Speech-SDK installeren

Voordat u iets kunt doen, moet u de Speech SDK installeren. Afhankelijk van uw platform volgt u de instructies in de sectie Get the Speech SDK van het artikel About the Speech SDK (Over de Speech SDK).

Afhankelijkheden importeren

Als u de voorbeelden in dit artikel wilt uitvoeren, moet u de volgende instructies import toevoegen aan het begin van het Python-codebestand.

import os
import azure.cognitiveservices.speech as speechsdk

Gevoelige gegevens en omgevingsvariabelen

De voorbeeldbroncode in dit artikel is afhankelijk van omgevingsvariabelen voor het opslaan van gevoelige gegevens, zoals de abonnementssleutel en regio van de Spraak-resource. Het Python-codebestand bevat twee waarden die zijn toegewezen vanuit de omgevingsvariabelen van de hostmachines, namelijk SPEECH__SUBSCRIPTION__KEY en SPEECH__SERVICE__REGION . Beide variabelen hebben het globale bereik, waardoor ze toegankelijk zijn binnen de functiedefinitie van het codebestand. Zie omgevingsvariabelen en toepassingsconfiguratie voor meer informatie over omgevingsvariabelen.

speech_key, service_region = os.environ['SPEECH__SUBSCRIPTION__KEY'], os.environ['SPEECH__SERVICE__REGION']

Een spraakvertalingsconfiguratie maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechTranslationConfig maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

Tip

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.

Er zijn een paar manieren waarop u een SpeechTranslationConfig kunt initialiseren:

  • Met een abonnement: geef een sleutel en de bijbehorende regio door.
  • Met een eindpunt: geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Met een host: geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Met een autorisatietoken: geef een autorisatietoken en de bijbehorende regio door.

Laten we eens kijken hoe een SpeechTranslationConfig wordt gemaakt met behulp van een sleutel en regio. U kunt deze referenties ophalen door de stappen te volgen in De Speech-service gratis uitproberen.

from_language, to_language = 'en-US', 'de'

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

Brontaal wijzigen

Een veelvoorkomende taak van spraakvertaling is het opgeven van de invoertaal (of brontaal). Laten we eens kijken hoe u de invoertaal wijzigt in Italiaans. In uw code communiceert u met het SpeechTranslationConfig exemplaar en wijst u deze toe aan de eigenschap speech_recognition_language .

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    # Source (input) language
    from_language = "it-IT"
    translation_config.speech_recognition_language = from_language

De eigenschap speech_recognition_language verwacht een indelingstekenreeks voor taal-landinstellingen. U kunt in de lijst met ondersteunde Landinstellingen en talen een willekeurige waarde opgeven in de kolom Landinstelling.

Vertaaltaal toevoegen

Een andere veelvoorkomende taak van spraakvertaling is het opgeven van doeltalen, ten minste één is vereist, maar veelvouden worden ondersteund. Met het volgende codefragment worden zowel het Frans als het Duits als doelen voor de vertaaltaal vastgesteld.

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = "it-IT"

    # Translate to languages. See, https://aka.ms/speech/sttt-languages
    translation_config.add_target_language("fr")
    translation_config.add_target_language("de")

Bij elke aanroep van add_target_language wordt een nieuwe doelvertalingstaal opgegeven. Met andere woorden, wanneer spraak wordt herkend vanuit de brontaal, is elke doelvertaling beschikbaar als onderdeel van de resulterende vertaalbewerking.

Een vertaal recognizer initialiseren

Nadat u een SpeechTranslationConfig hebt gemaakt, is de volgende stap het initialiseren van een TranslationRecognizer. Wanneer u een TranslationRecognizer initialiseert, moet u er uw translation_config aan doorgeven. Het configuratieobject levert de referenties die de spraakservice nodig heeft om uw aanvraag te valideren.

Als u spraak wilt herkennen met de standaardmicrofoon van uw apparaat, ziet u hier hoe de TranslationRecognizer eruit moet zien:

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    translation_config.add_target_language(to_language)

    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)

Als u het audio-invoerapparaat wilt opgeven, moet u een AudioConfig maken en de parameter audio_config opgeven bij het initialiseren van uw TranslationRecognizer.

Eerst verwijst u als AudioConfig volgt naar het object:

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    for lang in to_languages:
        translation_config.add_target_language(lang)

    audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config, audio_config=audio_config)

Als u een audiobestand wilt opgeven in plaats van een microfoon te gebruiken, moet u nog steeds een audioConfig opgeven. Wanneer u echter een maakt in plaats van aan te roepen met , roept u aan AudioConfig met en geeft u de parameter use_default_microphone=True filename="path-to-file.wav" filename op.

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    for lang in to_languages:
        translation_config.add_target_language(lang)

    audio_config = speechsdk.audio.AudioConfig(filename="path-to-file.wav")
    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config, audio_config=audio_config)

Spraak vertalen

Voor het vertalen van spraak is de Speech-SDK afhankelijk van een microfoon of audiobestandsinvoer. Spraakherkenning vindt plaats vóór spraakomzetting. Nadat alle objecten zijn initialiseren, roept u de functie recognize-once aan en krijgt u het resultaat.

import os
import azure.cognitiveservices.speech as speechsdk

speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_languages = 'en-US', 'de'

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    translation_config.add_target_language(to_language)

    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)
    
    print('Say something...')
    result = recognizer.recognize_once()
    print(get_result_text(reason=result.reason, result=result))

def get_result_text(reason, result):
    reason_format = {
        speechsdk.ResultReason.TranslatedSpeech:
            f'RECOGNIZED "{from_language}": {result.text}\n' +
            f'TRANSLATED into "{to_language}"": {result.translations[to_language]}',
        speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{result.text}"',
        speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {result.no_match_details}',
        speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {result.cancellation_details}'
    }
    return reason_format.get(reason, 'Unable to recognize speech')

translate_speech_to_text()

Zie de basisbeginselen van spraakherkenning voor meer informatie over spraak-naar-tekst.

Vertalingen synthetiseren

Na een geslaagde spraakherkenning en vertaling bevat het resultaat alle vertalingen in een woordenboek. De translations woordenlijstsleutel is de doelvertalingstaal en de waarde is de vertaalde tekst. Herkende spraak kan worden vertaald en vervolgens gesynthetiseerd in een andere taal (spraak-naar-spraak).

Op gebeurtenissen gebaseerde synthese

Het TranslationRecognizer -object geeft een gebeurtenis Synthesizing weer. De gebeurtenis wordt meerdere keren in werking gebracht en biedt een mechanisme om de gesynthetiseerde audio op te halen uit het resultaat van de vertalingsherkenning. Zie Handmatige synthese als u naar meerdere talen vertaalt. Geef de synthesestem op door een toe te wijzen en een gebeurtenis-handler voor de gebeurtenis op te geven voice_name en de audio op te Synthesizing halen. In het volgende voorbeeld wordt de vertaalde audio opgeslagen als een WAV-bestand.

Belangrijk

De op gebeurtenissen gebaseerde synthese werkt alleen met één vertaling. Voeg niet meerdere doeltalen toe. Daarnaast moet de dezelfde taal zijn als de doelvertalingstaal, bijvoorbeeld voice_name ; kan worden toe te staan aan "de" "de-DE-Hedda" .

import os
import azure.cognitiveservices.speech as speechsdk

speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_language = 'en-US', 'de'

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    translation_config.add_target_language(to_language)

    # See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
    translation_config.voice_name = "de-DE-Hedda"

    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)

    def synthesis_callback(evt):
        size = len(evt.result.audio)
        print(f'Audio synthesized: {size} byte(s) {"(COMPLETED)" if size == 0 else ""}')

        if size > 0:
            file = open('translation.wav', 'wb+')
            file.write(evt.result.audio)
            file.close()

    recognizer.synthesizing.connect(synthesis_callback)

    print(f'Say something in "{from_language}" and we\'ll translate into "{to_language}".')

    result = recognizer.recognize_once()
    print(get_result_text(reason=result.reason, result=result))

def get_result_text(reason, result):
    reason_format = {
        speechsdk.ResultReason.TranslatedSpeech:
            f'Recognized "{from_language}": {result.text}\n' +
            f'Translated into "{to_language}"": {result.translations[to_language]}',
        speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{result.text}"',
        speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {result.no_match_details}',
        speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {result.cancellation_details}'
    }
    return reason_format.get(reason, 'Unable to recognize speech')

translate_speech_to_text()

Handmatige synthese

De translations woordenlijst kan worden gebruikt voor het synthetiseren van audio uit de vertaaltekst. Door elke vertaling te itereren en de vertaling te synthetiseren. Bij het maken van een instantie moet de eigenschap van het SpeechSynthesizer object zijn ingesteld op de SpeechConfig speech_synthesis_voice_name gewenste stem. Het volgende voorbeeld wordt omgezet in vijf talen en elke vertaling wordt vervolgens gesynthetiseerd naar een audiobestand in de bijbehorende neurale taal.

import os
import azure.cognitiveservices.speech as speechsdk

speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_languages = 'en-US', [ 'de', 'en', 'it', 'pt', 'zh-Hans' ]

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    for lang in to_languages:
        translation_config.add_target_language(lang)

    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)
    
    print('Say something...')
    result = recognizer.recognize_once()
    synthesize_translations(result=result)

def synthesize_translations(result):
    language_to_voice_map = {
        "de": "de-DE-KatjaNeural",
        "en": "en-US-AriaNeural",
        "it": "it-IT-ElsaNeural",
        "pt": "pt-BR-FranciscaNeural",
        "zh-Hans": "zh-CN-XiaoxiaoNeural"
    }
    print(f'Recognized: "{result.text}"')

    for language in result.translations:
        translation = result.translations[language]
        print(f'Translated into "{language}": {translation}')

        speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)
        speech_config.speech_synthesis_voice_name = language_to_voice_map.get(language)
        
        audio_config = speechsdk.audio.AudioOutputConfig(filename=f'{language}-translation.wav')
        speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)
        speech_synthesizer.speak_text_async(translation).get()

translate_speech_to_text()

Zie de basisbeginselen van spraaksynthese voor meer informatie over spraaksynthese.

Een van de belangrijkste functies van de Speech-service is de mogelijkheid om menselijke spraak te herkennen en om te vertalen naar andere talen. In deze quickstart leert u hoe u de Speech SDK in uw apps en producten gebruikt om spraakvertalingen van hoge kwaliteit uit te voeren. In deze quickstart wordt spraak van de microfoon omgezet in tekst in een andere taal.

Vereisten

In dit artikel wordt ervan uitgegaan dat u een Azure-account en een abonnement op de Speech-service hebt. Als u geen account en abonnement hebt, kunt u de Speech-service gratis uitproberen.

Downloaden en installeren

Volg deze stappen om de Speech CLI te installeren voor Windows:

  1. In Windows hebt u het Microsoft Visual C++ Redistributable for Visual Studio 2019 voor uw platform nodig. Bij een eerste installatie is mogelijk een herstart vereist.

  2. Installeer .NET Core 3.1 SDK.

  3. Installeer de Speech CLI met NuGet door deze opdracht in te voeren:

    dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
    

Typ spx om Help weer te geven voor de Speech CLI.

Notitie

Als alternatief voor NuGet kunt u de Speech CLI voor een Windows downloaden en uitpakken als zip-bestand.

Lettertypebeperkingen

In Windows kan de Speech CLI alleen de lettertypen weergeven die beschikbaar zijn voor de opdrachtprompt op de lokale computer. Windows Terminal ondersteunt alle lettertypen die interactief worden gemaakt door de Speech CLI.

Als u naar een bestand uitvoert, kunnen in een teksteditor zoals Kladblok of een webbrowser zoals Microsoft Edge ook alle lettertypen worden weergegeven.

Bron- en doeltaal instellen

Met deze opdracht wordt speech-CLI aanroepen om spraak van de microfoon van het Italiaans naar het Frans te vertalen.

 spx translate --microphone --source it-IT --target fr

Volgende stappen