Megosztás a következőn keresztül:


Beszéd felismerése és fordítása

Referenciadokumentáció-csomag (NuGet) | További minták a GitHubon |

Ebben az útmutatóban megtanulhatja, hogyan ismerheti fel és fordíthatja le az emberi beszédet egy másik nyelvre.

A beszédfordítással kapcsolatos további információkért tekintse meg a beszédfordítás áttekintését :

  • Beszéd fordítása szöveggé
  • Beszéd fordítása több célnyelvre
  • Közvetlen beszédfordítás végrehajtása

Bizalmas adatok és környezeti változók

A cikkben szereplő példa forráskód a bizalmas adatok tárolására szolgáló környezeti változóktól függ, például a Speech-erőforrás kulcsától és régiójától. Az Program osztály két static readonly string értéket tartalmaz, amelyek a gazdagép környezeti változóiból vannak hozzárendelve: SPEECH__SUBSCRIPTION__KEY és SPEECH__SERVICE__REGION. Mindkét mező az osztály hatókörében található, ezért az osztály metódustörzsei között érhetők el:

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

További információ a környezeti változókról: Környezeti változók és alkalmazáskonfiguráció.

Fontos

HA API-kulcsot használ, biztonságosan tárolja valahol máshol, például az Azure Key Vaultban. Ne foglalja bele közvetlenül az API-kulcsot a kódba, és soha ne tegye közzé nyilvánosan.

Az AI-szolgáltatások biztonságáról további információt az Azure AI-szolgáltatásokhoz érkező kérelmek hitelesítése című témakörben talál.

Beszédfordítási konfiguráció létrehozása

Ahhoz, hogy meghívja a Speech szolgáltatást a Speech SDK használatával, létre kell hoznia egy példányt SpeechTranslationConfig . Ez az osztály az előfizetéssel kapcsolatos információkat tartalmazza, például a kulcsot és a kapcsolódó régiót, végpontot, gazdagépet vagy engedélyezési jogkivonatot.

Tipp.

Függetlenül attól, hogy beszédfelismerést, beszédszintézist, fordítást vagy szándékfelismerést végez, mindig létre fog hozni egy konfigurációt.

Néhány módon inicializálható SpeechTranslationConfig :

  • Előfizetéssel: adja meg a kulcsot és a hozzá tartozó régiót.
  • Végponttal: pass in a Speech service endpoint. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
  • Gazdagéppel: adjon meg egy gazdagépcímet. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
  • Engedélyezési jogkivonattal: adja meg az engedélyezési jogkivonatot és a kapcsolódó régiót.

Nézzük meg, hogyan hozhat létre példányt SpeechTranslationConfig kulcs és régió használatával. Kérje le a Speech erőforráskulcsot és -régiót az Azure Portalon.

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 speechTranslationConfig =
            SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    }
}

A forrásnyelv módosítása

A beszédfordítás egyik gyakori feladata a bemeneti (vagy forrásnyelvi) nyelv megadása. Az alábbi példa bemutatja, hogyan módosítaná a beviteli nyelvet olaszra. A kódban a következő tulajdonsághoz rendelve SpeechRecognitionLanguage kezelheti a SpeechTranslationConfig példányt:

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

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

A SpeechRecognitionLanguage tulajdonság nyelvi területi formázási sztringet vár. Tekintse meg a támogatott beszédfordítási területi beállítások listáját.

Fordítási nyelv hozzáadása

A beszédfordítás másik gyakori feladata a célfordítási nyelvek megadása. Legalább egy szükséges, de a többszörösök támogatottak. A következő kódrészlet a francia és a német nyelvet is nyelvi célként állítja be:

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

    speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
    
    speechTranslationConfig.AddTargetLanguage("fr");
    speechTranslationConfig.AddTargetLanguage("de");
}

Minden hívásnál AddTargetLanguageegy új célfordítási nyelv van megadva. Más szóval, ha a forrásnyelvről felismerik a beszédet, minden célfordítás elérhető az eredményként kapott fordítási művelet részeként.

Fordítás-felismerő inicializálása

Miután létrehozott egy példányt SpeechTranslationConfig , a következő lépés az inicializálás TranslationRecognizer. Az inicializáláskor TranslationRecognizerát kell adnia a példányt speechTranslationConfig . A konfigurációs objektum biztosítja azokat a hitelesítő adatokat, amelyekre a Speech szolgáltatásnak szüksége van a kérés érvényesítéséhez.

Ha az eszköz alapértelmezett mikrofonjával ismeri fel a beszédet, a következőképpen kell kinéznie a TranslationRecognizer példánynak:

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

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

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
}

Ha meg szeretné adni a hangbemeneti eszközt, létre kell hoznia egy osztálypéldányt AudioConfig , és meg kell adnia a paramétert az audioConfig inicializáláskor TranslationRecognizer.

Először hivatkozzon az objektumra az AudioConfig alábbiak szerint:

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

    using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
}

Ha mikrofon helyett hangfájlt szeretne megadni, akkor is meg kell adnia egy paramétert audioConfig . Amikor azonban egy osztálypéldányt AudioConfig hoz létre hívás helyett FromDefaultMicrophoneInput, meghívja FromWavFileInput és átadja a paramétert filename :

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

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

Beszéd fordítása

A Speech SDK mikrofont vagy hangfájlbemenet használ a beszédfordításhoz. A beszédfordítás előtt a rendszer beszédfelismerést végez. Az összes objektum inicializálása után hívja meg a felismerési egyszer függvényt, és kérje le az eredményt:

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

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

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

A szövegfelolvasással kapcsolatos további információkért tekintse meg a beszédfelismerés alapjait.

Eseményalapú fordítás

Az TranslationRecognizer objektum egy eseményt Recognizing tesz közzé. Az esemény többször aktiválódik, és egy mechanizmust biztosít a köztes fordítás eredményeinek lekéréséhez.

Feljegyzés

A köztes fordítási eredmények nem érhetők el többnyelvű beszédfordítás használatakor.

Az alábbi példa a köztes fordítás eredményeit nyomtatja ki a konzolra:

