[PYTHON] [Introduction à AWS] J'ai essayé de porter une application de conversation et de jouer avec text2speech @ AWS ♪

Récemment, je jouais avec Shogi AI, donc l'article a été négligé, mais du vendredi au samedi, j'ai participé à "Own AWS Hackason (provisoire)" et j'ai fait le titre et j'ai fait mes débuts sur AWS, alors je l'ai laissé Je vais le garder. Pour tous les participants, j'étais un débutant en ferroutage, mais ce fut une période de 24 heures très enrichissante.

Ce que j'ai fait en 24 heures

** Voici une histoire chronologique. ** ** ・ Connectez-vous à aws ・ Vérifiez le type de solution IA ・ Confirmation de speech2text ** ・ Apprentissage Shogi AI ** ・ Confirmation Pykakasi ** ・ Installation Mecab @ AWS ** ** ・ QA_conversation modifiée pour prendre en charge AWS ** ** ・ Enregistrez en fichier mp3 avec text2speech @ AWS ** ・ Téléchargement en masse de fichiers mp3 @TeraTerm ** - La publication de fichiers mp3 dans un fichier S3 #confidential était un obstacle ** ** ・ Génération automatique de fichier audio public S3 **

** Les opérations suivantes n'ont pas pu être effectuées en raison du délai d'attente ** 。。。 ・ Transfert et renvoi MP3 au fur et à mesure que la conversation progresse 。。。 ・ Conversion de texte vocal par speech2text ・ Parlez sur votre smartphone ·Achevée

Faire un article

・ Apprenez l'IA Shogi dans l'environnement [email protected] ・ Portage des applications de conversation -Jouer de l'audio converti sur le Web avec text2speech de polly

・ Apprenez l'IA Shogi dans l'environnement [email protected]

L'environnement était principalement fourni par l'organisateur, et le style était d'écrire la progression sur le Wiki créé sur ec2. En d'autres termes, créez une instance en fonction de votre propre application. J'ai donc choisi l'environnement GPU p2.xlarge pour l'apprentissage automatique. Vous pouvez désormais utiliser tous les frameworks pour l'apprentissage automatique. Presque comme indiqué ci-dessous, mais la demande d'assouplissement des restrictions n'était pas nécessaire car l'organisateur l'avait fixée à l'avance. 【référence】 Si vous souhaitez exécuter Chainer sur GPU, il est facile d'utiliser l'AMI Deep Learning Base (Ubuntu).

Si vous créez également une paire de clés, l'instance sera lancée en toute sécurité

Le déroulement est comme dans l'article ci-dessus, mais j'ajouterai une petite description supplémentaire. Cette paire de clés est importante et vous en aurez besoin lors de la connexion à SSH, vous devez donc la stocker dans un endroit sûr. De plus, lors de la création d'une instance, les informations suivantes sont définies et le fichier peut être téléchargé. Ces informations sont essentielles lors de la création d'applications à l'aide de solutions AWS et doivent être conservées en lieu sûr.

aws_access_key_id                     
aws_secret_access_key

Connectez-vous avec Teraterm

-Installez TeraTerm. -Entrez un nom d'hôte tel que [ec2- \ * \ * - \ * \ * - \ * \ * \ * - \ * \ *. Us-west-2.compute.amazonaws.com] dans l'hôte et OK. Lorsque vous vous connectez, il vous sera demandé plus loin, alors entrez le nom d'utilisateur: ubuntu et la paire de clés privées et connectez-vous avec OK. ・ Une fois connecté, copiez et collez [source activate chainer_p36] depuis le site suivant et collez-le à nouveau pour activer l'environnement chainer_p36. 【référence】 Chainer@aws -Faites un ensemble de fichiers Zip et transférez-le avec la fonction de transfert de TeraTerm, et développez-le dans un Dir approprié d'ec2.

Cette fois, j'ai essayé d'exécuter train_policy_value_resnet.py de Shogi AI, mais cela a pris beaucoup de temps par rapport à le faire dans l'environnement local. Pour le moment, j'utilisais GPU, mais comme le CPU était à 100%, j'utilise CuDNN localement, mais j'ai été déçu de ne pas avoir vérifié s'il était installé.

Portage des applications de conversation

Le fichier est Utiliser la version nano @ ubuntu de l'application de conversation l'autre jour. J'enverrai ce matériel. Surtout, même s'il s'agit d'apprentissage automatique, DL n'est pas utilisé, alors créez une nouvelle instance t2.large d'ubuntu18.04 et exécutez-la. Par rapport au prix, c'est un ordre de grandeur moins cher comme indiqué ci-dessous.

p2.xlarge 4 12 61 Gio EBS uniquement 0.9USD/temps
t2.grand 2 variable 8 Gio EBS uniquement 0.0928USD/temps

【référence】 Liste de prix Amazon EC2

・ Installation Mecab @AWS

Le plus grand défi du portage est l'installation de Mecab. J'ai des problèmes avec n'importe quel environnement, mais j'ai des problèmes avec t2.large ubuntu 18.04 sur AWS. Les bases sont présentées ci-dessous comme pour nano. 【référence】 Installer mecab sur ubuntu 18.10 Cependant, j'ai également reçu une erreur de module No nommé "Mecab". La cause est inconnue, mais je l'ai réinstallée ci-dessous et cela a fonctionné.

sudo pip3 install --no-cache-dir mecab-python3

