How to use AI to transcribe, translate, and add subtitles to your videos

[ad_1]

En plus de cuisiner pour moi-même et de faire le tour de la maison, les dessins animés japonais (ou «anime» comme l’appellent les enfants) sont quelque chose que j’ai appris à aimer pendant la quarantaine.

Le problème avec le visionnage d’anime, cependant, est que, faute d’apprendre le japonais, vous devenez dépendant de traducteurs humains et d’acteurs vocaux pour porter le contenu dans votre langue. Parfois, vous obtenez les sous-titres («sous-titres») mais pas le voicing («dubs»). D’autres fois, des saisons entières d’émissions ne sont pas du tout traduites, et vous êtes laissé sur le bord de votre siège avec seulement des résumés de Wikipédia et des forums Web des années 90 pour vous transporter dans l’obscurité.

Alors qu’est-ce que tu es censé faire? La réponse n’est évidemment pas de demander à un ordinateur de transcrire, traduire et interpréter des épisodes entiers d’une émission de télévision du japonais vers l’anglais. La traduction est un art soigné qui ne peut pas être automatisé et qui nécessite le contact affectueux d’une main humaine. De plus, même si vous utilisiez l’apprentissage automatique pour traduire une vidéo, vous ne pouviez pas utiliser un ordinateur pour doubler… Je veux dire, qui voudrait écouter des voix de machine pendant une saison entière? Ce serait horrible. Seul un vrai malade voudrait cela.

Dans cet article, je vais donc vous montrer comment utiliser l’apprentissage automatique pour transcrire, traduire et interpréter des vidéos d’une langue à une autre, c’est-à-dire «Dubs vidéo alimentés par l’IA». Cela ne vous donnera peut-être pas des résultats de qualité Netflix, mais vous pouvez l’utiliser pour localiser des discussions en ligne et des vidéos YouTube en un clin d’œil. Nous commencerons par transcrire l’audio en texte à l’aide de Google Cloud API Speech-to-Text. Ensuite, nous traduirons ce texte avec le Traduire l’API. Enfin, nous «interpréterons» les traductions en utilisant le API Text-to-Speech, qui produit des voix qui, selon la documentation, sont «humaines».

(Au fait, avant que vous ne m’explosiez dans les commentaires, je devrais vous dire que YouTube automatiquement et gratuitement transcrivez et traduisez vos vidéos pour vous. Vous pouvez donc traiter ce projet comme votre nouveau passe-temps de la cuisson du levain à partir de zéro: une utilisation vraiment inefficace de 30 heures.)

Vidéos doublées par IA: ont-elles généralement un bon son?

Avant de vous lancer dans ce voyage, vous voulez probablement savoir à quoi vous attendre. Quelle qualité pouvons-nous raisonnablement espérer obtenir d’un pipeline de doublage vidéo ML?

Voici un exemple doublé automatiquement de l’anglais vers l’espagnol (les sous-titres sont également générés automatiquement en anglais). Je n’ai fait aucun réglage ou ajustement là-dessus:

Comme vous pouvez le voir, les transcriptions sont correctes mais pas parfaites, et il en va de même pour les traductions. (Ne tenez pas compte du fait que l’orateur parle parfois trop vite – nous en reparlerons plus tard.) Dans l’ensemble, vous pouvez facilement comprendre l’essentiel de ce qui se passe à partir de cette vidéo doublée, mais ce n’est pas tout à fait proche de la qualité humaine.

Ce qui rend ce projet plus délicat (lire: plus amusant) que la plupart, c’est qu’il y a au moins trois points d’échec possibles:

  1. La vidéo peut être incorrectement transcrite d’audio en texte par l’API Speech-to-Text
  2. Ce texte peut être traduit de manière incorrecte ou maladroite par l’API Translation
  3. Ces traductions peuvent être mal prononcées par l’API Text-to-Speech

D’après mon expérience, les vidéos doublées les plus réussies étaient celles qui mettaient en vedette un seul haut-parleur sur un flux audio clair et qui étaient doublées de l’anglais vers une autre langue. Cela tient en grande partie au fait que la qualité de la transcription (Speech-to-Text) était beaucoup plus élevée en anglais que dans les autres langues sources.

Le doublage à partir de langues autres que l’anglais s’est avéré beaucoup plus difficile. Voici un doublage particulièrement peu impressionnant du japonais vers l’anglais de l’une de mes émissions préférées, Death Note:

Si vous voulez laisser la traduction / doublage aux humains, eh bien, je ne peux pas vous en vouloir. Mais sinon, lisez la suite!

Construire un doubleur de traduction IA

Comme toujours, vous pouvez trouver tout le code de ce projet dans le Création avec le référentiel Github Machine Learning. Pour exécuter le code vous-même, suivez le README pour configurer vos informations d’identification et activer les API. Ici, dans cet article, je vais juste passer en revue mes conclusions à un niveau élevé.