using (var audioInput = AudioConfig.FromWavFileInput(@"whatstheweatherlike.wav"))
{
    using (var translationRecognizer = new TranslationRecognizer(config, audioInput))
    {
        // Subscribes to events.
        translationRecognizer.Recognizing += (s, e) =>
        {
            Console.WriteLine($"RECOGNIZING in '{fromLanguage}': Text={e.Result.Text}");
            foreach (var element in e.Result.Translations)
            {
                Console.WriteLine($"    TRANSLATING into '{element.Key}': {element.Value}");
            }
        };

        translationRecognizer.Recognized += (s, e) => {
            if (e.Result.Reason == ResultReason.TranslatedSpeech)
            {
                Console.WriteLine($"RECOGNIZED in '{fromLanguage}': 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.");
            }
        };

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

        // Waits for completion.
        // Use Task.WaitAny to keep the task rooted.
        Task.WaitAny(new[] { stopTranslation.Task });

        // Stops translation.
        await translationRecognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
    }
}

Fordítások szintetizálása

A sikeres beszédfelismerést és -fordítást követően a fordítások egy szótárba kerülnek. A Translations szótárkulcs a célfordító nyelv, az érték pedig a lefordított szöveg. A felismert beszéd lefordítható, majd más nyelven (beszédről beszédre) szintetizálható.

Eseményalapú szintézis

Az TranslationRecognizer objektum egy eseményt Synthesizing tesz közzé. Az esemény többször aktiválódik, és egy mechanizmust biztosít a szintetizált hang lekérésére a fordításfelismerés eredményéből. Ha több nyelvre fordít, olvassa el a Manuális szintézis című témakört.

Adja meg a szintetizáló hangot egy VoiceName példány hozzárendelésével, és adjon meg egy eseménykezelőt a Synthesizing hang lekéréséhez. Az alábbi példa a lefordított hangot .wav fájlként menti.

Fontos

Az eseményalapú szintézis csak egyetlen fordítással működik. Ne adjon hozzá több célfordítási nyelvet. Emellett az VoiceName értéknek a célfordítás nyelvével megegyező nyelvnek kell lennie. Leképezhető például "de" a következőre "de-DE-Hedda": .

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

    speechTranslationConfig.VoiceName = "de-DE-Hedda";

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

    translationRecognizer.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 translationRecognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        Console.WriteLine($"Recognized: \"{result.Text}\"");
        Console.WriteLine($"Translated into '{toLanguage}': {result.Translations[toLanguage]}");
    }
}

Manuális szintézis

A szótár segítségével szintetizálhatja a Translations fordítási szöveg hanganyagát. Iterálja végig az egyes fordításokat, és szintetizálja azt. Példány létrehozásakor SpeechSynthesizer az objektumnak a SpeechConfig kívánt hangra kell állítania a tulajdonságát SpeechSynthesisVoiceName .

Az alábbi példa öt nyelvre fordítható le. Ezután minden fordítás egy hangfájlba lesz szintetizálva a megfelelő neurális nyelven.

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

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

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

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

    var result = await translationRecognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        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 speechSynthesizer = new SpeechSynthesizer(speechConfig, audioConfig);
            
            await speechSynthesizer.SpeakTextAsync(translation);
        }
    }
}

A beszédszintézisről további információt a beszédszintézis alapjaiban talál.

Többnyelvű fordítás nyelvazonosítással

Sok esetben előfordulhat, hogy nem tudja, hogy mely beviteli nyelveket kell megadnia. A nyelvazonosítással legfeljebb 10 lehetséges beviteli nyelvet észlelhet, és automatikusan lefordíthatja a célnyelveket.

Az alábbi példa arra számít, hogy a en-US rendszer észleli vagy zh-CN észleli őket, mert azok definiálva vannak.AutoDetectSourceLanguageConfig Ezután a beszéd lefordítva de fr lesz a hívásban megadottak szerint AddTargetLanguage().

speechTranslationConfig.AddTargetLanguage("de");
speechTranslationConfig.AddTargetLanguage("fr");
var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);

A teljes kódmintát a nyelvazonosítással kapcsolatban talál.

Többnyelvű beszédfordítás forrásnyelvi jelöltek nélkül

A többnyelvű beszédfordítás a beszédfordítás új szintjét valósítja meg, amely különböző képességeket old meg, beleértve a megadott beviteli nyelv használatát és a nyelvi kapcsolók kezelését ugyanazon a munkameneten belül. Ezek a funkciók lehetővé teszik a termékekben implementálható beszédfordítási képességek új szintjét.

Jelenleg, amikor beszédfordítással használja a nyelvi azonosítót, létre kell hoznia az SpeechTranslationConfig objektumot a v2-végpontból. Cserélje le a "YourServiceRegion" sztringet a Speech erőforrásrégióra (például "westus"). Cserélje le a "YourSubscriptionKey" szót a Speech erőforráskulcsra.

var v2EndpointInString = String.Format("wss://{0}.stt.speech.microsoft.com/speech/universal/v2", "YourServiceRegion");
var v2EndpointUrl = new Uri(v2EndpointInString);
var speechTranslationConfig = SpeechTranslationConfig.FromEndpoint(v2EndpointUrl, "YourSubscriptionKey");

Adja meg a fordítási célnyelveket. Cserélje le a kívánt nyelvekre. További sorokat is hozzáadhat.

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

A többnyelvű beszédfordítás egyik fő különbsége, hogy nem kell megadnia a forrásnyelvet. Ennek az az oka, hogy a szolgáltatás automatikusan észleli a forrásnyelvet. Hozza létre az AutoDetectSourceLanguageConfig objektumot azzal a fromOpenRange módszerrel, amellyel tudathatja a szolgáltatással, hogy többnyelvű beszédfordítást szeretne használni megadott forrásnyelv nélkül.

AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.fromOpenRange(); 
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);

A Speech SDK-val kapcsolatos teljes kódmintát a GitHub beszédfordítási mintáiban talál.

Egyéni fordítás használata beszédfordításban

A beszédfordítás egyéni fordítási funkciója zökkenőmentesen integrálható az Azure Custom Translation szolgáltatással, így pontosabb és személyre szabott fordításokat érhet el. Mivel az integráció közvetlenül kihasználja az Azure egyéni fordítási szolgáltatás képességeit, egy többszolgáltatásos erőforrást kell használnia a funkciók teljes halmazának megfelelő működéséhez. Részletes útmutatásért tekintse meg az Azure AI-szolgáltatásokhoz készült többszolgáltatásos erőforrás létrehozásáról szóló útmutatót.

