[PYTHON] [Introduction à AWS] Conversion de texte-voix et lecture ♪

Cette fois, c'est un record de faire ce que j'ai fait lors de mon propre hackathon AWS il y a six mois. La dernière fois, j'écoutais ce que je ne comprenais pas parce qu'il y avait un expert à proximité, mais cette fois je me suis souvenu de tout, de l'inscription aux créneaux horaires gratuits à la conversion de texte en voix avec Polly, donc cela s'est installé dans ma mémoire. Le Linux d'Ec2 fonctionne inutilement, mais bien sûr il est toujours dans le niveau gratuit. À propos, celui qui consomme le plus est 30 Go d'Amazon Elastic Block Storage, soit 12,5%.

Ce que j'ai fait

・ Établir un style de développement ・ Dernier code · Légère amélioration ・ Écoutez le son

・ Établir un style de développement

La plupart des enregistrements sont gentils, donc je pense que cela peut être créé en les imitant. 【référence】 Les débutants essaient AWS Résumé des paramètres initiaux à effectuer rapidement après l'acquisition d'un compte AWS Ainsi, j'ai pu installer un serveur EC2 dans l'Ohio en toute sécurité. En tant que style de développement, j'avais l'habitude de créer des programmes avec vi au début, mais comme je m'y suis habitué, j'ai créé un programme avec Jupyter Notebook sur mon PC et l'ai envoyé avec Teraterm. C'est certainement plus facile. De plus, la facturation et la sécurité sont au-dessus, mais les plus importants. Au départ, j'ai utilisé la commande suivante. Cependant, au fur et à mesure que je m'habitue un peu à chaque page et service d'AWS, je peux effectuer des opérations sur les fichiers S3 à partir de la CLI, mais j'en suis venu à penser qu'il est plus rapide de jouer avec des fichiers directement sur S3. Liste des commandes pour l'exploitation de S3 avec l'AWS CLI

・ Dernier code

J'ai fait référence à la référence car j'ai besoin d'une clé pour utiliser S3. L'écran est un peu différent, mais vous pouvez voir ce que vous faites. 【référence】 Obtenez la clé d'accès et la clé secrète pour faire fonctionner s3 de aws (IAM)

Après avoir installé diverses bibliothèques Python sur l'instance ubuntu d'EC2, lors du transfert du programme avec Teraterm, [nom d'utilisateur est ubuntu](https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2- C'était login-mot de passe /). De plus, l'hôte copiera et entrera l'adresse IP publique IPv4. À propos, Teraterm est connecté toute la journée sans déconnexion. Cependant, si l'emplacement de l'instance est Ohio mais qu'il est devenu Tokyo, l'instance est affichée comme 0 et je suis pressé au début. Lorsque vous transférez des choses de votre propre PC vers votre propre PC avec Teraterm, utilisez la commande SSHSCR. Ainsi, le code précédent suivant a fonctionné. Ce code utilise boto3 pour convertir le texte affiché dans Text dans la voix de Joanna et l'enregistrer dans speech.mp3.

import boto3
polly_client = boto3.Session(
                aws_access_key_id=,                     
    aws_secret_access_key=,
    region_name='us-west-2').client('polly')
response = polly_client.synthesize_speech(VoiceId='Joanna',
                OutputFormat='mp3', 
                Text = 'This is a sample text to be synthesized.')
file = open('speech.mp3', 'wb')
file.write(response['AudioStream'].read())
file.close()

Ensuite, le code pour transférer cela dans le compartiment créé à l'avance dans S3 est le suivant.

# -*- coding: utf-8 -*-
import boto3
s3 = boto3.resource('s3') #Obtenir l'objet S3
bucket = s3.Bucket('seau s3-name')
bucket.upload_file('Spécifiez le fichier mp3 ec2', 'spécification dir du compartiment de s3')

Mais

s3_client = boto3.client('s3')
# Upload the file to S3
s3_client.upload_file('Spécifiez le fichier mp3 ec2', 'seau s3-name', 'nom de fichier mp3 en s3')

Mais ça marche.

· Légère amélioration

Cependant, dans ce cas, les fichiers de S3 sont privés dans les deux cas (ces paramètres de sécurité sont la valeur par défaut). Dans ce cas, vous ne pouvez pas faire référence à (lire) de l'extérieur sauf si vous publiez chaque fichier sur le site S3. Si vous le faites comme référence, il semble que vous puissiez définir ACL = Public lors de son envoi. Cependant, cette fois je n'ai pas pu le faire avec cette méthode, mais à la suite de divers essais (** je croyais pouvoir le faire ), j'ai pu le réaliser avec le code suivant. 【référence】 [Comment télécharger et publier des fichiers sur S3 en utilisant boto3? ](Https://www.it-swarm.dev/ja/python/boto3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6% E3% 83% 95% E3% 82% A1% E3% 82% A4% E3% 83% AB% E3% 82% 92s3% E3% 81% AB% E3% 82% A2% E3% 83% 83% E3% 83% 97% E3% 83% AD% E3% 83% BC% E3% 83% 89% E3% 81% 97% E3% 81% A6% E5% 85% AC% E9% 96% 8B% E3% 81% 99% E3% 82% 8B% E6% 96% B9% E6% B3% 95% E3% 81% AF% EF% BC% 9F / 830216134 /) Il y a deux améliorations dans le code ci-dessous par rapport à ce qui précède. ① session = Session (profile_name = "***") élimine le besoin d'écrire la clé directement (2) Puisqu'il est publié (référencé) tel qu'il est transféré par bucket.upload_file ('nom de fichier ec2', 'nom de fichier s3', ExtraArgs = {'ACL': 'public-read'}), il est continu. L'audio peut être publié en continu

