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 các nhà phát triển chuyển đổi âm thanh thành văn bản bằng 120 ngôn ngữ và nhiều biến thể khác nhau, 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 API Chuyển lời nói thành văn bản bằng C#. Bạn sẽ tìm hiểu cách gửi tệp âm thanh bằng tiếng Anh và các ngôn ngữ khác tới 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 API Chuyển lời nói thành văn bản
  • Cách xác thự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 bằng dấu thời gian của 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 C#

Khảo sát

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

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

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

Người mới tập Trung cấp Thành thạo

Bạn đánh giá trải nghiệm sử dụng các dịch vụ của Google Cloud Platform như thế nào?

Người mới tập 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 tiến độ riêng

  1. Đă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.

295004821bab6a87.pngS

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ự 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 (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 của 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.
  1. 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 Google Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.

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

d95252b003979716.png

Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.

7833d5e1c5d18f54.pngS

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.

  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

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

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. Bật API Chuyển lời nói thành văn bản

Bạn phải bật API này thì mới có thể bắt đầu sử dụng API Chuyển lời nói thành văn bản. Bạn có thể bật API này bằng cách dùng lệnh sau trong Cloud Shell:

gcloud services enable speech.googleapis.com

4. Cài đặt thư viện ứng dụng API Chuyển lời nói thành văn bản của Google Cloud 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ẽ sử dụng để chạy mẫu API Chuyển lời nói thành văn bản:

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 giải quyết:

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

Bây giờ, bạn đã sẵn sàng sử dụng API Chuyển lời nói thành văn bản!

5. Chép lời tệp âm thanh

Trong phần này, bạn sẽ chép lời tệp âm thanh ghi sẵn bằng tiếng Anh. Tệp âm thanh có trên Google Cloud Storage.

Để chép lời tệp âm thanh, hãy mở trình soạn thảo mã ở 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);
                }
            }
        }
    }
}

Hãy dành một hoặc hai phút để nghiên cứu mã và xem mã đó được dùng để chép lời một tệp âm thanh*.*

Tham số Encoding cho API biết loại mã hoá âm thanh mà bạn đang sử dụng cho tệp âm thanh. Flac là kiểu mã hoá cho các tệp .raw (xem tài liệu để biết kiểu mã hoá để biết thêm chi tiết).

Trong đối tượng RecognitionAudio, bạn có thể chuyển API đến URI của tệp âm thanh trong Cloud Storage hoặc đường dẫn tệp trên máy cho tệp âm thanh. Ở đây, chúng ta đang sử dụng URI Cloud Storage.

Quay lại Cloud Shell, 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ả ra. Đọc thêm về tính năng Chép lời.

6. Chép lời bằng dấu thời gian của từ

Tính năng Chuyển lời nói thành văn bản có thể phát hiện chênh lệch thời gian (dấu thời gian) cho âm thanh được chép lời. Chế độ bù trừ thời gian hiển thị thời điểm bắt đầu và kết thúc mỗi lời nói trong bản âm thanh được cung cấp. Giá trị bù trừ thời gian biểu thị khoảng thời gian đã trôi qua kể từ thời điểm bắt đầu âm thanh, theo gia số 100 mili giây.

Để chép lời tệp âm thanh bằng chế độ chênh 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ế đ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}");
                    }
                }
            }
        }
    }
}

Hãy dành một hoặc hai phút để nghiên cứu đoạn mã và xem mã đó được dùng để chép lời một tệp âm thanh bằng dấu thời gian của từ*.* Tham số EnableWordTimeOffsets yêu cầu API bật chế độ chênh lệch thời gian (xem tài liệu để biết thêm chi tiết).

Quay lại Cloud Shell, 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 bằng các dấu thời gian của từ và in kết quả ra. Đọc thêm về Cách chép lời bằng hiệu ứng bù từ.

7. Chép lời các ngôn ngữ khác nhau

API Chuyển lời nói thành văn bản hỗ trợ chép lời cho hơn 100 ngôn ngữ! Bạn có thể tìm thấy danh sách 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 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);
                }
            }
        }
    }
}

Hãy 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 ngôn ngữ của bản ghi âm.

Quay lại Cloud Shell, 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 một câu chuyện trẻ em ở Pháp nổi tiếng.

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ả ra. Đọ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 dùng API Chuyển lời nói thành văn bản bằng C# để thực hiện nhiều loại bản chép lời trên tệp âm thanh!

Dọn dẹp

Để tránh bị tính phí vào tài khoản Google Cloud Platform của bạn cho các tài nguyên được sử dụng trong hướng dẫn bắt đầu nhanh này, hãy làm như sau:

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 chung Ghi nhận tác giả Creative Commons 2.0.