Emellett az egyéni fordító offline betanításához és a "Kategóriaazonosító" beszerzéséhez tekintse meg a rövid útmutatóban található részletes szkriptet: Egyéni modell létrehozása, üzembe helyezése és használata – Egyéni fordító.

// Creates an instance of a translation recognizer using speech translation configuration
// You should use the same subscription key, which you used to generate the custom model before.
// V2 endpoint is required for the “Custom Translation” feature. Example: "wss://westcentralus.stt.speech.microsoft.com/speech/universal/v2"

try (SpeechTranslationConfig config = SpeechTranslationConfig.fromEndpoint(URI.create(endpointUrl), speechSubscriptionKey)) {

            // Sets source and target language(s).
           ….

            // Set the category id
            config.setCustomModelCategoryId("yourCategoryId");

       ….
}

Referenciadokumentáció-csomag (NuGet) | További minták a GitHubon |

Ebben az útmutatóban megtanulhatja, hogyan ismerheti fel és fordíthatja le az emberi beszédet egy másik nyelvre.

A beszédfordítással kapcsolatos további információkért tekintse meg a beszédfordítás áttekintését :

  • Beszéd fordítása szöveggé
  • Beszéd fordítása több célnyelvre
  • Közvetlen beszédfordítás végrehajtása

Bizalmas adatok és környezeti változók

A cikkben szereplő példa forráskód a bizalmas adatok tárolására szolgáló környezeti változóktól függ, például a Speech-erőforrás kulcsától és régiójától. A C++ kódfájl két sztringértéket tartalmaz, amelyek a gazdagép környezeti változóiból vannak hozzárendelve: SPEECH__SUBSCRIPTION__KEY és SPEECH__SERVICE__REGION. Mindkét mező az osztály hatókörében található, ezért az osztály metódustörzsei között érhetők el:

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

További információ a környezeti változókról: Környezeti változók és alkalmazáskonfiguráció.

Fontos

HA API-kulcsot használ, biztonságosan tárolja valahol máshol, például az Azure Key Vaultban. Ne foglalja bele közvetlenül az API-kulcsot a kódba, és soha ne tegye közzé nyilvánosan.

Az AI-szolgáltatások biztonságáról további információt az Azure AI-szolgáltatásokhoz érkező kérelmek hitelesítése című témakörben talál.

Beszédfordítási konfiguráció létrehozása

Ahhoz, hogy meghívja a Speech szolgáltatást a Speech SDK használatával, létre kell hoznia egy példányt SpeechTranslationConfig . Ez az osztály az előfizetéssel kapcsolatos információkat tartalmazza, például a kulcsot és a kapcsolódó régiót, végpontot, gazdagépet vagy engedélyezési jogkivonatot.

Tipp.

Függetlenül attól, hogy beszédfelismerést, beszédszintézist, fordítást vagy szándékfelismerést végez, mindig létre fog hozni egy konfigurációt.

Néhány módon inicializálható SpeechTranslationConfig :

  • Előfizetéssel: adja meg a kulcsot és a hozzá tartozó régiót.
  • Végponttal: pass in a Speech service endpoint. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
  • Gazdagéppel: adjon meg egy gazdagépcímet. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
  • Engedélyezési jogkivonattal: adja meg az engedélyezési jogkivonatot és a kapcsolódó régiót.

Nézzük meg, hogyan hozhat létre példányt SpeechTranslationConfig kulcs és régió használatával. Kérje le a Speech erőforráskulcsot és -régiót az Azure Portalon.

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

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

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

A forrásnyelv módosítása

A beszédfordítás egyik gyakori feladata a bemeneti (vagy forrásnyelvi) nyelv megadása. Az alábbi példa bemutatja, hogyan módosítaná a beviteli nyelvet olaszra. A kódban használja a példányt a SpeechTranslationConfig SetSpeechRecognitionLanguage metódus meghívásával.

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

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

A SpeechRecognitionLanguage tulajdonság nyelvi területi formázási sztringet vár. Tekintse meg a támogatott beszédfordítási területi beállítások listáját.

Fordítási nyelv hozzáadása

A beszédfordítás másik gyakori feladata a célfordítási nyelvek megadása. Legalább egy szükséges, de a többszörösök támogatottak. A következő kódrészlet a francia és a német nyelvet is nyelvi célként állítja be:

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

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

    speechTranslationConfig->AddTargetLanguage("fr");
    speechTranslationConfig->AddTargetLanguage("de");
}

Minden hívásnál AddTargetLanguageegy új célfordítási nyelv van megadva. Más szóval, ha a forrásnyelvről felismerik a beszédet, minden célfordítás elérhető az eredményként kapott fordítási művelet részeként.

Fordítás-felismerő inicializálása

Miután létrehozott egy példányt SpeechTranslationConfig , a következő lépés az inicializálás TranslationRecognizer. Az inicializáláskor TranslationRecognizerát kell adnia a példányt translationConfig . A konfigurációs objektum biztosítja azokat a hitelesítő adatokat, amelyekre a Speech szolgáltatásnak szüksége van a kérés érvényesítéséhez.

Ha az eszköz alapértelmezett mikrofonjával ismeri fel a beszédet, a következőképpen TranslationRecognizer kell kinéznie:

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

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

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

Ha meg szeretné adni a hangbemeneti eszközt, létre kell hoznia egy osztálypéldányt AudioConfig , és meg kell adnia a paramétert az audioConfig inicializáláskor TranslationRecognizer.

Először hivatkozzon az objektumra az AudioConfig alábbiak szerint:

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

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

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

Ha mikrofon helyett hangfájlt szeretne megadni, akkor is meg kell adnia egy paramétert audioConfig . Amikor azonban egy osztálypéldányt AudioConfig hoz létre hívás helyett FromDefaultMicrophoneInput, meghívja FromWavFileInput és átadja a paramétert filename :

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

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

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

Beszéd fordítása

A Speech SDK mikrofont vagy hangfájlbemenet használ a beszédfordításhoz. A beszédfordítás előtt a rendszer beszédfelismerést végez. Az összes objektum inicializálása után hívja meg a felismerési egyszer függvényt, és kérje le az eredményt:

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

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

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

    auto result = translationRecognizer->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;
        }
    }
}

