1. Обзор
API преобразования текста в речь позволяет разработчикам генерировать речь, подобную человеческой. API преобразует текст в аудиоформаты, такие как WAV, MP3 или Ogg Opus. Он также поддерживает входные данные языка разметки синтеза речи (SSML) для указания пауз, чисел, форматирования даты и времени, а также других инструкций по произношению.
В этом руководстве вы сосредоточитесь на использовании API преобразования текста в речь с Python.
Что вы узнаете
- Как настроить свою среду
- Как составить список поддерживаемых языков
- Как вывести список доступных голосов
- Как синтезировать звук из текста
Что вам понадобится
Опрос
Как вы будете использовать этот урок?
Как бы вы оценили свой опыт работы с Python?
Как бы вы оценили свой опыт работы с сервисами Google Cloud?
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Далее вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Cloud Shell , среду командной строки, работающую в облаке.
Активировать Cloud Shell
- В Cloud Console нажмите «Активировать Cloud Shell». .
Если вы запускаете Cloud Shell впервые, вы увидите промежуточный экран с описанием того, что это такое. Если вам был представлен промежуточный экран, нажмите «Продолжить» .
Подготовка и подключение к Cloud Shell займет всего несколько минут.
Эта виртуальная машина загружена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью браузера.
После подключения к Cloud Shell вы увидите, что вы прошли аутентификацию и что для проекта установлен идентификатор вашего проекта.
- Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:
gcloud auth list
Вывод команды
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project
Вывод команды
[core] project = <PROJECT_ID>
Если это не так, вы можете установить это с помощью этой команды:
gcloud config set project <PROJECT_ID>
Вывод команды
Updated property [core/project].
3. Настройка среды
Прежде чем начать использовать API преобразования текста в речь, выполните следующую команду в Cloud Shell, чтобы включить API:
gcloud services enable texttospeech.googleapis.com
Вы должны увидеть что-то вроде этого:
Operation "operations/..." finished successfully.
Теперь вы можете использовать API преобразования текста в речь!
Перейдите в свой домашний каталог:
cd ~
Создайте виртуальную среду Python, чтобы изолировать зависимости:
virtualenv venv-texttospeech
Активируйте виртуальную среду:
source venv-texttospeech/bin/activate
Установите IPython и клиентскую библиотеку API преобразования текста в речь:
pip install ipython google-cloud-texttospeech
Вы должны увидеть что-то вроде этого:
... Installing collected packages: ..., ipython, google-cloud-texttospeech Successfully installed ... google-cloud-texttospeech-2.16.3 ...
Теперь вы готовы использовать клиентскую библиотеку API преобразования текста в речь!
На следующих шагах вы будете использовать интерактивный интерпретатор Python под названием IPython , который вы установили на предыдущем шаге. Запустите сеанс, запустив ipython
в Cloud Shell:
ipython
Вы должны увидеть что-то вроде этого:
Python 3.9.2 (default, Feb 28 2021, 17:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 8.18.1 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Вы готовы сделать свой первый запрос и перечислить поддерживаемые языки...
4. Список поддерживаемых языков
В этом разделе вы получите список всех поддерживаемых языков.
Скопируйте следующий код в свой сеанс IPython:
from typing import Sequence
import google.cloud.texttospeech as tts
def unique_languages_from_voices(voices: Sequence[tts.Voice]):
language_set = set()
for voice in voices:
for language_code in voice.language_codes:
language_set.add(language_code)
return language_set
def list_languages():
client = tts.TextToSpeechClient()
response = client.list_voices()
languages = unique_languages_from_voices(response.voices)
print(f" Languages: {len(languages)} ".center(60, "-"))
for i, language in enumerate(sorted(languages)):
print(f"{language:>10}", end="\n" if i % 5 == 4 else "")
Уделите минутку изучению кода и посмотрите, как он использует метод клиентской библиотеки list_voices
для создания списка поддерживаемых языков.
Вызовите функцию:
list_languages()
У вас должен получиться следующий (или больший) список:
---------------------- Languages: 58 ----------------------- af-ZA am-ET ar-XA bg-BG bn-IN ca-ES cmn-CN cmn-TW cs-CZ da-DK de-DE el-GR en-AU en-GB en-IN en-US es-ES es-US eu-ES fi-FI fil-PH fr-CA fr-FR gl-ES gu-IN he-IL hi-IN hu-HU id-ID is-IS it-IT ja-JP kn-IN ko-KR lt-LT lv-LV ml-IN mr-IN ms-MY nb-NO nl-BE nl-NL pa-IN pl-PL pt-BR pt-PT ro-RO ru-RU sk-SK sr-RS sv-SE ta-IN te-IN th-TH tr-TR uk-UA vi-VN yue-HK
В списке показаны 58 языков и их варианты, такие как:
- китайский и тайваньский мандарин,
- австралийский, британский, индийский и американский английский,
- французы из Канады и Франции,
- Португальцы из Бразилии и Португалии.
Этот список не фиксирован и расширяется по мере появления новых голосов.
Краткое содержание
Этот шаг позволил вам составить список поддерживаемых языков.
5. Список доступных голосов
В этом разделе вы получите список голосов, доступных на разных языках.
Скопируйте следующий код в свой сеанс IPython:
import google.cloud.texttospeech as tts
def list_voices(language_code=None):
client = tts.TextToSpeechClient()
response = client.list_voices(language_code=language_code)
voices = sorted(response.voices, key=lambda voice: voice.name)
print(f" Voices: {len(voices)} ".center(60, "-"))
for voice in voices:
languages = ", ".join(voice.language_codes)
name = voice.name
gender = tts.SsmlVoiceGender(voice.ssml_gender).name
rate = voice.natural_sample_rate_hertz
print(f"{languages:<8} | {name:<24} | {gender:<8} | {rate:,} Hz")
Уделите минутку изучению кода и посмотрите, как он использует метод клиентской библиотеки list_voices(language_code)
для получения списка голосов, доступных для данного языка.
Теперь получите список доступных немецких голосов:
list_voices("de")
Вы должны увидеть что-то вроде этого:
------------------------ Voices: 20 ------------------------ de-DE | de-DE-Neural2-A | FEMALE | 24,000 Hz de-DE | de-DE-Neural2-B | MALE | 24,000 Hz ... de-DE | de-DE-Standard-A | FEMALE | 24,000 Hz de-DE | de-DE-Standard-B | MALE | 24,000 Hz ... de-DE | de-DE-Studio-B | MALE | 24,000 Hz de-DE | de-DE-Studio-C | FEMALE | 24,000 Hz de-DE | de-DE-Wavenet-A | FEMALE | 24,000 Hz de-DE | de-DE-Wavenet-B | MALE | 24,000 Hz ...
Доступно несколько женских и мужских голосов, а также стандартные голоса WaveNet, Neural2 и Studio:
- Стандартные голоса генерируются алгоритмами обработки сигналов.
- Голоса WaveNet, Neural2 и Studio — это голоса более высокого качества, синтезированные с помощью моделей машинного обучения и звучащие более естественно.
Теперь получите список доступных английских голосов:
list_voices("en")
У вас должно получиться что-то вроде этого:
------------------------ Voices: 90 ------------------------ en-AU | en-AU-Neural2-A | FEMALE | 24,000 Hz ... en-AU | en-AU-Wavenet-A | FEMALE | 24,000 Hz ... en-GB | en-GB-Neural2-A | FEMALE | 24,000 Hz ... en-GB | en-GB-Wavenet-A | FEMALE | 24,000 Hz ... en-IN | en-IN-Standard-A | FEMALE | 24,000 Hz ... en-IN | en-IN-Wavenet-A | FEMALE | 24,000 Hz ... en-US | en-US-Neural2-A | MALE | 24,000 Hz ... en-US | en-US-News-K | FEMALE | 24,000 Hz ... en-US | en-US-Standard-A | MALE | 24,000 Hz ... en-US | en-US-Studio-M | MALE | 24,000 Hz ... en-US | en-US-Wavenet-A | MALE | 24,000 Hz ...
Помимо выбора нескольких голосов разного пола и качества, доступно несколько акцентов: австралийский, британский, индийский и американский английский.
Найдите минутку и перечислите голоса, доступные для предпочитаемых вами языков и вариантов (или даже для всех):
list_voices("fr")
list_voices("pt")
list_voices()
Краткое содержание
Этот шаг позволил вам составить список доступных голосов. Вы можете узнать больше о поддерживаемых голосах и языках .
6. Синтезируйте аудио из текста
Вы можете использовать API преобразования текста в речь для преобразования строки в аудиоданные. Вы можете настроить вывод синтеза речи различными способами, включая выбор уникального голоса или модуляцию вывода по высоте, громкости, скорости речи и частоте дискретизации .
Скопируйте следующий код в свой сеанс IPython:
import google.cloud.texttospeech as tts
def text_to_wav(voice_name: str, text: str):
language_code = "-".join(voice_name.split("-")[:2])
text_input = tts.SynthesisInput(text=text)
voice_params = tts.VoiceSelectionParams(
language_code=language_code, name=voice_name
)
audio_config = tts.AudioConfig(audio_encoding=tts.AudioEncoding.LINEAR16)
client = tts.TextToSpeechClient()
response = client.synthesize_speech(
input=text_input,
voice=voice_params,
audio_config=audio_config,
)
filename = f"{voice_name}.wav"
with open(filename, "wb") as out:
out.write(response.audio_content)
print(f'Generated speech saved to "{filename}"')
Уделите немного времени изучению кода и посмотрите, как он использует метод клиентской библиотеки synthesize_speech
для генерации аудиоданных и сохранения их в виде wav
-файла.
Теперь сгенерируйте предложения с несколькими разными акцентами:
text_to_wav("en-AU-Neural2-A", "What is the temperature in Sydney?")
text_to_wav("en-GB-Neural2-B", "What is the temperature in London?")
text_to_wav("en-IN-Wavenet-C", "What is the temperature in Delhi?")
text_to_wav("en-US-Studio-O", "What is the temperature in New York?")
text_to_wav("fr-FR-Neural2-A", "Quelle est la température à Paris ?")
text_to_wav("fr-CA-Neural2-B", "Quelle est la température à Montréal ?")
Вы должны увидеть что-то вроде этого:
Generated speech saved to "en-AU-Neural2-A.wav" Generated speech saved to "en-GB-Neural2-B.wav" Generated speech saved to "en-IN-Wavenet-C.wav" Generated speech saved to "en-US-Studio-O.wav" Generated speech saved to "fr-FR-Neural2-A.wav" Generated speech saved to "fr-CA-Neural2-B.wav"
Чтобы загрузить все сгенерированные файлы одновременно, вы можете использовать эту команду Cloud Shell из своей среды Python:
!cloudshell download *.wav
Подтвердите, и ваш браузер загрузит файлы:
Откройте каждый файл и услышите результат.
Краткое содержание
На этом этапе вы смогли использовать API преобразования текста в речь для преобразования предложений в аудиофайлы wav
. Узнайте больше о создании голосовых аудиофайлов .
7. Поздравляем!
Вы узнали, как использовать API преобразования текста в речь с помощью Python для генерации человеческой речи!
Очистить
Чтобы очистить среду разработки из Cloud Shell:
- Если вы все еще находитесь в сеансе IPython, вернитесь в оболочку:
exit
- Прекратите использовать виртуальную среду Python:
deactivate
- Удалите папку виртуальной среды:
cd ~ ; rm -rf ./venv-texttospeech
Чтобы удалить проект Google Cloud из Cloud Shell:
- Получите текущий идентификатор проекта:
PROJECT_ID=$(gcloud config get-value core/project)
- Убедитесь, что это именно тот проект, который вы хотите удалить:
echo $PROJECT_ID
- Удалить проект:
gcloud projects delete $PROJECT_ID
Узнать больше
- Проверьте демо-версию в своем браузере: https://cloud.google.com/text-to-speech.
- Документация по преобразованию текста в речь: https://cloud.google.com/text-to-speech/docs .
- Python в Google Cloud: https://cloud.google.com/python
- Облачные клиентские библиотеки для Python: https://github.com/googleapis/google-cloud-python.
Лицензия
Эта работа распространяется под лицензией Creative Commons Attribution 2.0 Generic License.