Technology

So verwenden Sie AI zum Transkribieren, Übersetzen und Hinzufügen von Untertiteln zu Ihren Movies

Neben dem Kochen für mich selbst und dem Rundgang durch das Haus habe ich gelernt, japanische Cartoons (oder „Anime“, wie die Kinder es nennen) während der Quarantäne zu lieben.

Das Problem beim Anschauen von Anime ist jedoch, dass Sie, wenn Sie kein Japanisch lernen, auf menschliche Übersetzer und Sprachschauspieler angewiesen sind, um den Inhalt auf Ihre Sprache zu portieren. Manchmal erhalten Sie die Untertitel (“Subs”), aber nicht die Sprachausgabe (“Dubs”). In anderen Fällen werden ganze Staffeln von Shows überhaupt nicht übersetzt, und Sie haben nur noch Wikipedia-Zusammenfassungen und 90er-Jahre-Webforen, um Sie durch die Dunkelheit zu bringen.

Also, was sollst du tun? Die Antwort ist offensichtlich nicht, einen Computer zu bitten, ganze Episoden einer TV-Show von Japanisch auf Englisch zu transkribieren, zu übersetzen und zu sprechen. Übersetzen ist eine sorgfältige Kunst, die nicht automatisiert werden kann und die liebevolle Berührung einer menschlichen Hand erfordert. Außerdem, selbst wenn Sie maschinelles Lernen zum Übersetzen eines Videos verwendet hätten, könnten Sie keinen Computer zum Überspielen verwenden … Ich meine, wer würde eine ganze Saison lang maschinelle Stimmen hören wollen? Es wäre schrecklich. Nur ein echter Kranker würde das wollen.

In diesem Beitrag zeige ich Ihnen, wie Sie mithilfe von maschinellem Lernen Videos von einer Sprache in eine andere transkribieren, übersetzen und per Sprachausgabe übertragen können, z. B. „AI-Powered Video Dubs“. Möglicherweise erhalten Sie keine Ergebnisse in Netflix-Qualität, aber Sie können sie zur Not verwenden, um Online-Gespräche und YouTube-Videos zu lokalisieren. Wir beginnen mit der Übertragung von Audio in Text mithilfe von Google Clouds Speech-to-Text-API. Als nächstes übersetzen wir diesen Text mit dem API übersetzen. Zum Schluss werden wir die Übersetzungen mit dem “Voice Act” ausführen Text-to-Speech-API, die Stimmen erzeugt, die laut den Dokumenten „menschlich“ sind.

(Übrigens, bevor du mich in den Kommentaren in Flammen aufgibst, sollte ich dir sagen, dass YouTube es tun wird automatisch und kostenlos transkribieren und übersetzen Sie Ihre Videos für Sie. Sie können dieses Projekt also wie Ihr neues Hobby behandeln, Sauerteig von Grund auf zu backen: eine wirklich ineffiziente Nutzung von 30 Stunden.)

AI-synchronisierte Videos: Klingen sie normalerweise gut?

Bevor Sie sich auf diese Reise begeben, möchten Sie wahrscheinlich wissen, worauf Sie sich freuen müssen. Welche Qualität können wir realistisch von einer ML-Video-Dubbing-Pipeline erwarten?

Hier ist ein Beispiel, das automatisch von Englisch nach Spanisch synchronisiert wird (die Untertitel werden auch automatisch in Englisch generiert). Ich habe es nicht eingestellt oder angepasst:

Wie Sie sehen können, sind die Transkriptionen anständig, aber nicht perfekt, und das Gleiche gilt für die Übersetzungen. (Ignorieren Sie die Tatsache, dass der Sprecher manchmal zu schnell spricht – dazu später mehr.) Insgesamt können Sie aus diesem synchronisierten Video leicht einen Überblick über die Vorgänge in diesem synchronisierten Video gewinnen, aber es ist nicht annähernd menschlich.

Was dieses Projekt schwieriger macht (sprich: mehr Spaß) als die meisten anderen, ist, dass es mindestens drei mögliche Fehlerquellen gibt:

  1. Das Video kann von der Speech-to-Text-API falsch von Audio in Text übertragen werden
  2. Dieser Text kann von der Übersetzungs-API falsch oder umständlich übersetzt werden
  3. Diese Übersetzungen können von der Text-to-Speech-API falsch ausgesprochen werden