A szövegfelolvasással kapcsolatos további információkért tekintse meg a beszédfelismerés alapjait.

Fordítások szintetizálása

A sikeres beszédfelismerést és -fordítást követően a fordítások egy szótárba kerülnek. A Translations szótárkulcs a célfordító nyelv, az érték pedig a lefordított szöveg. A felismert beszéd lefordítható, majd más nyelven (beszédről beszédre) szintetizálható.

Eseményalapú szintézis

Az TranslationRecognizer objektum egy eseményt Synthesizing tesz közzé. Az esemény többször aktiválódik, és egy mechanizmust biztosít a szintetizált hang lekérésére a fordításfelismerés eredményéből. Ha több nyelvre fordít, olvassa el a Manuális szintézis című témakört.

Adja meg a szintetizáló hangot egy SetVoiceName példány hozzárendelésével, és adjon meg egy eseménykezelőt a Synthesizing hang lekéréséhez. Az alábbi példa a lefordított hangot .wav fájlként menti.

Fontos

Az eseményalapú szintézis csak egyetlen fordítással működik. Ne adjon hozzá több célfordítási nyelvet. Emellett az SetVoiceName értéknek a célfordítás nyelvével megegyező nyelvnek kell lennie. Leképezhető például "de" a következőre "de-DE-Hedda": .

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

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

    speechTranslationConfig->SetVoiceName("de-DE-Hedda");

    auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);
    translationRecognizer->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 = translationRecognizer->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;
        }
    }
}

Manuális szintézis

A szótár segítségével szintetizálhatja a Translations fordítási szöveg hanganyagát. Iterálja végig az egyes fordításokat, és szintetizálja azt. Példány létrehozásakor SpeechSynthesizer az objektumnak a SpeechConfig kívánt hangra kell állítania a tulajdonságát SetSpeechSynthesisVoiceName .

Az alábbi példa öt nyelvre fordítható le. Ezután minden fordítás egy hangfájlba lesz szintetizálva a megfelelő neurális nyelven.

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

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

    auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);

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

    auto result = translationRecognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        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 speechConfig =
                SpeechConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
            speechConfig->SetSpeechSynthesisVoiceName(languageToVoiceMap[language]);

            auto audioConfig = AudioConfig::FromWavFileOutput(language + "-translation.wav");
            auto speechSynthesizer = SpeechSynthesizer::FromConfig(speechConfig, audioConfig);

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

A beszédszintézisről további információt a beszédszintézis alapjaiban talál.

Többnyelvű fordítás nyelvazonosítással

Sok esetben előfordulhat, hogy nem tudja, hogy mely beviteli nyelveket kell megadnia. A nyelvazonosítással legfeljebb 10 lehetséges beviteli nyelvet észlelhet, és automatikusan lefordíthatja a célnyelveket.

Az alábbi példa arra számít, hogy a en-US rendszer észleli vagy zh-CN észleli őket, mert azok definiálva vannak.AutoDetectSourceLanguageConfig Ezután a rendszer lefordítja de fr a beszédet a hívásban AddTargetLanguage()megadott módon.

speechTranslationConfig->AddTargetLanguage("de");
speechTranslationConfig->AddTargetLanguage("fr");
auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });
auto translationRecognizer = TranslationRecognizer::FromConfig(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);

A teljes kódmintát a nyelvazonosítással kapcsolatban talál.

Referenciadokumentáció csomag (Go) | További minták a GitHubon |

A Speech SDK for Go nem támogatja a beszédfordítást. Válasszon egy másik programozási nyelvet, vagy a Go referenciát és a cikk elejétől csatolt mintákat.

Referenciadokumentáció | További minták a GitHubon

Ebben az útmutatóban megtanulhatja, hogyan ismerheti fel és fordíthatja le az emberi beszédet egy másik nyelvre.

A beszédfordítással kapcsolatos további információkért tekintse meg a beszédfordítás áttekintését :

  • Beszéd fordítása szöveggé
  • Beszéd fordítása több célnyelvre
  • Közvetlen beszédfordítás végrehajtása

Bizalmas adatok és környezeti változók

A cikkben szereplő példa forráskód a bizalmas adatok tárolására szolgáló környezeti változóktól függ, például a Speech-erőforrás kulcsától és régiójától. A Java-kódfájl két static final String értéket tartalmaz, amelyek a gazdagép környezeti változóiból vannak hozzárendelve: SPEECH__SUBSCRIPTION__KEY és SPEECH__SERVICE__REGION. Mindkét mező az osztály hatókörében található, ezért az osztály metódustörzsei között érhetők el:

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) { }
}

További információ a környezeti változókról: Környezeti változók és alkalmazáskonfiguráció.

Fontos

HA API-kulcsot használ, biztonságosan tárolja valahol máshol, például az Azure Key Vaultban. Ne foglalja bele közvetlenül az API-kulcsot a kódba, és soha ne tegye közzé nyilvánosan.

Az AI-szolgáltatások biztonságáról további információt az Azure AI-szolgáltatásokhoz érkező kérelmek hitelesítése című témakörben talál.

Beszédfordítási konfiguráció létrehozása

Ahhoz, hogy meghívja a Speech szolgáltatást a Speech SDK használatával, létre kell hoznia egy példányt SpeechTranslationConfig . Ez az osztály az előfizetéssel kapcsolatos információkat tartalmazza, például a kulcsot és a kapcsolódó régiót, végpontot, gazdagépet vagy engedélyezési jogkivonatot.

Tipp.

Függetlenül attól, hogy beszédfelismerést, beszédszintézist, fordítást vagy szándékfelismerést végez, mindig létre fog hozni egy konfigurációt.

Néhány módon inicializálhat egy SpeechTranslationConfig példányt:

  • Előfizetéssel: adja meg a kulcsot és a hozzá tartozó régiót.
  • Végponttal: pass in a Speech service endpoint. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
  • Gazdagéppel: adjon meg egy gazdagépcímet. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
  • Engedélyezési jogkivonattal: adja meg az engedélyezési jogkivonatot és a kapcsolódó régiót.

