[PYTHON] [Introduction à AWS] J'ai joué avec des voix masculines et féminines avec Polly et Transcribe ♪

Dernière transcription Polly, j'ai joué un peu avec chacun d'eux, mais cette fois A été modifié pour pouvoir être facilement utilisé dans le but de l'utiliser librement.

Ce que j'ai fait

・ Séquence prenant en charge l'application de conversation ・ Code à réaliser · Résultat actuel

・ Séquence prenant en charge l'application de conversation

L'hypothèse est de convertir le texte avec une application de conversation pour créer une situation comme si un homme et une femme parlaient. Ici, l'application de conversation est un traitement du langage naturel et l'entrée est une application de conversation avec du texte.

Par conséquent, la séquence suivante a été effectuée. ① Entrez une phrase appropriée ② Convertissez la phrase de ① en voix féminine avec polly ③ Acquérir un fichier vocal féminin mp3; ④ Transscrivez le fichier vocal féminin et convertissez-le en texte; entrée d'application de conversation; texte de réponse ⑤ Polly la phrase de réponse (maintenant la phrase de caractère convertie de ④) et la convertir en voix masculine; ⑥ Obtenez un fichier vocal masculin mp3; Occurrence ⑦ Enfin, transcrivez le fichier vocal masculin et convertissez-le en une phrase de caractères; entrez l'application de conversation; phrase de réponse. .. ..

text0="Bonjour, il fait nuageux à Tokyo et à Yokohama aujourd'hui. Mizuki,J'ai annoncé" #①
vfile = function_polly(text0,'Mizuki') #②
file0= vfile #'Mizuki.mp3' #③
text0 = fun_tran(file0) #④
vfile = function_polly(text0,'Takumi') #⑤
file0= vfile #'Takumi.mp3' #⑥
text0 = fun_tran(file0) #⑦

・ Code à réaliser

En termes de code, je viens de créer une fonction pour faciliter l'utilisation de ceux de la dernière et de la dernière fois. La Lib à utiliser est la suivante.

from __future__ import print_function
import time
import boto3
import pandas as pd
from boto3 import Session

Définit les compartiments de stockage pour session, polly, transicribe et s3 utilisés par les deux fonctions.

session = Session(profile_name="default")
polly = session.client("polly")
transcribe = boto3.client('transcribe')
s3 = boto3.resource('s3') #Obtenir l'objet S3
bucket = s3.Bucket('muauanpub') #définition du bucket

Voici la fonction function_polly qui convertit le texte en voix. L'entrée est le texte et la voix0 de la voix féminine ou masculine. Le traitement dans la fonction est ① Conversion ② Enregistrez le fichier mp3 sur l'ec2 local ③ Télécharger dans le seau s3 ⇒ Publié au format HTML, etc. ④ Renvoie le nom du fichier audio vfile dans s3

def function_polly(text0,voice0):
    response = polly.synthesize_speech(Text=text0, OutputFormat="mp3",  VoiceId=voice0) #"Mizuki"
    file = open('speech.mp3', 'wb')
    file.write(response['AudioStream'].read())
    file.close()
    vfile = '{}.mp3'.format(voice0)
    bucket.upload_file('speech.mp3', vfile,  ExtraArgs={'ACL':'public-read'})
    return vfile

Vient ensuite la fonction fun_tran qui convertit un fichier audio en fichier texte. Ce qui est important ici, c'est que pour que nom_travail effectue une conversion unique et continue, il est nécessaire de générer ou de supprimer le nom du travail l'un après l'autre en insérant des éléments tels que l'heure. Cette fois, la fonction à supprimer a été réalisée par transcript.delete_transcription_job (TranscriptionJobName = 'test_tran'), j'ai donc utilisé cette méthode. De plus, comme je l'ai écrit la dernière fois, il est important de définir le nom du compartiment s3 de la destination de sortie. Récupère l'objet s3; s3 = boto3.resource ('s3'). .. .. Etc. sont dupliqués.