En outre, le dictionnaire est entré sans aucun problème par la méthode ci-dessus. Je n'installe pas pyaudio car je ne corrige pas la génération de sons, mais j'ai installé pykakasi et je l'ai confirmé. Maintenant, cela fonctionne lorsque je supprime l'appel de fonction text2speak () dans qa_conversation_nano.py.

-Jouez l'audio converti sur le Web avec text2speech d'Amazon Polly

Cette application veut finalement avoir une conversation vocale. Donc, je voulais utiliser speech2text et text2speech s'ils existaient, mais j'ai décidé de l'utiliser car AWS ne prend en charge que text2speech en japonais.

Conversion de voix avec text2speech de Polly

AWS a beaucoup d'explications, mais il semble que vous deviez vous habituer à aller droit au but. J'ai donc trouvé le code suivant. Si vous l'utilisez, le texte saisi dans Texte sera converti en fichier audio et le fichier mp3 sera placé dans le Dir spécifié du serveur ec2. Ici, entrez la clé générée lors de la création de l'instance ci-dessus sur le côté droit de chacun des aws_access_key_id = et aws_secret_access_key =,.

SynthesizeSpeech@AWS

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()

Pour le japonais, définissez VoiceId = 'Mizuki' et mettez le japonais dans Text. Il semble que vous puissiez faire divers ajustements, mais cette fois, c'est la valeur par défaut en raison de contraintes de temps. Amazon Polly Voice

Transférer de ec2 à s3

J'ai pu le faire avec le code suivant. En fait, il y avait un problème ici. En d'autres termes, j'ai eu une erreur indiquant que les clés sont différentes. Cela était dû au fait que l'authentification se produisait lors de ce transfert et qu'il allait automatiquement examiner le fichier confidentiel et lire l'ancienne clé. Donc, cette fois, j'ai supprimé ce fichier et l'ai téléchargé normalement.

# -*- 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')
s3_client = boto3.client('s3')

# Upload the file to S3
s3_client.upload_file('test.txt', 'bucket-name', 'test-remote.txt')

s3 Sortie de l'audio du serveur public

À ce stade, vous pouvez générer du son avec du html normal.

【référence】

<html>
<body>
<figure>
    <figcaption>Listen to the Answer:</figcaption>
    <audio
        autoplay
        controls
        src="https://******.s3-****.amazonaws.com/mp3/speech0.mp3">
            Your browser does not support the
            <code>audio</code> element.
    </audio>
</figure>
</body>
</html>

Résumé

・ J'ai pu faire mes débuts sur AWS en participant au "Own AWS Hackason (provisoire)" ・ J'ai essayé de jouer à l'application de conversation sur AWS ・ Text2speech n'était pas clair

・ Speech2text ne prend pas en charge le japonais dans AWS, il est donc nécessaire d'envisager des contre-mesures. ・ Parlez sur votre smartphone

Recommended Posts

[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 ♪
J'ai essayé de jouer avec l'image avec Pillow
[Introduction à AWS] Conversion de texte-voix et lecture ♪
[Introduction à AWS] J'ai joué avec des voix masculines et féminines avec Polly et Transcribe ♪
J'ai essayé d'exprimer de la tristesse et de la joie face au problème du mariage stable.
J'ai essayé d'apprendre l'angle du péché et du cos avec le chainer
J'ai essayé de contrôler la bande passante et le délai du réseau avec la commande tc
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de jouer avec la calculatrice avec tkinter
[Introduction au PID] J'ai essayé de contrôler et de jouer ♬
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
[Introduction à Pytorch] J'ai essayé de catégoriser Cifar10 avec VGG16 ♬
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
J'ai essayé de prédire et de soumettre les survivants du Titanic avec Kaggle
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé d'analyser les émotions de tout le roman "Weather Child" ☔️
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de notifier les informations de retard de train avec LINE Notify
J'ai essayé d'illustrer le temps et le temps du langage C
J'ai essayé d'énumérer les différences entre java et python
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
J'ai essayé de lancer le cluster ipython au minimum sur AWS
J'ai affiché le chat de YouTube Live et essayé de jouer
J'ai essayé de publier automatiquement sur ChatWork au moment du déploiement avec Fabric et ChatWork Api
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
Introduction à la création d'IA avec Python! Partie 1 J'ai essayé de classer et de prédire le nombre à partir de l'image du numéro manuscrit
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part2
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de visualiser les signets volant vers Slack avec Doc2Vec et PCA
[Introduction à la simulation] J'ai essayé de jouer en simulant une infection corona ♬ Partie 2
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
[Introduction à sinGAN-Tensorflow] J'ai joué avec la super-résolution "Challenge Big Imayuyu" ♬
J'ai essayé de démarrer avec Bitcoin Systre le week-end
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part1
J'ai essayé de créer des taureaux et des vaches avec un programme shell
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé de détecter facilement les points de repère du visage avec python et dlib
[Introduction à RasPi4] J'ai joué avec "la conversation de langue empoisonnée d'Hiroko / Hiromi" ♪
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de déverrouiller l'entrée 2 lock sésame d'une simple pression sur le bouton AWS IoT
J'ai essayé de créer un traitement par lots sans serveur pour la première fois avec DynamoDB et Step Functions
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!
J'ai essayé de supprimer régulièrement les mauvais tweets avec l'API AWS Lambda + Twitter
J'ai essayé de résumer jusqu'à ce que je quitte la banque et devienne ingénieur
J'ai essayé de déplacer l'image vers le dossier spécifié en faisant un clic droit et un clic gauche
J'ai essayé d'implémenter Autoencoder avec TensorFlow