Nézzük meg, hogyan hozhat létre példányt SpeechTranslationConfig kulcs és régió használatával. Kérje le a Speech erőforráskulcsot és -régiót az Azure Portalon.

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 speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
            SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    }
}

A forrásnyelv módosítása

A beszédfordítás egyik gyakori feladata a bemeneti (vagy forrásnyelvi) nyelv megadása. Az alábbi példa bemutatja, hogyan módosítaná a beviteli nyelvet olaszra. A kódban használja a példányt a SpeechTranslationConfig setSpeechRecognitionLanguage metódus meghívásával:

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

A setSpeechRecognitionLanguage függvény egy nyelvi területi formázási sztringet vár. Tekintse meg a támogatott beszédfordítási területi beállítások listáját.

Fordítási nyelv hozzáadása

A beszédfordítás másik gyakori feladata a célfordítási nyelvek megadása. Legalább egy szükséges, de a többszörösök támogatottak. A következő kódrészlet a francia és a német nyelvet is nyelvi célként állítja be:

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

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

Minden hívásnál addTargetLanguageegy új célfordítási nyelv van megadva. Más szóval, ha a forrásnyelvről felismerik a beszédet, minden célfordítás elérhető az eredményként kapott fordítási művelet részeként.

Fordítás-felismerő inicializálása

Miután létrehozott egy példányt SpeechTranslationConfig , a következő lépés az inicializálás TranslationRecognizer. Az inicializáláskor TranslationRecognizerát kell adnia a példányt speechTranslationConfig . A konfigurációs objektum biztosítja azokat a hitelesítő adatokat, amelyekre a Speech szolgáltatásnak szüksége van a kérés érvényesítéséhez.

Ha az eszköz alapértelmezett mikrofonjával ismeri fel a beszédet, a következőképpen TranslationRecognizer kell kinéznie:

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

    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
    }
}

Ha meg szeretné adni a hangbemeneti eszközt, létre kell hoznia egy osztálypéldányt AudioConfig , és meg kell adnia a paramétert az audioConfig inicializáláskor TranslationRecognizer.

Először hivatkozzon az objektumra az AudioConfig alábbiak szerint:

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

    AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig)) {
        
    }
}

Ha mikrofon helyett hangfájlt szeretne megadni, akkor is meg kell adnia egy paramétert audioConfig . Amikor azonban egy osztálypéldányt AudioConfig hoz létre hívás helyett fromDefaultMicrophoneInput, meghívja fromWavFileInput és átadja a paramétert filename :

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

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

Beszéd fordítása

A Speech SDK mikrofont vagy hangfájlbemenet használ a beszédfordításhoz. A beszédfordítás előtt a rendszer beszédfelismerést végez. Az összes objektum inicializálása után hívja meg a felismerési egyszer függvényt, és kérje le az eredményt:

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

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

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

A szövegfelolvasással kapcsolatos további információkért tekintse meg a beszédfelismerés alapjait.

Fordítások szintetizálása

A sikeres beszédfelismerést és -fordítást követően a fordítások egy szótárba kerülnek. A getTranslations függvény egy szótárt ad vissza, amelynek kulcsát a célfordítási nyelv, az értéket pedig lefordított szövegként adja vissza. A felismert beszéd lefordítható, majd más nyelven (beszédről beszédre) szintetizálható.

Eseményalapú szintézis

Az TranslationRecognizer objektum egy eseményt synthesizing tesz közzé. Az esemény többször aktiválódik, és egy mechanizmust biztosít a szintetizált hang lekérésére a fordításfelismerés eredményéből. Ha több nyelvre fordít, olvassa el a Manuális szintézis című témakört.

Adja meg a szintetizáló hangot egy setVoiceName példány hozzárendelésével, és adjon meg egy eseménykezelőt a synthesizing hang lekéréséhez. Az alábbi példa a lefordított hangot .wav fájlként menti.

Fontos

Az eseményalapú szintézis csak egyetlen fordítással működik. Ne adjon hozzá több célfordítási nyelvet. Emellett az setVoiceName értéknek a célfordítás nyelvével megegyező nyelvnek kell lennie. Leképezhető például "de" a következőre "de-DE-Hedda": .

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

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

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

    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
        translationRecognizer.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 translationRecognitionResult = translationRecognizer.recognizeOnceAsync().get();
        if (translationRecognitionResult.getReason() == ResultReason.TranslatedSpeech) {
            System.out.printf("Recognized: \"%s\"\n", translationRecognitionResult.getText());
            for (Map.Entry<String, String> pair : translationRecognitionResult.getTranslations().entrySet()) {
                String language = pair.getKey();
                String translation = pair.getValue();
                System.out.printf("Translated into '%s': %s\n", language, translation);
            }
        }
    }
}

Manuális szintézis

A getTranslations függvény egy szótárat ad vissza, amellyel szintetizálhatja a fordítási szöveg hanganyagát. Iterálja végig az egyes fordításokat, és szintetizálja azt. Példány létrehozásakor SpeechSynthesizer az objektumnak a SpeechConfig kívánt hangra kell állítania a tulajdonságát setSpeechSynthesisVoiceName .

Az alábbi példa öt nyelvre fordítható le. Ezután minden fordítás egy hangfájlba lesz szintetizálva a megfelelő neurális nyelven.

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

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

        TranslationRecognitionResult translationRecognitionResult = translationRecognizer.recognizeOnceAsync().get();
        if (translationRecognitionResult.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", translationRecognitionResult.getText());
            for (Map.Entry<String, String> pair : translationRecognitionResult.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 speechSynthesizer = new SpeechSynthesizer(speechConfig, audioConfig)) {
                    speechSynthesizer.SpeakTextAsync(translation).get();
                }
            }
        }
    }
}

A beszédszintézisről további információt a beszédszintézis alapjaiban talál.

Referenciadokumentáció csomag (npm) | További minták a GitHub | Library forráskódján |

Ebben az útmutatóban megtanulhatja, hogyan ismerheti fel és fordíthatja le az emberi beszédet egy másik nyelvre.

A beszédfordítással kapcsolatos további információkért tekintse meg a beszédfordítás áttekintését :

  • Beszéd fordítása szöveggé
  • Beszéd fordítása több célnyelvre
  • Közvetlen beszédfordítás végrehajtása