def fun_tran(file0):
    job_name = "test_tran"
    job_uri = "https://muauanpub.s3.amazonaws.com/{}".format(file0)
    transcribe.start_transcription_job(
        TranscriptionJobName=job_name,
        Media={'MediaFileUri': job_uri},
        MediaFormat='mp3',
        LanguageCode='ja-JP',
        OutputBucketName='muauanpub'
    )
    while True:
        status = transcribe.get_transcription_job(TranscriptionJobName=job_name)
        if status['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED', 'FAILED']:
            break
        print("Not ready yet...")
        time.sleep(5)
    print(status)

    bucket.download_file('test_tran.json', 'test_tran.json') #Télécharger sur ec2; télécharger le fichier, le fichier après le téléchargement
    df = pd.read_json('test_tran.json') #Lire le fichier json avec les pandas
    text1=df['results'][1][0]['transcript']
    print(text1) #Extraire la chaîne de conversion du fichier json
    transcribe.delete_transcription_job(TranscriptionJobName='test_tran')
    return text1

· Résultat actuel

C'est environ 12 heures publiques, mais cela s'est arrêté car il y a beaucoup de demandes et les frais de demande s3 semblent dépasser la trame libre m (_ _) m Lecture vocale pour les femmes et les hommes

Résumé

・ J'ai créé une fonction Polly and Transcribe et essayé de l'exécuter. ・ Les deux fonctions peuvent être utilisées facilement et j'ai essayé de générer des voix masculines et féminines en continu. ・ J'ai essayé de faire pivoter la même phrase, mais l'occurrence ne s'est pas réduite et la phrase de sortie était la même, on peut donc dire que la précision de conversion est élevée.

・ Créons une pseudo application de conversation vocale ・ Essayons de le faire bouger lorsqu'il est placé sur S3 avec Lambda

Recommended Posts

[Introduction à AWS] J'ai joué avec des voix masculines et féminines avec Polly et Transcribe ♪
[Introduction à Pytorch] J'ai joué avec sinGAN ♬
[Introduction à AWS] J'ai essayé de porter une application de conversation et de jouer avec text2speech @ AWS ♪
[Introduction à AWS] J'ai essayé de jouer avec la conversion voix-texte ♪
[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
J'ai joué avec PyQt5 et Python3
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
[Introduction à sinGAN-Tensorflow] J'ai joué avec la super-résolution "Challenge Big Imayuyu" ♬
[Introduction à Matplotlib] Axes Animation 3D: J'ai joué avec des figurines 3D Lisaju ♬
[Introduction à RasPi4] J'ai joué avec "la conversation de langue empoisonnée d'Hiroko / Hiromi" ♪
[Introduction à StyleGAN] J'ai joué avec "Une femme se transforme en Mayuyu" ♬
Je veux jouer avec aws avec python
[Introduction à AWS] Conversion de texte-voix et lecture ♪
[Introduction à StyleGAN] J'ai joué avec style_mixing "Femme qui enlève ses lunettes" ♬
[Introduction à AWS] Le premier Lambda est Transcribe ♪
[Introduction au PID] J'ai essayé de contrôler et de jouer ♬
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
Je veux gérer l'optimisation avec python et cplex
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
[Introduction à Pytorch] J'ai essayé de catégoriser Cifar10 avec VGG16 ♬
Je veux AWS Lambda avec Python sur Mac!
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
J'ai joué avec wordcloud!
J'ai essayé de prédire et de soumettre les survivants du Titanic avec Kaggle
[Introduction au modèle de maladie infectieuse] J'ai essayé de m'adapter et de jouer
Apprentissage automatique pour apprendre avec Nogisaka 46 et Keyakizaka 46 Partie 1 Introduction
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
[Introduction à Mac] Applications et paramètres Mac pratiques que j'utilise
Introduction à RDB avec sqlalchemy Ⅰ
Introduction à l'optimisation non linéaire (I)
J'ai essayé de visualiser les signets volant vers Slack avec Doc2Vec et PCA
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 1
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
J'ai essayé de créer des taureaux et des vaches avec un programme shell
Préparer un environnement pour utiliser OpenCV et Pillow avec AWS Lambda
J'ai essayé de détecter facilement les points de repère du visage avec python et dlib
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 2