1. Tổng quan
API Chuyển văn bản sang lời nói cho phép các nhà phát triển tạo ra lời nói giống như con người. API này chuyển đổi văn bản thành các định dạng âm thanh như WAV, MP3 hoặc Ogg Opus. Dịch vụ này cũng hỗ trợ dữ liệu đầu vào bằng Ngôn ngữ đánh dấu tổng hợp lời nói (SSML) để chỉ định các khoảng tạm dừng, số, định dạng ngày và giờ cũng như các hướng dẫn phát âm khác.
Trong hướng dẫn này, bạn sẽ tập trung vào việc sử dụng API Chuyển văn bản sang lời nói bằng Python.
Kiến thức bạn sẽ học được
- Cách thiết lập môi trường
- Cách liệt kê các ngôn ngữ được hỗ trợ
- Cách liệt kê những giọng nói có sẵn
- Cách tổng hợp âm thanh từ văn bản
Bạn cần có
- Một dự án trên Google Cloud
- Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
- Quen thuộc với Python
Khảo sát
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn đánh giá thế nào về trải nghiệm sử dụng Python?
Bạn đánh giá thế nào về trải nghiệm khi sử dụng các dịch vụ của Google Cloud?
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn luôn có thể cập nhật ứng dụng.
- Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham khảo Mã dự án của mình (thường được xác định là
PROJECT_ID
). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử cách riêng của mình để xem có thể sử dụng hay không. Bạn không thể thay đổi mã này sau bước này và mã vẫn giữ nguyên trong thời gian dự án. - Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án), mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
- Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh phát sinh việc thanh toán ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạn đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Mặc dù bạn có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell .
Nếu đây là lần đầu tiên khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian mô tả về Cloud Shell. Nếu bạn nhìn thấy màn hình trung gian, hãy nhấp vào Tiếp tục.
Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.
Máy ảo này được tải tất cả các công cụ phát triển cần thiết. Dịch vụ này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Nhiều (nếu không nói là) tất cả công việc của bạn trong lớp học lập trình này đều có thể thực hiện bằng trình duyệt.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án được đặt thành mã dự án.
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Kết quả lệnh
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn:
gcloud config list project
Kết quả lệnh
[core] project = <PROJECT_ID>
Nếu chưa, bạn có thể thiết lập chế độ này bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Kết quả lệnh
Updated property [core/project].
3. Thiết lập môi trường
Trước khi bạn có thể bắt đầu sử dụng API Chuyển văn bản sang lời nói, hãy chạy lệnh sau trong Cloud Shell để bật API này:
gcloud services enable texttospeech.googleapis.com
Bạn sẽ thấy như sau:
Operation "operations/..." finished successfully.
Giờ đây, bạn có thể sử dụng API Chuyển văn bản sang lời nói!
Chuyển đến thư mục gốc:
cd ~
Tạo một môi trường ảo Python để tách biệt các phần phụ thuộc:
virtualenv venv-texttospeech
Kích hoạt môi trường ảo:
source venv-texttospeech/bin/activate
Cài đặt IPython và thư viện ứng dụng API Văn bản sang lời nói:
pip install ipython google-cloud-texttospeech
Bạn sẽ thấy như sau:
... Installing collected packages: ..., ipython, google-cloud-texttospeech Successfully installed ... google-cloud-texttospeech-2.16.3 ...
Bây giờ, bạn đã sẵn sàng sử dụng thư viện ứng dụng API Chuyển văn bản sang lời nói!
Trong các bước tiếp theo, bạn sẽ sử dụng trình thông dịch Python tương tác có tên IPython mà bạn đã cài đặt trong bước trước. Bắt đầu một phiên bằng cách chạy ipython
trong Cloud Shell:
ipython
Bạn sẽ thấy như sau:
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]:
Bạn đã sẵn sàng đưa ra yêu cầu đầu tiên và liệt kê các ngôn ngữ được hỗ trợ...
4. Liệt kê các ngôn ngữ được hỗ trợ
Trong phần này, bạn sẽ nhận được danh sách tất cả ngôn ngữ được hỗ trợ.
Sao chép mã sau vào phiên IPython của bạn:
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 "")
Hãy dành chút thời gian nghiên cứu mã này và xem cách mã này sử dụng phương thức thư viện ứng dụng list_voices
để tạo danh sách các ngôn ngữ được hỗ trợ.
Gọi hàm:
list_languages()
Bạn sẽ nhận được danh sách sau (hoặc lớn hơn):
---------------------- 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
Danh sách này cho thấy 58 ngôn ngữ và biến thể, chẳng hạn như:
- Tiếng Quan thoại tiếng Trung và Đài Loan,
- Tiếng Anh Úc, tiếng Anh, tiếng Ấn Độ và tiếng Anh Mỹ,
- Tiếng Pháp tại Canada và Pháp,
- Tiếng Bồ Đào Nha (Brazil) và Bồ Đào Nha.
Danh sách này chưa sửa và sẽ mở rộng khi có các giọng nói mới.
Tóm tắt
Bước này cho phép bạn liệt kê các ngôn ngữ được hỗ trợ.
5. Liệt kê các giọng nói hiện có
Trong phần này, bạn sẽ thấy danh sách các giọng nói hỗ trợ nhiều ngôn ngữ.
Sao chép mã sau vào phiên IPython của bạn:
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")
Hãy dành chút thời gian tìm hiểu mã nguồn này và xem cách mã này sử dụng phương thức thư viện ứng dụng list_voices(language_code)
để liệt kê các giọng nói có sẵn cho một ngôn ngữ cụ thể.
Bây giờ, hãy xem danh sách những giọng nói tiếng Đức hiện có:
list_voices("de")
Bạn sẽ thấy như sau:
------------------------ 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 ...
Có nhiều giọng nói cho nam và nữ, cũng như các giọng nói tiêu chuẩn, WaveNet, Neural2 và Studio:
- Các giọng nói tiêu chuẩn do các thuật toán xử lý tín hiệu tạo ra.
- Các giọng nói WaveNet, Neural2 và Studio là những giọng nói có chất lượng cao hơn do các mô hình học máy tổng hợp và nghe tự nhiên hơn.
Bây giờ, hãy xem danh sách những giọng nói tiếng Anh hiện có:
list_voices("en")
Bạn sẽ thấy như sau:
------------------------ 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 ...
Ngoài việc có nhiều giọng nói thuộc nhiều giới tính và chất lượng, bạn có thể sử dụng nhiều giọng như tiếng Anh Úc, tiếng Anh, tiếng Ấn Độ và tiếng Anh Mỹ.
Hãy dành chút thời gian để liệt kê những giọng nói có sẵn cho các ngôn ngữ và biến thể mà bạn ưu tiên (hoặc thậm chí là tất cả các giọng nói đó):
list_voices("fr")
list_voices("pt")
list_voices()
Tóm tắt
Bước này giúp bạn liệt kê những giọng nói có sẵn. Bạn có thể đọc thêm về các giọng nói và ngôn ngữ được hỗ trợ.
6. Tổng hợp âm thanh từ văn bản
Bạn có thể sử dụng API Chuyển văn bản sang lời nói để chuyển đổi một chuỗi thành dữ liệu âm thanh. Bạn có thể định cấu hình đầu ra của tổng hợp giọng nói theo nhiều cách, bao gồm chọn một giọng nói duy nhất hoặc điều chỉnh đầu ra về cao độ, âm lượng, tốc độ nói và tốc độ lấy mẫu.
Sao chép mã sau vào phiên IPython của bạn:
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}"')
Hãy dành chút thời gian nghiên cứu mã này và xem cách mã này sử dụng phương thức thư viện ứng dụng synthesize_speech
để tạo dữ liệu âm thanh và lưu dữ liệu đó dưới dạng tệp wav
.
Bây giờ, hãy tạo các câu bằng một vài trọng âm khác nhau:
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 ?")
Bạn sẽ thấy như sau:
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"
Để tải xuống tất cả các tệp đã tạo cùng một lúc, bạn có thể sử dụng lệnh Cloud Shell sau trong môi trường Python:
!cloudshell download *.wav
Xác thực và trình duyệt của bạn sẽ tải các tệp xuống:
Mở từng tệp và nghe kết quả.
Tóm tắt
Ở bước này, bạn có thể sử dụng API Chuyển văn bản sang lời nói để chuyển đổi câu thành tệp wav
âm thanh. Đọc thêm về cách tạo tệp âm thanh giọng nói.
7. Xin chúc mừng!
Bạn đã tìm hiểu cách sử dụng API Chuyển văn bản sang lời nói bằng Python để tạo lời nói giống con người!
Dọn dẹp
Để dọn dẹp môi trường phát triển, từ Cloud Shell:
- Nếu bạn vẫn đang trong phiên IPython, hãy quay lại shell:
exit
- Ngừng sử dụng môi trường ảo Python:
deactivate
- Xoá thư mục môi trường ảo của bạn:
cd ~ ; rm -rf ./venv-texttospeech
Cách xoá dự án của bạn trên Google Cloud khỏi Cloud Shell:
- Truy xuất mã dự án hiện tại của bạn:
PROJECT_ID=$(gcloud config get-value core/project)
- Hãy đảm bảo đây là dự án mà bạn muốn xoá:
echo $PROJECT_ID
- Xoá dự án:
gcloud projects delete $PROJECT_ID
Tìm hiểu thêm
- Kiểm tra bản minh hoạ trong trình duyệt: https://cloud.google.com/text-to-speech
- Tài liệu chuyển văn bản sang lời nói: https://cloud.google.com/text-to-speech/docs
- Python trên Google Cloud: https://cloud.google.com/python
- Thư viện ứng dụng Cloud dành cho Python: https://github.com/googleapis/google-cloud-python
Giấy phép
Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả Creative Commons 2.0.