Fordítási konfiguráció létrehozása

Ha a Speech SDK használatával szeretné meghívni a fordítási szolgáltatást, létre kell hoznia egy példányt SpeechTranslationConfig . Ez az osztály az előfizetéssel kapcsolatos információkat tartalmazza, például a kulcsot és a kapcsolódó régiót, végpontot, gazdagépet vagy engedélyezési jogkivonatot.

Feljegyzés

Függetlenül attól, hogy beszédfelismerést, beszédszintézist, fordítást vagy szándékfelismerést végez, mindig létre fog hozni egy konfigurációt.

Néhány módon inicializálható SpeechTranslationConfig :

  • Előfizetéssel: adja meg a kulcsot és a hozzá tartozó régiót.
  • Végponttal: pass in a Speech service endpoint. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
  • Gazdagéppel: adjon meg egy gazdagépcímet. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
  • Engedélyezési jogkivonattal: adja meg az engedélyezési jogkivonatot és a kapcsolódó régiót.

Nézzük meg, hogyan hozhat létre példányt SpeechTranslationConfig kulcs és régió használatával. Kérje le a Speech erőforráskulcsot és -régiót az Azure Portalon.

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

Fordító inicializálása

Miután létrehozott egy példányt SpeechTranslationConfig , a következő lépés az inicializálás TranslationRecognizer. Az inicializáláskor TranslationRecognizerát kell adnia a példányt speechTranslationConfig . A konfigurációs objektum megadja a fordítási szolgáltatás által igényelt hitelesítő adatokat a kérés érvényesítéséhez.

Ha az eszköz alapértelmezett mikrofonján keresztül nyújtott beszédet fordít, a következőképpen TranslationRecognizer kell kinéznie:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

Ha meg szeretné adni a hangbemeneti eszközt, létre kell hoznia egy osztálypéldányt AudioConfig , és meg kell adnia a paramétert az audioConfig inicializáláskor TranslationRecognizer.

Az objektumra az AudioConfig alábbiak szerint hivatkozhat:

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

Ha mikrofon helyett hangfájlt szeretne megadni, akkor is meg kell adnia egy paramétert audioConfig . Ezt azonban csak akkor teheti meg, ha Node.js céloz meg. Amikor létrehoz egy osztálypéldányt AudioConfig a hívás fromDefaultMicrophoneInputhelyett, meghívja fromWavFileOutput és átadja a paramétert filename :

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

Beszéd fordítása

A JavaScripthez készült Speech SDK TranslationRecognizer osztálya a beszédfordításhoz használható módszereket teszi elérhetővé:

  • Egylövetű fordítás (aszinkron): Nem blokkoló (aszinkron) módban hajtja végre a fordítást. Egyetlen kimondott szöveget fordít le. Egyetlen kimondott szöveg végét határozza meg úgy, hogy hallgat a csendre a végén, vagy legfeljebb 15 másodpercnyi hang feldolgozásáig.
  • Folyamatos fordítás (aszinkron): Aszinkron módon elindít egy folyamatos fordítási műveletet. A felhasználó regisztrál az eseményekre, és kezeli a különböző alkalmazásállapotokat. Az aszinkron folyamatos fordítás leállításához hívja meg a .stopContinuousRecognitionAsync

Ha többet szeretne megtudni a beszédfelismerési mód kiválasztásáról, olvassa el a beszédfelismerés első lépéseit ismertető témakört.

Célnyelv megadása

A fordításhoz meg kell adnia egy forrásnyelvet és legalább egy célnyelvet.

A forrásnyelvet a Speech fordítási táblában felsorolt területi beállítással választhatja ki. A lefordított nyelvre vonatkozó lehetőségeket ugyanazon a hivatkozáson találja.

A célnyelvek beállításai akkor különböznek, ha szöveget szeretne megtekinteni, vagy ha szintetizált lefordított beszédet szeretne hallani. A fordítás angolról németre történő fordításához módosítsa a fordítás konfigurációs objektumát:

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

Egylövetű felismerés

Íme egy példa az aszinkron egylövetű fordításra a következővel recognizeOnceAsync:

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

Az eredmény kezeléséhez meg kell írnia néhány kódot. Ez a minta kiértékeli result.reason a német nyelvre történő fordítást:

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

A kód a fordítás feldolgozása során megadott frissítéseket is képes kezelni. Ezekkel a frissítésekkel vizuális visszajelzést adhat a fordítás előrehaladásáról. Ez a JavaScript-Node.js példa az ilyen típusú frissítéseket mutatja be. Az alábbi kód a fordítási folyamat során létrehozott részleteket is megjeleníti:

translationRecognizer.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);
};
translationRecognizer.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);
};

Folyamatos fordítás

A folyamatos fordítás egy kicsit nagyobb szerepet játszik, mint az egy lövéses felismerés. A felismerési eredmények eléréséhez elő kell fizetnie a recognizing, recognizedés canceled az eseményekre. A fordítás leállításához meg kell hívnia stopContinuousRecognitionAsync.

Íme egy példa arra, hogyan történik a folyamatos fordítás egy hangbemeneti fájlon. Kezdjük a bemenet meghatározásával és az inicializálással TranslationRecognizer:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

A következő kódban előfizet a következő eseményekre TranslationRecognizer:

  • recognizing: Köztes fordítási eredményeket tartalmazó események jelzése.
  • recognized: A végleges fordítási eredményeket tartalmazó események jelzése. Ezek az eredmények sikeres fordítási kísérletet jeleznek.
  • sessionStopped: A fordítási munkamenet (művelet) végét jelző események jelzése.
  • canceled: A megszakított fordítási eredményeket tartalmazó események jelzése. Ezek az események olyan fordítási kísérletet jeleznek, amelyet közvetlen lemondás miatt töröltek. Másik lehetőségként átviteli vagy protokollhibát jeleznek.
translationRecognizer.recognizing = (s, e) => {
    console.log(`TRANSLATING: Text=${e.result.text}`);
};
translationRecognizer.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.");
    }
};
translationRecognizer.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 set the speech resource key and region values?");
    }
    translationRecognizer.stopContinuousRecognitionAsync();
};
translationRecognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    translationRecognizer.stopContinuousRecognitionAsync();
};

