1. Tổng quan
API Chuyển lời nói thành văn bản của Google Cloud cho phép nhà phát triển chuyển đổi âm thanh thành văn bản bằng 120 ngôn ngữ và biến thể, bằng cách áp dụng các mô hình mạng nơ-ron mạnh mẽ trong một API dễ sử dụng.
Trong lớp học lập trình này, bạn sẽ tập trung vào việc sử dụng Speech-to-Text API với Node.js. Bạn sẽ tìm hiểu cách gửi một tệp âm thanh bằng tiếng Anh và các ngôn ngữ khác đến Cloud Speech-to-Text API để chép lời.
Kiến thức bạn sẽ học được
- Cách bật Speech-to-Text API
- Cách xác thực các yêu cầu API
- Cách cài đặt thư viện ứng dụng Google Cloud cho Node.js
- Cách chép lời tệp âm thanh bằng tiếng Anh
- Cách chép lời tệp âm thanh có dấu thời gian của từng từ
- Cách chép lời tệp âm thanh bằng nhiều ngôn ngữ
Bạn cần có
- Một dự án trên Google Cloud Platform
- Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
- Làm quen với cách sử dụng Javascript/Node.js
Bản 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 của mình với Node.js?
Bạn đánh giá thế nào về trải nghiệm sử dụng các dịch vụ của Google Cloud Platform?
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tốc độ của riêng bạn
- Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. (Nếu chưa có tài khoản Gmail hoặc G Suite, bạn phải tạo một tài khoản.)
Hãy nhớ mã dự án, một tên duy nhất trên tất cả các dự án trên Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động đối với bạn, xin lỗi!). Sau này trong lớp học lập trình này, chúng ta sẽ gọi nó là PROJECT_ID.
- Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.
Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" để biết cách tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này. 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í trị giá 300 USD.
Khởi động Cloud Shell
Mặc dù 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 Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell
.
Nếu chưa từng khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian (bên dưới phần hiển thị đầu tiên) mô tả về Cloud Shell. Nếu vậy, hãy nhấp vào Tiếp tục (và bạn sẽ không bao giờ thấy màn hình này nữa). Sau đây là giao diện của màn hình xuất hiện một lần:
Quá trình cung cấp và kết nối với Cloud Shell chỉ mất vài giây.
Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trong Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện hầu hết, nếu không muốn nói là tất cả, công việc trong lớp học lập trình này chỉ bằng một trình duyệt hoặc Chromebook.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng mình đã được xác thực và dự án đã được đặt thành mã dự án của bạ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
Đầu ra của lệnh
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
Đầu ra của lệnh
[core] project = <PROJECT_ID>
Nếu không, bạn có thể đặt nó bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra của lệnh
Updated property [core/project].
3. Bật Speech-to-Text API
Bạn phải bật Speech-to-Text API trước khi có thể bắt đầu sử dụng API này. Bạn có thể bật API bằng cách sử dụng lệnh sau trong Cloud Shell:
gcloud services enable speech.googleapis.com
4. Xác thực các yêu cầu API
Để gửi yêu cầu đến Speech-to-Text API, bạn cần sử dụng Tài khoản dịch vụ. Tài khoản dịch vụ thuộc về dự án của bạn và được thư viện Google Client Node.js dùng để thực hiện các yêu cầu Speech-to-Text API. Giống như mọi tài khoản người dùng khác, tài khoản dịch vụ được biểu thị bằng một địa chỉ email. Trong phần này, bạn sẽ sử dụng Cloud SDK để tạo một tài khoản dịch vụ, sau đó tạo thông tin đăng nhập mà bạn cần để xác thực dưới dạng tài khoản dịch vụ.
Trước tiên, hãy đặt một biến môi trường bằng PROJECT_ID mà bạn sẽ sử dụng trong suốt lớp học lập trình này. Nếu đang sử dụng Cloud Shell, biến này sẽ được đặt cho bạn:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
Tiếp theo, hãy tạo một tài khoản dịch vụ mới để truy cập vào Speech-to-Text API bằng cách sử dụng:
gcloud iam service-accounts create my-speech-to-text-sa \
--display-name "my speech-to-text codelab service account"
Tiếp theo, hãy tạo thông tin đăng nhập mà mã Node.js sẽ dùng để đăng nhập dưới dạng tài khoản dịch vụ mới. Tạo thông tin đăng nhập này và lưu dưới dạng tệp JSON ~/key.json bằng cách sử dụng lệnh sau:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-speech-to-text-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Cuối cùng, hãy đặt biến môi trường GOOGLE_APPLICATION_CREDENTIALS. Thư viện Node.js của Speech-to-Text API (được đề cập trong bước tiếp theo) sẽ dùng biến này để tìm thông tin đăng nhập của bạn. Bạn nên đặt biến môi trường thành đường dẫn đầy đủ của tệp JSON chứa thông tin đăng nhập mà bạn đã tạo bằng cách sử dụng:
export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"
Bạn có thể đọc thêm về cách xác thực Speech-to-Text API.
5. Cài đặt thư viện ứng dụng API Speech-to-Text của Google Cloud cho Node.js
Trước tiên, hãy tạo một dự án mà bạn sẽ dùng để chạy phòng thí nghiệm Speech-to-Text API này, khởi chạy một gói Node.js mới trong thư mục mà bạn chọn:
npm init
NPM sẽ hỏi một số câu hỏi về cấu hình dự án, chẳng hạn như tên và phiên bản. Đối với mỗi câu hỏi, hãy nhấn ENTER để chấp nhận các giá trị mặc định. Điểm truy cập mặc định là một tệp có tên index.js.
Tiếp theo, hãy cài đặt thư viện Google Cloud Speech vào dự án:
npm install --save @google-cloud/speech
Để biết thêm hướng dẫn về cách thiết lập môi trường phát triển Node.js cho Google Cloud, vui lòng xem Hướng dẫn thiết lập.
Giờ đây, bạn đã sẵn sàng sử dụng Speech-to-Text API!
6. Chép lời tệp âm thanh
Trong phần này, bạn sẽ chép lời một tệp âm thanh được ghi sẵn bằng tiếng Anh. Tệp âm thanh có trên Google Cloud Storage.
Chuyển đến tệp index.js bên trong rồi thay thế mã bằng đoạn mã sau:
// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
/**
* Calls the Speech-to-Text API on a demo audio file.
*/
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
uri: gcsUri,
};
const config = {
encoding: 'LINEAR16',
sampleRateHertz: 16000,
languageCode: 'en-US',
};
const request = {
audio: audio,
config: config,
};
// Detects speech in the audio file
const [response] = await client.recognize(request);
const transcription = response.results
.map(result => result.alternatives[0].transcript)
.join('\n');
console.log(`Transcription: ${transcription}`);
}
quickstart();
Dành một hoặc hai phút để nghiên cứu mã và xem mã này được dùng để chép lời một tệp âm thanh như thế nào.
Tham số Encoding cho biết API loại mã hoá âm thanh mà bạn đang dùng cho tệp âm thanh. Flac là loại mã hoá cho tệp .raw (xem tài liệu để biết thêm thông tin về loại mã hoá).
Trong đối tượng RecognitionAudio, bạn có thể truyền cho API uri của tệp âm thanh trong Cloud Storage hoặc đường dẫn tệp cục bộ cho tệp âm thanh. Ở đây, chúng ta đang sử dụng một URI Cloud Storage.
Chạy chương trình:
node .
Bạn sẽ thấy kết quả sau đây:
how old is the Brooklyn Bridge
7. Chép lời có dấu thời gian của từng từ
Chuyển lời nói thành văn bản có thể phát hiện độ lệch thời gian (dấu thời gian) cho âm thanh được chép lời. Độ lệch thời gian cho biết thời điểm bắt đầu và kết thúc của từng từ được nói trong âm thanh được cung cấp. Giá trị chênh lệch thời gian biểu thị khoảng thời gian đã trôi qua kể từ khi bắt đầu âm thanh, theo gia số 100 mili giây.
Chuyển đến tệp index.js bên trong rồi thay thế mã bằng đoạn mã sau:
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
/**
* Calls the Speech-to-Text API on a demo audio file.
*/
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
uri: gcsUri,
};
const config = {
encoding: 'LINEAR16',
sampleRateHertz: 16000,
languageCode: 'en-US',
enableWordTimeOffsets: true,
};
const request = {
audio: audio,
config: config,
};
// Detects speech in the audio file
const [response] = await client.recognize(request);
response.results.forEach((result) => {
result.alternatives.forEach((alternative) => {
console.log(`Transcript: ${alternative.transcript}`);
console.log(`Word details:`);
console.log(` Word count ${alternative.words.length}`);
alternative.words.forEach((item) => {
console.log(` ${item.word}`);
const s = parseInt(item.startTime.seconds) +
item.startTime.nanos/1000000000;
console.log(` WordStartTime: ${s}s`);
const e = parseInt(item.endTime.seconds) +
item.endTime.nanos/1000000000;
console.log(` WordEndTime: ${e}s`);
});
});
});
}
quickstart();
Dành một hoặc hai phút để nghiên cứu đoạn mã và xem đoạn mã này được dùng để chép lời một tệp âm thanh có dấu thời gian của từ như thế nào. Tham số EnableWordTimeOffsets yêu cầu API bật độ lệch thời gian (xem tài liệu để biết thêm thông tin chi tiết).
Chạy lại chương trình:
node .
Bạn sẽ thấy kết quả sau đây:
Transcript: how old is the Brooklyn Bridge
Word details:
Word count 6
how
WordStartTime: 0s
WordEndTime: 0.3s
old
WordStartTime: 0.3s
WordEndTime: 0.6s
is
WordStartTime: 0.6s
WordEndTime: 0.8s
the
WordStartTime: 0.8s
WordEndTime: 0.9s
Brooklyn
WordStartTime: 0.9s
WordEndTime: 1.1s
Bridge
WordStartTime: 1.1s
WordEndTime: 1.4s
8. Chép lời bằng nhiều ngôn ngữ
Speech-to-Text API hỗ trợ chép lời bằng hơn 100 ngôn ngữ! Bạn có thể xem danh sách các ngôn ngữ được hỗ trợ tại đây.
Trong phần này, bạn sẽ chép lời một tệp âm thanh được ghi sẵn bằng tiếng Pháp. Tệp âm thanh có trên Google Cloud Storage.
Chuyển đến tệp index.js bên trong rồi thay thế mã bằng đoạn mã sau:
// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
/**
* Calls the Speech-to-Text API on a demo audio file.
*/
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
const gcsUri = 'gs://cloud-samples-data/speech/corbeau_renard.flac';
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
uri: gcsUri,
};
const config = {
encoding: 'FLAC',
languageCode: 'fr-FR',
};
const request = {
audio: audio,
config: config,
};
// Detects speech in the audio file
const [response] = await client.recognize(request);
const transcription = response.results
.map((result) => result.alternatives[0].transcript)
.join('\n');
console.log(`Transcription: ${transcription}`);
}
quickstart();
Chạy lại chương trình và bạn sẽ thấy kết quả sau:
maître corbeau sur un arbre perché tenait en son bec un fromage
Đây là một câu trong câu chuyện nổi tiếng dành cho trẻ em của Pháp.
Để xem danh sách đầy đủ các ngôn ngữ và mã ngôn ngữ được hỗ trợ, hãy xem tài liệu tại đây.
9. Xin chúc mừng!
Bạn đã tìm hiểu cách sử dụng Speech-to-Text API bằng Node.js để thực hiện nhiều loại bản chép lời trên các tệp âm thanh!
Dọn dẹp
Để tránh bị tính phí cho tài khoản Google Cloud Platform đối với các tài nguyên được dùng trong hướng dẫn bắt đầu nhanh này, hãy làm như sau:
- Truy cập vào Cloud Platform Console.
- Chọn dự án mà bạn muốn tắt, sau đó nhấp vào "Xoá" ở trên cùng: thao tác này sẽ lên lịch xoá dự án.
Tìm hiểu thêm
- Google Cloud Speech-to-Text API: https://cloud.google.com/speech-to-text/docs
- Node.js trên Google Cloud Platform: https://cloud.google.com/nodejs/
- Ứng dụng Google Cloud Node.js: https://googlecloudplatform.github.io/google-cloud-node/
Giấy phép
Tác phẩm này được cấp phép theo giấy phép Ghi công theo Creative Commons 2.0 Chung.