4
votes

Comment utiliser l'API Text-to-Speech de Google en Python

Ma clé est prête à être utilisée pour faire des demandes et recevoir un discours à partir d'un texte de Google.
J'ai essayé ces commandes et bien d'autres.
La documentation n'offre aucune solution simple pour démarrer avec Python que j'ai trouvée. Je ne sais pas où va ma clé API avec le JSON et l'URL

Une solution dans leur documentation ici concerne CURL. . Mais implique le téléchargement d'un txt après la demande qui doit leur être renvoyée afin d'obtenir le fichier. Existe-t-il un moyen de faire cela en Python qui n'implique pas le txt que je dois les retourner? Je veux juste que ma liste de chaînes soit renvoyée sous forme de fichiers audio.

 Mon code

(J'ai mis ma clé réelle dans le bloc ci-dessus. Je ne vais tout simplement pas la partager ici.)


6 commentaires

les documents n'offrent pas solutions pour Python ?


J'ai vu ça. Je voulais dire dans l'OP, il n'y a pas d'équivalent Python dans le lien que j'ai publié. Je ne comprends pas ce qu'est ce lien, (le code). Je ne comprends pas où va ma clé API. C'est peut-être tout ce dont j'ai besoin. Où ce code voit-il l'API? Je n'ai pas réussi à trouver un moyen d'utiliser ce genre de choses n'importe où après avoir cherché toute la journée.


Quand vous dites API Key, je suppose que vous voulez dire la clé API que vous avez configurée lors de la configuration de Google Cloud, n'est-ce pas? Cela vaut peut-être la peine de lire la configuration complète depuis le début . La clé API que vous avez téléchargée au format JSON est quelque chose que vous définissez dans votre environnement en tant que GOOGLE_APPLICATION_CREDENTIALS (voir étape 2). Ils ont ensuite des instructions supplémentaires sur la manière de configurer correctement votre environnement Python .


Comme l'a souligné aug, il existe un démarrage rapide Python sur le lien qu'ils ont fourni. Le démarrage rapide Python fournit des fonctionnalités équivalentes à l'exemple CURL auquel vous avez lié. De plus, comme le mentionne aug, vous devez utiliser un compte de service, pas une clé API.


Eric, vous écrivez ces documents? Respectueusement, ils sont très opaques et déroutants. Difficile à trouver. C'est comme s'il y avait 3 versions leurres de tout. Non lié à l'endroit où je me suis inscrit. Hier, il y avait 10 heures à essayer de faire en sorte que Python fasse ce que cette commande CURL a fait. Aujourd'hui, environ 8 heures ont été passées à essayer de savoir où saisir le nom de la voix et qu'il était différent de language_code. Vous avez voté contre ma question?


et j'ai entré ma clé API dans mon shell. Ça fonctionne maintenant.


3 Réponses :


0
votes

J'ai trouvé la réponse et j'ai perdu le lien parmi les 150 pages de documentation Google que j'avais ouvertes.

#(Since I'm using a Jupyter Notebook)
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="/Path/to/JSON/file/jsonfile.json"
from google.cloud import texttospeech

# Instantiates a client
client = texttospeech.TextToSpeechClient()

# Set the text input to be synthesized
synthesis_input = texttospeech.types.SynthesisInput(text="Hello, World!")

# Build the voice request, select the language code ("en-US") and the ssml
# voice gender ("neutral")
voice = texttospeech.types.VoiceSelectionParams(
    language_code='en-US',
    ssml_gender=texttospeech.enums.SsmlVoiceGender.NEUTRAL)

# Select the type of audio file you want returned
audio_config = texttospeech.types.AudioConfig(
    audio_encoding=texttospeech.enums.AudioEncoding.MP3)

# Perform the text-to-speech request on the text input with the selected
# voice parameters and audio file type
response = client.synthesize_speech(synthesis_input, voice, audio_config)

# The response's audio_content is binary.
with open('output.mp3', 'wb') as out:
    # Write the response to the output file.
    out.write(response.audio_content)
    print('Audio content written to file "output.mp3"')

Ma tâche fastidieuse était d'essayer d'envoyer la requête via un JSON avec Python, mais cela semble être via leurs propres modules, ce qui fonctionne bien. Notez que le genre de voix par défaut est "neutre".


0 commentaires

7
votes

Configurer l'application Python pour le fichier JSON et installer la bibliothèque cliente
  1. Créer un compte de service
  2. Créez une clé de compte de service à l'aide du compte de service ici a >
  3. Le fichier JSON est téléchargé et enregistré en toute sécurité
  4. Incluez les informations d'identification de l'application Google dans votre application Python
  5. Installez la bibliothèque: pip install --upgrade google-cloud-texttospeech

À l'aide d'exemples Python de Google trouvés: https://cloud.google.com/text-to-speech/ docs / références / bibliothèques Remarque: dans l'exemple de Google, il n'inclut pas correctement le paramètre de nom. et https://github.com/ GoogleCloudPlatform / python-docs-samples / blob / master / texttospeech / cloud-client / quickstart.py

Vous trouverez ci-dessous la modification de l'exemple en utilisant les informations d'identification de l'application Google et la voix de wavenet d'une femme.

voice = texttospeech.types.VoiceSelectionParams(
        language_code='en-US',
        name='en-US-Wavenet-C',
        ssml_gender=texttospeech.enums.SsmlVoiceGender.FEMALE)

Voix, nom, code de langue, sexe SSML, etc.

Liste des voix: https://cloud.google.com/text-to-speech/docs/voices

Dans l'exemple de code ci-dessus, j'ai changé la voix du code d'exemple de Google pour inclure le paramètre de nom et utiliser la voix Wavenet (bien améliorée mais plus chère à 16 $ / million de caractères) et le genre SSML en FEMALE.

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="/home/yourproject-12345.json"

from google.cloud import texttospeech

# Instantiates a client
client = texttospeech.TextToSpeechClient()

# Set the text input to be synthesized
synthesis_input = texttospeech.types.SynthesisInput(text="Do no evil!")

# Build the voice request, select the language code ("en-US") 
# ****** the NAME
# and the ssml voice gender ("neutral")
voice = texttospeech.types.VoiceSelectionParams(
    language_code='en-US',
    name='en-US-Wavenet-C',
    ssml_gender=texttospeech.enums.SsmlVoiceGender.FEMALE)

# Select the type of audio file you want returned
audio_config = texttospeech.types.AudioConfig(
    audio_encoding=texttospeech.enums.AudioEncoding.MP3)

# Perform the text-to-speech request on the text input with the selected
# voice parameters and audio file type
response = client.synthesize_speech(synthesis_input, voice, audio_config)

# The response's audio_content is binary.
with open('output.mp3', 'wb') as out:
    # Write the response to the output file.
    out.write(response.audio_content)
    print('Audio content written to file "output.mp3"')

5 commentaires

Dans la partie de sélection de voix, voici "language_code = 'en-US', ssml_gender = texttospeech.enums.SsmlVoiceGender.NEUTRAL)", savez-vous comment je peux obtenir la voix 'en-US-Wavenet-F' sur le TTS Google Page d'exemple?


J'ai trouvé leur liste. Cause étrange, quel que soit le nom de la voix, toutes les voix du même code de langue sonnent de la même manière cloud.google.com/text-to-speech/docs/voices . En d'autres termes, «en-US» renvoie toujours exactement la même voix. Aucun changement si je le change en «en-US-Wavenet-F» ou quoi que ce soit d'autre.


Je l'ai. Pour toute référence future possible, après language_code, vous ajoutez name = 'en-US-Wavenet-F', sous cette ligne pour obtenir ce que j'ai essayé d'obtenir.


Comment utiliser cet exemple pour appeler une représentation JSON externe comprenant à la fois des paramètres ssml et de sélection vocale comme celui-ci cloud.google.com/text-to-speech/docs/ssml#tips_for_using_ssm‌ l ?


Comment se fait-il que speech client.list voices () ne répertorie pas les voix avec Wavenet?



1
votes

Si vous souhaitez éviter d'utiliser l'API google Python, vous pouvez simplement le faire:

import requests 
import json

url = "https://texttospeech.googleapis.com/v1beta1/text:synthesize"

text = "This is a text"

data = {
        "input": {"text": text},
        "voice": {"name":  "fr-FR-Wavenet-A", "languageCode": "fr-FR"},
        "audioConfig": {"audioEncoding": "MP3"}
      };

headers = {"content-type": "application/json", "X-Goog-Api-Key": "YOUR_API_KEY" }

r = requests.post(url=url, json=data, headers=headers)
content = json.loads(r.content)

C'est similaire à ce que vous avez fait mais vous devez inclure votre clé API. p>


0 commentaires