Ha minden be van állítva, a következőt hívhatja startContinuousRecognitionAsync:

// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
translationRecognizer.startContinuousRecognitionAsync();
// Something later can call. Stops recognition.
// translationRecognizer.StopContinuousRecognitionAsync();

Forrásnyelv kiválasztása

A beszédfordítás gyakori feladata a bemeneti (vagy forrásnyelvi) nyelv megadása. Az alábbi példa bemutatja, hogyan módosítaná a beviteli nyelvet olaszra. Keresse meg a példányt a SpeechTranslationConfig kódban, és adja hozzá közvetlenül alatta a következő sort:

speechTranslationConfig.speechRecognitionLanguage = "it-IT";

A speechRecognitionLanguage tulajdonság nyelvi területi formázási sztringet vár. Tekintse meg a támogatott beszédfordítási területi beállítások listáját.

Válasszon egy vagy több célnyelvet

A Speech SDK egyszerre több célnyelvre is lefordítható. A rendelkezésre álló célnyelvek némileg eltérnek a forrásnyelvek listájától. A célnyelveket nyelvkóddal, nem területi beállítással adhatja meg.

A szövegcélok nyelvkódjainak listáját a nyelvtámogatási oldalon található beszédfordítási táblázat tartalmazza. Itt a szintetizált nyelvekre történő fordítással kapcsolatos részleteket is megtalálhatja.

A következő kód a német nyelvet adja hozzá célnyelvként:

speechTranslationConfig.addTargetLanguage("de");

Mivel több célnyelvi fordítás is lehetséges, a kódnak meg kell adnia a célnyelvet az eredmény vizsgálatakor. A következő kód német nyelvű fordítási eredményeket kap:

translationRecognizer.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
};

Referenciadokumentáció csomag (letöltés) | További minták a GitHubon |

Az Objective-C-hez készült Speech SDK támogatja a beszédfordítást, de itt még nem tartalmaztunk útmutatót. Válasszon egy másik programozási nyelvet az első lépésekhez, és ismerje meg a fogalmakat, vagy tekintse meg a cikk elején hivatkozott Objective-C referenciát és mintákat.

Referenciadokumentáció csomag (letöltés) | További minták a GitHubon |

A Speech SDK for Swift támogatja a beszédfordítást, de itt még nem tartalmaztunk útmutatót. Válasszon egy másik programozási nyelvet az első lépésekhez, és ismerje meg a fogalmakat, vagy tekintse meg a swift-hivatkozást és a cikk elején hivatkozott mintákat.

Referenciadokumentáció csomag (PyPi) | További minták a GitHubon |

Ebben az útmutatóban megtanulhatja, hogyan ismerheti fel és fordíthatja le az emberi beszédet egy másik nyelvre.

A beszédfordítással kapcsolatos további információkért tekintse meg a beszédfordítás áttekintését :

  • Beszéd fordítása szöveggé
  • Beszéd fordítása több célnyelvre
  • Közvetlen beszédfordítás végrehajtása

Bizalmas adatok és környezeti változók

A cikkben szereplő példa forráskód a bizalmas adatok tárolására szolgáló környezeti változóktól függ, például a Speech-erőforrás előfizetési kulcsától és régiójától. A Python-kódfájl két értéket tartalmaz, amelyek a gazdagép környezeti változóiból vannak hozzárendelve: SPEECH__SUBSCRIPTION__KEY és SPEECH__SERVICE__REGION. Mindkét változó a globális hatókörben található, ezért a kódfájl függvénydefiníciójában érhetők el:

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

További információ a környezeti változókról: Környezeti változók és alkalmazáskonfiguráció.

Fontos

HA API-kulcsot használ, biztonságosan tárolja valahol máshol, például az Azure Key Vaultban. Ne foglalja bele közvetlenül az API-kulcsot a kódba, és soha ne tegye közzé nyilvánosan.

Az AI-szolgáltatások biztonságáról további információt az Azure AI-szolgáltatásokhoz érkező kérelmek hitelesítése című témakörben talál.

Beszédfordítási konfiguráció létrehozása

Ahhoz, hogy meghívja a Speech szolgáltatást a Speech SDK használatával, létre kell hoznia egy példányt SpeechTranslationConfig . Ez az osztály az előfizetéssel kapcsolatos információkat tartalmazza, például a kulcsot és a kapcsolódó régiót, végpontot, gazdagépet vagy engedélyezési jogkivonatot.

Tipp.

Függetlenül attól, hogy beszédfelismerést, beszédszintézist, fordítást vagy szándékfelismerést végez, mindig létre fog hozni egy konfigurációt.

Néhány módon inicializálható SpeechTranslationConfig :

  • Előfizetéssel: adja meg a kulcsot és a hozzá tartozó régiót.
  • Végponttal: pass in a Speech service endpoint. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
  • Gazdagéppel: adjon meg egy gazdagépcímet. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
  • Engedélyezési jogkivonattal: adja meg az engedélyezési jogkivonatot és a kapcsolódó régiót.

Nézzük meg, hogyan hozhat létre példányt SpeechTranslationConfig kulcs és régió használatával. Kérje le a Speech erőforráskulcsot és -régiót az Azure Portalon.

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

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

A forrásnyelv módosítása

A beszédfordítás egyik gyakori feladata a bemeneti (vagy forrásnyelvi) nyelv megadása. Az alábbi példa bemutatja, hogyan módosítaná a beviteli nyelvet olaszra. A kódban használja a példányt a SpeechTranslationConfig tulajdonsághoz speech_recognition_language rendelve.

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

A speech_recognition_language tulajdonság nyelvi területi formázási sztringet vár. Tekintse meg a támogatott beszédfordítási területi beállítások listáját.

Fordítási nyelv hozzáadása

A beszédfordítás másik gyakori feladata a célfordítási nyelvek megadása. Legalább egy szükséges, de a többszörösök támogatottak. A következő kódrészlet a francia és a német nyelvet is nyelvi célként állítja be:

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

Minden hívásnál add_target_languageegy új célfordítási nyelv van megadva. Más szóval, ha a forrásnyelvről felismerik a beszédet, minden célfordítás elérhető az eredményként kapott fordítási művelet részeként.

Fordítás-felismerő inicializálása