import boto3
from boto3 import Session

session = Session(profile_name="*****")
polly = session.client("polly")
response = polly.synthesize_speech(Text="Bonjour, Tokyo et Yokohama sont aussi un peu nuageux. La voix est Mizuki", OutputFormat="mp3",  VoiceId="Mizuki")

file = open('Nom de fichier enregistré dans ec2', 'wb')
file.write(response['AudioStream'].read())
file.close()

s3 = boto3.resource('s3') #Obtenir l'objet S3
bucket = s3.Bucket('Nom du répertoire de compartiment pour s3')
bucket.upload_file('nom de fichier ec2', 'Nom de fichier en s3',  ExtraArgs={'ACL':'public-read'})

Vous disposez désormais d'un mécanisme unilatéral pour les conversations et autres applications.

・ Écoutez le son

Vous pouvez l'écouter dans le html suivant.

https://Nom du godet.s3.amazonaws.com/index.html

$ aws s3 cp --acl public-read index.html s3://Nom du godet/index.html
<html>
<body>
<figure>
    <figcaption>Listen to the Answer:</figcaption>
    <audio
        autoplay
        controls
        src="speech0.mp3">
            Your browser does not support the
            <code>audio</code> element.
    </audio>
</figure>
</body>
</html>

Résumé

・ J'ai essayé d'exécuter l'application AWS Hackason en utilisant l'offre gratuite AWS. ・ Le texte japonais utilisant la conversion Polly-Voice était possible pour une publication continue

・ S3-Je souhaite télécharger ou effectuer un téléchargement avec Lambda (Amazon Transcribe, Amazon Translate)

Recommended Posts

[Introduction à AWS] Conversion de texte-voix et lecture ♪
[Introduction à AWS] J'ai essayé de jouer avec la conversion voix-texte ♪
[Introduction à AWS] J'ai essayé de porter une application de conversation et de jouer avec text2speech @ AWS ♪
[Introduction au modèle de maladie infectieuse] J'ai essayé de m'adapter et de jouer
[Introduction à Python3 Jour 1] Programmation et Python
[AWS SAM] Présentation de la version Python
[Introduction à AWS] J'ai joué avec des voix masculines et féminines avec Polly et Transcribe ♪
Introduction à Scrapy (1)
Introduction à Scrapy (3)
Introduction à la définition de la fonction Thano et à la différenciation automatique
Premiers pas avec Supervisor
Introduction à Tkinter 1: Introduction
[Introduction à Python3 Jour 12] Chapitre 6 Objets et classes (6.3-6.15)
[Introduction à AWS] Le premier Lambda est Transcribe ♪
Introduction à PyQt
Introduction à Scrapy (2)
[Introduction à Python3, jour 22] Chapitre 11 Traitement parallèle et mise en réseau (11.1 à 11.3)
[Introduction à l'application Udemy Python3 +] 64. Espace de noms et portée
[Introduction à Python3 Jour 11] Chapitre 6 Objets et classes (6.1-6.2)
[Linux] Introduction à Linux
[AWS; Introduction à Lambda] 2ème; Extraire des phrases du fichier json et enregistrer S3 ♬
Introduction à Scrapy (4)
Introduction à l'apprentissage profond ~ Fonction de localisation et de perte ~
Introduction à discord.py (2)
[Introduction au PID] J'ai essayé de contrôler et de jouer ♬
[Introduction à l'application Udemy Python3 +] 35. Opérateurs de comparaison et opérateurs logiques
[Introduction à StyleGAN] Mayuyu et l'anime ont souri ♬
[Introduction à Udemy Python3 + Application] 68. Instruction d'importation et AS
Introduction à Lightning Pytorch
Introduction aux baies non paramétriques
Introduction à EV3 / MicroPython
Conversion entre chaîne hexadécimale et chaîne
Introduction à la reconnaissance d'image TensorFlow
Introduction à OpenCV (python) - (2)
Introduction à PyQt4 Partie 1
Introduction à l'injection de dépendances
Introduction à Private Chainer
Introduction à l'apprentissage automatique
Introduction facile au piratage domestique avec Raspberry Pi et discord.py
[Introduction à cx_Oracle] (Partie 6) Mappage des types de données DB et Python
[Introduction aux Data Scientists] Statistiques descriptives et analyse de régression simple ♬
[Introduction à cx_Oracle] (Partie 4) Récupération et défilement du jeu de résultats
[Introduction à l'application Udemy Python3 +] 42. pour instruction, instruction break et instruction continue
[Introduction à l'application Udemy Python3 +] 39. instruction while, instruction continue et instruction break
[Introduction à cx_Oracle] (10e) Instruction Update DML et DDL / DCL
[Introduction à la simulation] J'ai essayé de jouer en simulant une infection corona ♬
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
[Introduction à AWS] Mémorandum de création d'un serveur Web sur AWS
[Introduction à Scipy] Calcul de la courbe de Lorenz et du coefficient de Gini ♬
[Introduction à Udemy Python3 + Application] 50. Arguments de position, arguments de mots-clés et arguments par défaut
Apprentissage automatique pour apprendre avec Nogisaka 46 et Keyakizaka 46 Partie 1 Introduction
Introduction à la vérification des effets Rédaction des chapitres 4 et 5 en Python
Introduction de DataLiner ver.1.3 et comment utiliser Union Append
[Introduction à Python] Combinaison des données Nikkei Average et NY Dow CSV
[Introduction à Tensorflow] Comprendre correctement Tensorflow et essayer de créer un modèle
[Introduction à Mac] Applications et paramètres Mac pratiques que j'utilise