Sử dụng API Chuyển lời nói thành văn bản bằng C#

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 bằng C#. 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 sử dụng Cloud Shell
  • 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 C#
  • 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
  • Quen thuộc với việc sử dụng C#

Bản khảo sát

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ đọc Đọc và hoàn thành bài tập

Bạn đánh giá thế nào về trải nghiệm của mình với C#?

Người mới bắt đầu Trung cấp Thành thạo

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?

Người mới bắt đầu Trung cấp Thành thạo

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

  1. Đăng nhập vào Google 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 Google Workspace, bạn phải tạo một tài khoản.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • 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ự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
  • Mã dự án là giá trị duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian của dự án.
  • Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
  1. 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/API trên 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ó. Để 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, bạn có thể xoá các tài nguyê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í 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

  1. Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

Nếu đây là lần đầu tiên bạ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 thấy màn hình trung gian, hãy nhấp vào Tiếp tục.

d95252b003979716.png

Quá trình cung cấp và kết nối với Cloud Shell chỉ mất vài giây.

7833d5e1c5d18f54.png

Máy ảo này được trang bị tất cả các công cụ phát triển cần thiết. 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 của mình trong lớp học lập trình này bằng trình duyệt.

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.

  1. 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`
  1. 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

Đầ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. Cài đặt thư viện ứng dụng Google Cloud Speech-to-Text API cho C#

Trước tiên, hãy tạo một ứng dụng bảng điều khiển C# đơn giản mà bạn sẽ dùng để chạy các mẫu Speech-to-Text API:

dotnet new console -n SpeechToTextApiDemo

Bạn sẽ thấy ứng dụng được tạo và các phần phụ thuộc được phân giải:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

Tiếp theo, hãy chuyển đến thư mục SpeechToTextApiDemo:

cd SpeechToTextApiDemo/

Và thêm gói Google.Cloud.Speech.V1 NuGet vào dự án:

dotnet add package Google.Cloud.Speech.V1
info : Adding PackageReference for package 'Google.Cloud.Speech.V1' into project '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.
log  : Restoring packages for /home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.Speech.V1' version '1.0.1' added to file '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.

Giờ đây, bạn đã sẵn sàng sử dụng Speech-to-Text API!

5. 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.

Để chép lời một tệp âm thanh, hãy mở trình soạn thảo mã ở phía trên cùng bên phải của Cloud Shell:

fd3fc1303e63572.png

Chuyển đến tệp Program.cs bên trong thư mục SpeechToTextApiDemo rồi thay thế mã bằng đoạn mã sau:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                SampleRateHertz = 16000,
                LanguageCode = LanguageCodes.English.UnitedStates
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");         
            
            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine(alternative.Transcript);
                }
            }
        }
    }
}

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.

Trong Cloud Shell, hãy chạy ứng dụng:

dotnet run

Bạn sẽ thấy kết quả sau đây:

how old is the Brooklyn Bridge

Tóm tắt

Ở bước này, bạn có thể chép lời một tệp âm thanh bằng tiếng Anh và in kết quả. Tìm hiểu thêm về tính năng Chuyển lời nói thành văn bản.

6. 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.

Để chép lời một tệp âm thanh có độ lệch thời gian, hãy chuyển đến tệp Program.cs bên trong thư mục SpeechToTextApiDemo rồi thay thế mã bằng đoạn mã sau:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                SampleRateHertz = 16000,
                LanguageCode = LanguageCodes.English.UnitedStates,
                EnableWordTimeOffsets = true
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");
     
            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine($"Transcript: { alternative.Transcript}");
                    Console.WriteLine("Word details:");
                    Console.WriteLine($" Word count:{alternative.Words.Count}");
                    foreach (var item in alternative.Words)
                    {
                        Console.WriteLine($"  {item.Word}");
                        Console.WriteLine($"    WordStartTime: {item.StartTime}");
                        Console.WriteLine($"    WordEndTime: {item.EndTime}");
                    }
                }
            }
        }
    }
}

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

Trong Cloud Shell, hãy chạy ứng dụng:

dotnet run

Bạn sẽ thấy kết quả sau đây:

dotnet run

Transcript: how old is the Brooklyn Bridge
Word details:
 Word count:6
  how
    WordStartTime: "0s"
    WordEndTime: "0.300s"
  old
    WordStartTime: "0.300s"
    WordEndTime: "0.600s"
  is
    WordStartTime: "0.600s"
    WordEndTime: "0.800s"
  the
    WordStartTime: "0.800s"
    WordEndTime: "0.900s"
  Brooklyn
    WordStartTime: "0.900s"
    WordEndTime: "1.100s"
  Bridge
    WordStartTime: "1.100s"
    WordEndTime: "1.500s"

Tóm tắt

Ở bước này, bạn có thể chép lời một tệp âm thanh bằng tiếng Anh có dấu thời gian của từ và in kết quả. Đọc thêm về Chuyển lời nói thành văn bản bằng độ lệch từ.

7. 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.

Để chép lời tệp âm thanh tiếng Pháp, hãy chuyển đến tệp Program.cs bên trong thư mục SpeechToTextApiDemo rồi thay thế mã bằng đoạn mã sau:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                LanguageCode = LanguageCodes.French.France
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-data/speech/corbeau_renard.flac");

            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine(alternative.Transcript);
                }
            }
        }
    }
}

Dành một hoặc hai phút để nghiên cứu mã và xem cách mã này được dùng để chép lời một tệp âm thanh*.* Tham số LanguageCode cho API biết bản ghi âm được thực hiện bằng ngôn ngữ nào.

Trong Cloud Shell, hãy chạy ứng dụng:

dotnet run

Bạn sẽ thấy kết quả sau đây:

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.

Tóm tắt

Ở bước này, bạn có thể chép lời một tệp âm thanh bằng tiếng Pháp và in kết quả. Đọc thêm về các ngôn ngữ được hỗ trợ.

8. Xin chúc mừng!

Bạn đã tìm hiểu cách sử dụng Speech-to-Text API bằng C# để 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

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.