Miután létrehozott egy példányt SpeechTranslationConfig , a következő lépés az inicializálás TranslationRecognizer. Az inicializáláskor TranslationRecognizerát kell adnia a példányt translation_config . A konfigurációs objektum biztosítja azokat a hitelesítő adatokat, amelyekre a Speech szolgáltatásnak szüksége van a kérés érvényesítéséhez.

Ha az eszköz alapértelmezett mikrofonjával ismeri fel a beszédet, a következőképpen TranslationRecognizer kell kinéznie:

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)

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

Ha meg szeretné adni a hangbemeneti eszközt, létre kell hoznia egy osztálypéldányt AudioConfig , és meg kell adnia a paramétert az audio_config inicializáláskor TranslationRecognizer.

Először hivatkozzon az objektumra az AudioConfig alábbiak szerint:

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)
    translation_recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config, audio_config=audio_config)

Ha mikrofon helyett hangfájlt szeretne megadni, akkor is meg kell adnia egy paramétert audioConfig . Amikor azonban egy osztálypéldányt AudioConfig hoz létre, ahelyett, hogy meghívja use_default_microphone=True, a következő paramétert filename="path-to-file.wav" kell megadnia filename :

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")
    translation_recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config, audio_config=audio_config)

Beszéd fordítása

A Speech SDK mikrofont vagy hangfájlbemenet használ a beszédfordításhoz. A beszédfordítás előtt a rendszer beszédfelismerést végez. Az összes objektum inicializálása után hívja meg a felismerési egyszer függvényt, és kérje le az eredményt:

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)

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

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

translate_speech_to_text()

A szövegfelolvasással kapcsolatos további információkért tekintse meg a beszédfelismerés alapjait.

Fordítások szintetizálása

A sikeres beszédfelismerést és -fordítást követően a fordítások egy szótárba kerülnek. A translations szótárkulcs a célfordító nyelv, az érték pedig a lefordított szöveg. A felismert beszéd lefordítható, majd más nyelven (beszédről beszédre) szintetizálható.

Eseményalapú szintézis

Az TranslationRecognizer objektum egy eseményt Synthesizing tesz közzé. Az esemény többször aktiválódik, és egy mechanizmust biztosít a szintetizált hang lekérésére a fordításfelismerés eredményéből. Ha több nyelvre fordít, olvassa el a Manuális szintézis című témakört.

Adja meg a szintetizáló hangot egy voice_name példány hozzárendelésével, és adjon meg egy eseménykezelőt a Synthesizing hang lekéréséhez. Az alábbi példa a lefordított hangot .wav fájlként menti.

Fontos

Az eseményalapú szintézis csak egyetlen fordítással működik. Ne adjon hozzá több célfordítási nyelvet. Emellett az voice_name értéknek a célfordítás nyelvével megegyező nyelvnek kell lennie. Leképezhető például "de" a következőre "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"

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

    translation_recognizer.synthesizing.connect(synthesis_callback)

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

    translation_recognition_result = translation_recognizer.recognize_once()
    print(get_result_text(reason=translation_recognition_result.reason, result=translation_recognition_result))

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

translate_speech_to_text()

Manuális szintézis

A szótár segítségével szintetizálhatja a translations fordítási szöveg hanganyagát. Iterálja végig az egyes fordításokat, és szintetizálja azt. Példány létrehozásakor SpeechSynthesizer az objektumnak a SpeechConfig kívánt hangra kell állítania a tulajdonságát speech_synthesis_voice_name .

Az alábbi példa öt nyelvre fordítható le. Ezután minden fordítás egy hangfájlba lesz szintetizálva a megfelelő neurális nyelven.

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...')
    translation_recognition_result = translation_recognizer.recognize_once()
    synthesize_translations(result=translation_recognition_result)

def synthesize_translations(translation_recognition_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: "{translation_recognition_result.text}"')

    for language in translation_recognition_result.translations:
        translation = translation_recognition_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()

A beszédszintézisről további információt a beszédszintézis alapjaiban talál.

Többnyelvű fordítás nyelvazonosítással

Sok esetben előfordulhat, hogy nem tudja, hogy mely beviteli nyelveket kell megadnia. A nyelvazonosítással legfeljebb 10 lehetséges beviteli nyelvet észlelhet, és automatikusan lefordíthatja a célnyelveket.

A teljes kódmintát a nyelvazonosítással kapcsolatban talál.

Speech to text REST API reference | Speech to text REST API for short audio reference | További minták a GitHubon

Használhatja a REST API-t a beszédfordításhoz, de még nem tartalmaztunk útmutatót. Az első lépésekhez és a fogalmak megismeréséhez válasszon egy másik programozási nyelvet.

Ebben az útmutatóban megtanulhatja, hogyan ismerheti fel és fordíthatja le az emberi beszédet egy másik nyelvre.

A beszédfordítással kapcsolatos további információkért tekintse meg a beszédfordítás áttekintését :

  • Beszéd fordítása szöveggé
  • Beszéd fordítása több célnyelvre
  • Közvetlen beszédfordítás végrehajtása

Előfeltételek

  • Azure-előfizetés. Ingyenesen létrehozhat egyet.
  • Speech-erőforrás létrehozása az Azure Portalon.
  • Kérje le a Speech erőforráskulcsát és régióját. A Speech-erőforrás üzembe helyezése után válassza az Ugrás az erőforrásra lehetőséget a kulcsok megtekintéséhez és kezeléséhez.

Letöltés és telepítés

Kövesse ezeket a lépéseket, és tekintse meg a Speech CLI rövid útmutatóját a platform egyéb követelményeiről.

  1. Futtassa a következő .NET CLI-parancsot a Speech CLI telepítéséhez:

    dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
    
  2. Futtassa az alábbi parancsokat a Speech-erőforráskulcs és -régió konfigurálásához. Cserélje le SUBSCRIPTION-KEY a Speech erőforráskulcsot, és cserélje le REGION a Speech erőforrásrégiójára.

    spx config @key --set SUBSCRIPTION-KEY
    spx config @region --set REGION
    

Forrás- és célnyelvek beállítása

Ez a parancs meghívja a Speech CLI-t, hogy lefordítsa a beszédet a mikrofonból olaszról franciára:

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

Következő lépések