Tout d’abord, voici les étapes que nous suivrons:

  1. Extraire l’audio des fichiers vidéo
  2. Convertir l’audio en texte à l’aide de l’API Speech-to-Text
  3. Diviser le texte transcrit en phrases / segments pour la traduction
  4. Traduire du texte
  5. Générer des versions audio parlées du texte traduit
  6. Accélérez l’audio généré pour l’aligner avec le haut-parleur d’origine dans la vidéo
  7. Assemblez le nouvel audio au-dessus du pli audio / vidéo

J’avoue que lorsque j’ai commencé à créer ce doubleur, j’étais plein d’orgueil – tout ce que j’avais à faire était de brancher quelques API ensemble, qu’est-ce qui pourrait être plus facile? Mais en tant que programmeur, tout orgueil doit être puni, et mon garçon, ai-je été puni.

Les éléments difficiles sont ceux que j’ai mis en gras ci-dessus, qui proviennent principalement de l’alignement des traductions avec la vidéo. Mais plus à ce sujet dans un instant.

Utilisation de l’API Google Cloud Speech-to-Text

La première étape de la traduction d’une vidéo consiste à transcrire son audio en mots. Pour ce faire, j’ai utilisé Google Cloud API Speech-to-Text. Cet outil peut reconnaître l’audio parlé dans 125 langues, mais comme je l’ai mentionné ci-dessus, la qualité est la plus élevée en anglais. Pour notre cas d’utilisation, nous souhaitons activer quelques fonctionnalités spéciales, telles que:

  • Modèles améliorés. Il s’agit de modèles Speech-to-Text qui ont été formés sur des types de données spécifiques («vidéo», «phone_call») et sont généralement de meilleure qualité. Nous utiliserons bien sûr le modèle «vidéo».

  • Filtres de blasphème. Cet indicateur empêche l’API de renvoyer des mots vilains.
  • Décalages de temps de mot. Ce drapeau indique à l’API que nous voulons que les mots transcrits soient renvoyés avec les heures auxquelles le locuteur les a prononcés. Nous utiliserons ces horodatages pour aider à aligner nos sous-titres et doublages avec la vidéo source.
  • Adaptation de la parole. En règle générale, Speech-to-Text a le plus de difficultés avec des mots ou des phrases inhabituels. Si vous savez que certains mots ou phrases sont susceptibles d’apparaître dans votre vidéo (par exemple, “descente de gradient”, “machine à vecteurs de support”), vous pouvez les transmettre à l’API dans un tableau qui augmentera les chances d’être transcrit:

L’API renvoie le texte transcrit avec les horodatages au niveau du mot au format JSON. A titre d’exemple, j’ai transcrit cette vidéo. Vous pouvez voir le JSON renvoyé par l’API dans cet essentiel. La sortie nous permet également de faire une vérification rapide de la qualité:

Ce que j’ai dit en fait:

«Développeurs de logiciels. Nous ne sommes pas connus pour notre style rock, n’est-ce pas? Ou sommes nous? Aujourd’hui, je vais vous montrer comment j’ai utilisé le ML pour me rendre plus tendance, en m’inspirant d’influenceurs. »

Ce que l’API pensait avoir dit:

«Les développeurs de logiciels. Nous ne sommes pas connus pour notre rock et notre style. Sommes-nous ou sommes-nous aujourd’hui? Je vais vous montrer comment j’utilise ml pour créer de nouvelles tendances en m’inspirant d’influenceurs. »

D’après mon expérience, il s’agit de la qualité à laquelle vous pouvez vous attendre lors de la transcription d’audio anglais de haute qualité. Notez que la ponctuation est un peu décalée. Si vous êtes satisfait que les téléspectateurs comprennent l’essentiel d’une vidéo, c’est probablement suffisant, bien qu’il soit facile de corriger manuellement les transcriptions vous-même si vous parlez la langue source.

À ce stade, nous pouvons utiliser la sortie de l’API pour générer des sous-titres (non traduits). En fait, si vous exécutez mon script avec l’indicateur `–srt`, il le fera exactement pour vous (srt est un type de fichier pour les sous-titres codés):

Traduction automatique

Maintenant que nous avons les transcriptions vidéo, nous pouvons utiliser le Traduire l’API en… euh… les traduire.

C’est là que les choses commencent à aller un peu 🤪.

Notre objectif est le suivant: nous voulons être capables de traduire des mots dans la vidéo originale, puis de les lire à peu près au même moment, de sorte que ma voix «doublée» parle en alignement avec ma voix réelle.

Le problème, cependant, est que les traductions ne sont pas mot pour mot. Une phrase traduite de l’anglais vers le japonais peut avoir un ordre des mots confus. Il peut contenir moins de mots, plus de mots, des mots différents ou (comme c’est le cas avec les idiomes) un libellé complètement différent.

Une façon de contourner ce problème est de traduire l’intégralité Phrases puis en essayant d’aligner les limites temporelles de ces phrases. Mais même cela devient compliqué, car comment désigner une seule phrase? En anglais, on peut séparer les mots par signe de ponctuation, c’est-à-dire:

Mais la ponctuation diffère selon la langue (il n’y a pas de ¿en anglais), et certaines langues ne séparent pas du tout les phrases par des signes de ponctuation.

De plus, dans vrai vie discours, nous ne parlons souvent pas en phrases complètes. Tu sais?

Une autre difficulté qui rend la traduction des transcriptions difficile est que, en général, le Suite contexte que vous insérez dans un modèle de traduction, la meilleure qualité de traduction à laquelle vous pouvez vous attendre. Donc par exemple, si je traduis la phrase suivante en français:

«Je me sens bleu, mais j’aime aussi le rose.»

Je vais chercher la traduction:

“Je me sens bleu, mais j’aime aussi le rose.”

C’est exact. Mais si je divise cette phrase en deux («Je me sens bleu» et «Mais j’aime aussi le rose») et traduis chaque partie séparément, j’obtiens:

“Je me sens triste, mais j’aime aussi le rose”, i.e. “I’m feeling sad, but I like pink too.”

Tout cela pour dire que plus nous découpons du texte avant de l’envoyer à l’API Translate, moins la qualité des traductions sera mauvaise (même s’il sera plus facile de les aligner temporairement sur la vidéo).

En fin de compte, la stratégie que j’ai choisie était de diviser les mots prononcés chaque fois que l’orateur prenait une pause de plus d’une seconde pour parler. Voici un exemple de ce à quoi cela ressemblait:

Cela a naturellement conduit à des traductions maladroites (c’est-à-dire «ou sommes-nous» est un fragment étrange à traduire), mais j’ai trouvé que cela fonctionnait assez bien. Voici où cette logique ressemble dans le code.

Barre latérale: j’ai également remarqué que la précision des horodatages renvoyés par l’API Speech-to-Text était nettement inférieure pour les langues non anglaises, ce qui diminuait encore la qualité du doublage non anglais vers anglais.

Et une dernière chose. Si vous savez déjà comment vous voulez que certains mots soient traduits (c’est-à-dire que mon nom, «Dale», doit toujours être traduit simplement par «Dale»), vous pouvez améliorer la qualité de la traduction en tirant parti de la fonction «glossaire» de l’API de traduction Avancée. J’ai écrit un article de blog à ce sujet ici.

L’API de traduction de médias

En l’occurrence, Google Cloud travaille sur une nouvelle API pour gérer exactement le problème de la traduction des mots prononcés. Ça s’appelle le Media Translation API, et il exécute la traduction sur l’audio directement (c’est-à-dire pas d’intermédiaire de texte transcrit). Je n’ai pas pu utiliser cette API dans ce projet car elle ne renvoie pas encore d’horodatages (l’outil est actuellement en version bêta), mais je pense que ce serait génial à utiliser dans les prochaines itérations!

Texte pour parler

Passons maintenant au plus amusant: choisir des voix d’ordinateur! Si vous lisez à propos de mon Convertisseur de PDF en livre audio, vous savez que je m’aime une voix d’ordinateur au son drôle. Pour générer de l’audio pour le doublage, j’ai utilisé l’API Google Cloud Text-to-Speech. L’API TTS peut générer de nombreuses voix différentes dans différentes langues avec différents accents, que vous pouvez trouver et jouer avec ici. Les voix «standard» peuvent sembler un peu, euh, métallique, si vous voyez ce que je veux dire, mais le WaveNet voix, qui sont générés par des réseaux de neurones de haute qualité, semblent décemment humains.

Ici, je suis tombé sur un autre problème que je n’avais pas prévu: que se passe-t-il si une voix d’ordinateur parle beaucoup plus lentement que le haut-parleur d’origine d’une vidéo, de sorte que le fichier audio généré est trop long? Ensuite, les doublages seraient impossibles à aligner sur la vidéo source. Ou, que se passe-t-il si une traduction est plus verbeuse que le libellé original, conduisant au même problème?

Pour résoudre ce problème, j’ai joué avec le speakingRate paramètre disponible dans l’API Text-to-Speech. Cela vous permet d’accélérer ou de ralentir une voix informatique:

Donc, s’il fallait l’ordinateur plus long pour prononcer une phrase que pour le haut-parleur original de la vidéo, j’ai augmenté le taux de parole jusqu’à ce que l’ordinateur et l’humain prennent à peu près le même temps.

Cela vous semble un peu compliqué? Voici à quoi ressemble le code:

Cela a résolu le problème de l’alignement de l’audio sur la vidéo, mais cela signifiait parfois que les haut-parleurs de mon ordinateur dans mes doublages étaient un peu maladroitement rapides. Mais c’est un problème pour V2.

Cela en valait-il la peine?

Vous connaissez l’expression “Jouez à des jeux stupides, gagnez des prix stupides?” J’ai l’impression que chaque projet ML que je construis ici est un travail d’amour, mais cette fois, j’aime mon prix stupide: la capacité à générer un nombre illimité de doublages d’anime étranges, robotiques et maladroits, qui sont parfois un peu décents.

Consultez mes résultats ici:


[ad_2]

Leave a Reply

Your email address will not be published. Required fields are marked *