Nach meiner Erfahrung waren die erfolgreichsten synchronisierten Videos diejenigen, die einen einzelnen Lautsprecher über einen klaren Audiostream enthielten und von Englisch in eine andere Sprache synchronisiert wurden. Dies liegt hauptsächlich daran, dass die Qualität der Transkription (Speech-to-Text) in Englisch viel höher war als in anderen Ausgangssprachen.

Das Überspielen aus nicht englischen Sprachen erwies sich als wesentlich schwieriger. Hier ist ein besonders unscheinbarer Dub von Japanisch nach Englisch einer meiner Lieblingsshows, Death Note:

Wenn Sie das Übersetzen / Überspielen den Menschen überlassen möchten, kann ich Ihnen keine Vorwürfe machen. Aber wenn nicht, lesen Sie weiter!

Erstellen einer KI, die Dubber übersetzt

Wie immer finden Sie den gesamten Code für dieses Projekt in der Machen mit maschinellem Lernen Github Repo. Um den Code selbst auszuführen, folgen Sie der README-Datei, um Ihre Anmeldeinformationen zu konfigurieren und APIs zu aktivieren. Hier in diesem Beitrag werde ich nur meine Erkenntnisse auf hohem Niveau durchgehen.

Hier sind die folgenden Schritte:

  1. Extrahieren Sie Audio aus Videodateien
  2. Konvertieren Sie Audio mithilfe der Speech-to-Text-API in Text
  3. Teilen Sie transkribierten Text zur Übersetzung in Sätze / Segmente auf
  4. Text übersetzen
  5. Generieren Sie gesprochene Audioversionen des übersetzten Textes
  6. Beschleunigen Sie das generierte Audio, um es an den Originallautsprecher im Video anzupassen
  7. Nähen Sie das neue Audio über das Falz-Audio / Video

Ich gebe zu, als ich anfing, diesen Dubber zu bauen, war ich voller Hybris – alles was ich tun musste, war ein paar APIs zusammenzufügen, was könnte einfacher sein? Aber als Programmierer muss jede Hybris bestraft werden, und Junge, wurde ich bestraft.

Die herausfordernden Punkte sind die, die ich oben fett geschrieben habe und die hauptsächlich darauf zurückzuführen sind, dass Übersetzungen mit Videos ausgerichtet werden müssen. Aber dazu gleich mehr.

Verwenden der Google Cloud Speech-to-Text-API

Der erste Schritt beim Übersetzen eines Videos besteht darin, sein Audio in Wörter zu übertragen. Dazu habe ich Google Clouds verwendet Speech-to-Text-API. Dieses Tool kann Audio in 125 Sprachen erkennen, aber wie oben erwähnt, ist die Qualität in Englisch am höchsten. Für unseren Anwendungsfall möchten wir einige spezielle Funktionen aktivieren, wie z.

  • Verbesserte Modelle. Hierbei handelt es sich um Speech-to-Text-Modelle, die für bestimmte Datentypen („Video“, „phone_call“) trainiert wurden und normalerweise eine höhere Qualität aufweisen. Wir werden natürlich das “Video” -Modell verwenden.

  • Obszönitätsfilter. Dieses Flag verhindert, dass die API ungezogene Wörter zurückgibt.
  • Wortzeitversätze. Dieses Flag teilt der API mit, dass transkribierte Wörter zusammen mit den Zeiten, zu denen der Sprecher sie gesagt hat, zurückgegeben werden sollen. Wir werden diese Zeitstempel verwenden, um unsere Untertitel und Dubs mit dem Quellvideo auszurichten.
  • Sprachanpassung. In der Regel hat Speech-to-Text am meisten mit ungewöhnlichen Wörtern oder Phrasen zu kämpfen. Wenn Sie wissen, dass bestimmte Wörter oder Phrasen wahrscheinlich in Ihrem Video erscheinen (z. B. “Gradientenabstieg”, “Support Vector Machine”), können Sie sie in einem Array an die API übergeben, das die Wahrscheinlichkeit erhöht, dass sie transkribiert werden:

Die API gibt den transkribierten Text zusammen mit Zeitstempeln auf Wortebene als JSON zurück. Als Beispiel habe ich transkribiert Dieses Video. Sie können den von der API zurückgegebenen JSON in sehen das Wesentliche. Mit der Ausgabe können wir auch eine schnelle Überprüfung der Qualität durchführen:

Was ich eigentlich gesagt habe:

“Softwareentwickler. Wir sind nicht für unseren rockigen Stil bekannt, oder? Oder sind wir? Heute zeige ich Ihnen, wie ich mich mit ML trendiger gemacht habe und mich von Influencern inspirieren ließ. “

Was die API dachte, sagte ich:

“Softwareentwickler. Wir sind nicht bekannt für unseren Rock und Stil. Sind wir oder sind wir heute? Ich werde Ihnen zeigen, wie ich mit ml neue Trends mache, die sich von Influencern inspirieren lassen. “

Nach meiner Erfahrung geht es hier um die Qualität, die Sie beim Transkribieren von qualitativ hochwertigem englischem Audio erwarten können. Beachten Sie, dass die Interpunktion etwas abweicht. Wenn Sie mit den Zuschauern zufrieden sind, die den Kern eines Videos verstehen, ist dies wahrscheinlich gut genug, obwohl es einfach ist, die Transkripte selbst manuell zu korrigieren, wenn Sie die Ausgangssprache sprechen.

An dieser Stelle können wir die API-Ausgabe verwenden, um (nicht übersetzte) Untertitel zu generieren. Wenn Sie mein Skript mit dem Flag `–srt` ausführen, wird es genau das für Sie tun (srt ist ein Dateityp für Untertitel):

Maschinenübersetzung

Nachdem wir die Video-Transkripte haben, können wir die verwenden API übersetzen, um … äh … sie zu übersetzen.

Hier fangen die Dinge an, ein wenig zu werden 🤪.

Unser Ziel ist Folgendes: Wir möchten in der Lage sein, Wörter im Originalvideo zu übersetzen und sie dann ungefähr zum gleichen Zeitpunkt wiederzugeben, sodass meine „synchronisierte“ Stimme mit meiner tatsächlichen Stimme übereinstimmt.

Das Problem ist jedoch, dass Übersetzungen nicht Wort für Wort sind. Ein Satz, der vom Englischen ins Japanische übersetzt wurde, kann eine durcheinandergebrachte Wortreihenfolge haben. Es kann weniger Wörter, mehr Wörter, verschiedene Wörter oder (wie es bei Redewendungen der Fall ist) völlig andere Formulierungen enthalten.

Eine Möglichkeit, dies zu umgehen, besteht darin, das Ganze zu übersetzen Sätze und dann versuchen, die Zeitgrenzen dieser Sätze auszurichten. Aber auch das wird kompliziert, denn wie bezeichnet man einen einzelnen Satz? Im Englischen können wir Wörter durch Satzzeichen teilen, dh:

Die Interpunktion unterscheidet sich jedoch je nach Sprache (auf Englisch gibt es kein ¿), und einige Sprachen trennen Sätze überhaupt nicht durch Interpunktionszeichen.

Plus, in wahres Leben Sprache sprechen wir oft nicht in vollständigen Sätzen. Weißt du?

Eine weitere Falte, die das Übersetzen von Transkripten erschwert, ist, dass im Allgemeinen die Mehr Kontext, den Sie in ein Übersetzungsmodell einspeisen, je höher die Qualität der Übersetzung, die Sie erwarten können. Wenn ich zum Beispiel den folgenden Satz ins Französische übersetze:

“Ich fühle mich blau, aber ich mag auch rosa.”

Ich werde die Übersetzung bekommen:

“Ich fühle mich blau, aber ich mag auch rosa.”

Das ist richtig. Aber wenn ich diesen Satz in zwei Teile teile (“Ich fühle mich blau” und “Aber ich mag auch rosa”) und jeden Teil einzeln übersetze, bekomme ich:

“Ich fühle mich traurig, aber ich mag auch rosa”, dh “Ich fühle mich traurig, aber ich mag auch rosa.”

Dies bedeutet, dass die Qualität der Übersetzungen umso schlechter ist, je mehr Text wir vor dem Senden an die Übersetzungs-API zerlegen (obwohl es einfacher ist, sie zeitlich an dem Video auszurichten).

Letztendlich bestand die Strategie, die ich gewählt hatte, darin, gesprochene Wörter jedes Mal aufzuteilen, wenn der Sprecher eine Pause von mehr als einer Sekunde einlegte. Hier ist ein Beispiel dafür, wie das aussah:

Dies führte natürlich zu einigen umständlichen Übersetzungen (dh „oder sind wir“ ist ein seltsames Fragment zum Übersetzen), aber ich fand, dass es gut genug funktionierte. Hier ist wo diese Logik im Code aussieht.

Seitenleiste: Ich habe auch festgestellt, dass die Genauigkeit der von der Speech-to-Text-API zurückgegebenen Zeitstempel für nicht-englische Sprachen erheblich geringer war, was die Qualität der nicht-englisch-englischen Synchronisation weiter verringerte.

Und noch eine letzte Sache. Wenn Sie bereits wissen, wie bestimmte Wörter übersetzt werden sollen (dh mein Name “Dale” sollte immer einfach in “Dale” übersetzt werden), können Sie die Übersetzungsqualität verbessern, indem Sie die Funktion “Glossar” der Übersetzungs-API nutzen Fortgeschrittene. Ich habe einen Blog-Beitrag darüber geschrieben Hier.

Die Medienübersetzungs-API

Google Cloud arbeitet derzeit an einer neuen API, um genau das Problem der Übersetzung gesprochener Wörter zu lösen. Es heißt das Media Translation API, und es führt die Übersetzung direkt auf Audio aus (dh kein transkribierter Textvermittler). Ich konnte diese API in diesem Projekt nicht verwenden, da sie noch keine Zeitstempel zurückgibt (das Tool befindet sich derzeit in der Beta-Phase), aber ich denke, es wäre großartig, sie in zukünftigen Iterationen zu verwenden!

Text zu Sprache

Nun zum lustigen Heraussuchen von Computerstimmen! Wenn du über meine liest PDF-zu-Hörbuch-Konverter, Sie wissen, dass ich mich für eine komisch klingende Computerstimme liebe. Um Audio zum Überspielen zu generieren, habe ich die Google Cloud Text-to-Speech-API verwendet. Die TTS-API kann viele verschiedene Stimmen in verschiedenen Sprachen mit unterschiedlichen Akzenten erzeugen, die Sie finden und damit spielen können Hier. Die “Standard” -Stimmen klingen vielleicht ein bisschen, ähm, blechern, wenn du weißt was ich meine, aber die WaveNet Stimmen, die von hochwertigen neuronalen Netzen erzeugt werden, klingen anständig menschlich.

Hier stieß ich auf ein anderes Problem, das ich nicht vorhergesehen hatte: Was ist, wenn eine Computerstimme viel langsamer spricht als der Originallautsprecher eines Videos, sodass die generierte Audiodatei zu lang ist? Dann wäre es unmöglich, die Dubs auf das Quellvideo auszurichten. Oder was ist, wenn eine Übersetzung ausführlicher ist als der ursprüngliche Wortlaut, was zu demselben Problem führt?

Um dieses Problem zu lösen, habe ich mit dem herumgespielt SpeakingRate Parameter in der Text-to-Speech-API verfügbar. Auf diese Weise können Sie eine Computerstimme beschleunigen oder verlangsamen:

Also, wenn es länger gedauert hat Um einen Satz zu sprechen, als dies für den ursprünglichen Sprecher des Videos der Fall war, erhöhte ich die Sprechgeschwindigkeit, bis der Computer und der Mensch ungefähr die gleiche Zeit in Anspruch nahmen.

Klingt etwas kompliziert? So sieht der Code aus:

Dies löste das Problem der Ausrichtung von Audio auf Video, bedeutete jedoch manchmal, dass die Computerlautsprecher in meinen Dubs etwas unangenehm schnell waren. Aber das ist ein Problem für V2.

War es das wert?

Sie kennen den Ausdruck “Dumme Spiele spielen, dumme Preise gewinnen?” Es fühlt sich so an, als wäre jedes ML-Projekt, das ich hier baue, eine Art Liebesarbeit, aber dieses Mal liebe ich meinen dummen Preis: die Fähigkeit, eine unbegrenzte Anzahl von seltsamen, roboterhaften, umständlichen Anime-Dubs zu generieren, die manchmal irgendwie anständig sind.

Schauen Sie sich meine Ergebnisse hier an:

Leave your vote

0 points
Upvote Downvote

Related Articles

Log In

Forgot password?

Forgot password?

Enter your account data and we will send you a link to reset your password.

Your password reset link appears to be invalid or expired.

Log in

Privacy Policy

Add to Collection

No Collections

Here you'll find all collections you've created before.