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 AddTargetLanguage
egy ú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
.
Tipp.
Megtudhatja, hogyan szerezheti be a hangbemeneti eszköz eszközazonosítóját.
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 AddTargetLanguage
egy ú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
.
Tipp.
Megtudhatja, hogyan szerezheti be a hangbemeneti eszköz eszközazonosítóját.
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 addTargetLanguage
egy ú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
.
Tipp.
Megtudhatja, hogyan szerezheti be a hangbemeneti eszköz eszközazonosítóját.
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
.
Tipp.
Megtudhatja, hogyan szerezheti be a hangbemeneti eszköz eszközazonosítóját.
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 fromDefaultMicrophoneInput
helyett, 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_language
egy ú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
.
Tipp.
Megtudhatja, hogyan szerezheti be a hangbemeneti eszköz eszközazonosítóját.
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.
Futtassa a következő .NET CLI-parancsot a Speech CLI telepítéséhez:
dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
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 leREGION
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