Tạo bản chép lời các cuộc họp kinh doanh bằng Google Tài liệu và Học máy

1. Tổng quan

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách gửi tệp âm thanh thông qua API Chuyển lời nói thành văn bản của Google Cloud, sau đó xuất bản chép lời sang Google Tài liệu. API Chuyển lời nói thành văn bản rất dễ sử dụng và áp dụng mạng nơron mạnh mẽ để cho phép các nhà phát triển chuyển âm thanh thành văn bản! Ngoài ra, Bard còn có công nghệ học máy hỗ trợ.

Bạn sẽ sử dụng API Google Tài liệu để tạo và ghi vào tài liệu mới. Bạn sẽ tạo một ứng dụng dòng lệnh Java và chạy mã bằng hệ thống xây dựng gradle rồi sử dụng API Tài liệu để xem kết quả.

Kiến thức bạn sẽ học được

  • Cách sử dụng API Chuyển lời nói thành văn bản của Google Cloud
  • Cách sử dụng API Google Tài liệu để tạo tài liệu mới
  • Cách sử dụng API Tài liệu để ghi vào tài liệu

Bạn cần có

  • Đã cài đặt Java (phiên bản 7 trở lên)
  • Đã cài đặt Gradle (phiên bản 5 trở lên)
  • Quyền truy cập vào Internet và trình duyệt web
  • Tài khoản Google
  • Một dự án Google Cloud Platform

2. Thiết lập dự án

Tạo dự án trên đám mây

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Xin lưu ý rằng mã dự án là một tên riêng biệt trong tất cả dự án Google Cloud (tên ở trên đã được sử dụng nên sẽ không phù hợp với bạn!). Lớp này sẽ được đề cập sau trong lớp học lập trình này là PROJECT_ID.

  1. Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.

Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" sẽ tư vấn cho bạn cách tắt tài nguyên để bạn không phải chịu thanh toán ngoài 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í 300 USD.

Lấy khoá tài khoản dịch vụ cho Cloud Speech-to-Text API

60f112dedc208681.pngS

  1. Truy cập vào bảng điều khiển GCP để tìm dự án mới của bạn
  2. Tạo một tài khoản dịch vụ
  3. Tải khoá tài khoản dịch vụ xuống dưới dạng JSON
  4. Đặt biến môi trường GOOGLE_APPLICATION_CREDENTIALS thành đường dẫn tệp của tệp JSON chứa khoá tài khoản dịch vụ. Nếu khởi động lại phiên shell, bạn sẽ phải đặt lại biến.
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

Ví dụ:

$ export GOOGLE_APPLICATION_CREDENTIALS="/home/usr/downloads/ServiceAccount.json"

Nhận thông tin xác thực cho API Tài liệu

  1. Quay lại bảng điều khiển GCP, chuyển đến phần Thông tin đăng nhập
  2. Tạo khoá OAuth 2.0 và tải xuống dưới dạng JSON
  3. Đổi tên tệp credentials.json và đảm bảo tệp này nằm trong thư mục src/main/resources/ của mã

Bật API

3066cf79c136a078.pngS

  1. Chọn thẻ Trang tổng quan, nhấp vào nút Bật API và dịch vụ rồi bật 2 API sau:
  2. Chuyển lời nói thành văn bản
  3. Google Tài liệu

846ba54aa7e1e584.png.

Bây giờ, bạn đã sẵn sàng để bắt đầu làm việc với mã của mình.

3. Thiết lập mã

Nhận mã mẫu

Để nhận mã mẫu, hãy tải tệp zip xuống máy tính của bạn...

...hoặc sao chép kho lưu trữ GitHub từ dòng lệnh.

$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git

Bạn sẽ làm việc trong tệp CreateTranscript.java bên trong thư mục start. Không được sửa đổi các tệp gradle.

Trong thư mục của bạn, hãy chuyển đến thư mục start rồi mở tệp Create APK.java. Di chuyển xuống nơi bạn thấy phần khai báo lớp CreateTranscript.

public class CreateTranscript {
  private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
  
  // Specify audio file name below.
  private static final String AUDIO_FILENAME = "audioFile.wav";
  private static final String TOKENS_DIRECTORY_PATH = "tokens";
  private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
  private static final String APPLICATION_NAME = "CreateTranscript";
  private static final List<String> SCOPES = Collections.singletonList(DocsScopes.DOCUMENTS);

Đối với biến SCOPES, bạn đã chỉ định rằng mã của bạn sẽ có thể xem và quản lý các tài liệu trên Google Tài liệu của người dùng. Nếu mã của bạn yêu cầu uỷ quyền ngoài hoặc khác với quyền truy cập này, hãy nhớ điều chỉnh biến này cho phù hợp dựa trên Phạm vi API của Google OAuth 2.0.

Ví dụ: nếu không ghi vào Google Tài liệu, bạn có thể thay đổi phạm vi thành DOCUMENTS_READONLY. Biến SCOPES không chỉ cần thiết để ứng dụng của bạn có quyền truy cập phù hợp, mà còn để duy trì tính minh bạch với người dùng. Người dùng sẽ thấy những phạm vi cụ thể mà bạn yêu cầu trong trang xác minh OAuth, trong đó họ phải đồng ý sử dụng ứng dụng.

Đổi tên biến

Hãy đảm bảo rằng các biến ở trên được khai báo chính xác cho dự án của bạn.

  1. Hãy nhớ đặt AUDIO_FILENAME thành tên của tệp minh họa mà bạn đang gửi tới API Chuyển lời nói thành văn bản. Trong tệp CreateTranscript.java, bạn sẽ thấy tệp này được thiết lập chính xác.
  2. Đổi tên CREDENTIALS_FILE_PATH thành tên của tệp thông tin xác thực đã tải xuống (phải là ‘/credentials.json'). Hãy đảm bảo rằng tệp này nằm trong thư mục src/main/resources của thư mục. Vì vậy, hãy nhớ tạo thư mục này nếu tính năng sao chép GitHub không làm điều đó cho bạn.

Bây giờ, bạn có thể bắt đầu chạy mã!

4. Khởi chạy ứng dụng Tài liệu

Trong tệp CreateTranscript.java, hãy tìm phần khai báo phương thức chính và xem qua nội dung bên trong:

final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Docs service = new Docs.Builder(HTTP_TRANSPORT, JSON_FACTORY,
    getCredentials(HTTP_TRANSPORT))
          .setApplicationName(APPLICATION_NAME)
          .build();

Uỷ quyền hàm

Nhiệm vụ đầu tiên bạn đang thực hiện ở đây là tạo Docs service (biến). Dịch vụ này đại diện cho một ứng dụng API được uỷ quyền, lưu giữ thông tin đăng nhập của bạn và trong trường hợp này là phương thức xác thực người dùng cuối.

Trong mã của bạn, bất kỳ hàm nào thực hiện lệnh gọi đến API Tài liệu đều cần phải sử dụng biến service này để thực hiện các thao tác liên quan đến Tài liệu.

5. Tạo Google Tài liệu

Bạn sẽ tạo Tài liệu Google mới với tiêu đề đã chỉ định. Hãy sao chép mã dưới đây trong hàm createDocument.

Document doc = new Document().setTitle("Transcript for " +
    AUDIO_FILENAME);
doc = service.documents().create(doc).execute();
String documentId = doc.getDocumentId();
return documentId;

Hàm này trả về mã tệp trên Drive của tệp Google Tài liệu. Bạn có thể tìm thấy cùng mã này trong URL của tài liệu.

Tiếp theo, bạn sẽ khởi chạy ứng dụng Chuyển lời nói thành văn bản.

6. Gọi API Chuyển lời nói thành văn bản

Tác vụ tiếp theo bạn muốn thực hiện trong mã là thu thập bản chép lời cho tệp âm thanh. Bên trong CreateTranscript.java, hãy tìm hàm getTranscript().

Trước tiên, hãy lấy đường dẫn và byte âm thanh của tệp âm thanh:

SpeechClient speech = SpeechClient.create();
Path path = Paths.get(AUDIO_FILENAME);
byte[] data = Files.readAllBytes(path);
ByteString audioBytes = ByteString.copyFrom(data);

Định cấu hình nhận dạng lời nói

Tiếp theo, bạn phải khởi chạy biến RecognitionConfig đúng cách.

Tại đây, config cung cấp thông tin về cách chính xác trình nhận dạng lời nói sẽ xử lý yêu cầu của bạn. Chẳng hạn, bạn cần phải chỉnh sửa setLanguageCode() nếu tệp âm thanh của bạn bằng ngôn ngữ không phải tiếng Anh và thay đổi setSampleRateHertz() nếu tệp âm thanh có tốc độ lấy mẫu khác tính theo Hertz (tối ưu là 1600).

RecognitionConfig config =
    RecognitionConfig.newBuilder()
        .setEncoding(AudioEncoding.LINEAR16)
        .setLanguageCode("en-US")
        .setSampleRateHertz(8000)
        .build();
RecognitionAudio audio =
    RecognitionAudio.newBuilder().setContent(audioBytes).build();
RecognizeResponse response = speech.recognize(config, audio);
List<SpeechRecognitionResult> results = response.getResultsList();

Chuẩn bị văn bản

Cuối cùng, hãy xử lý biến result trong bản chép lời của tệp âm thanh và chuẩn bị chèn biến đó vào tài liệu.

Mỗi mục trong kết quả là một bản chép lời thuộc loại SpeechRecognitionAlternatives. Do đó, mỗi mục gồm hai phần: một bản chép lời văn bản và điểm số tin cậy tương ứng của API.

List<Request> requests = new ArrayList<>();
for (SpeechRecognitionResult result : results) {
     // Using the first + most likely alternative transcript
     SpeechRecognitionAlternative alternative =
         result.getAlternativesList().get(0);
     String toInsert = alternative.getTranscript();

     // Add requests array list to return.
     requests.add(
         new Request()
             .setInsertText(
                 new InsertTextRequest()
                     .setText(toInsert)
                     .setEndOfSegmentLocation(new
     EndOfSegmentLocation().setSegmentId(""))));
}
return requests;

7. Chèn văn bản vào Tài liệu

Bây giờ, bạn sẽ chèn văn bản bản chép lời vào Google Tài liệu. Để chỉnh sửa một tài liệu, bạn cần phải sử dụng phương thức BatchUpdate. BatchUpdate là vùng chứa dành cho nhiều loại yêu cầu ghi và tại đây, bạn sẽ sử dụng InsertTextRequest.

EndOfSegmentLocation là một tham số quan trọng chỉ định vị trí bạn muốn in văn bản trong Tài liệu. Trong mã nguồn, bạn đang chèn văn bản vào phần nội dung của tài liệu.

Hãy chèn mã dưới đây vào hàm của bạn để xem kết quả API Chuyển lời nói thành văn bản cùng với các lệnh gọi đến API Tài liệu có thể cho phép chúng tôi chèn bản chép lời của tệp âm thanh vào Google Tài liệu như thế nào:

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
    body.setRequests(insertRequests)).execute();

Tạo yêu cầu

Khi thực hiện yêu cầu BatchUpdate, bạn phải đặt hai thông số kỹ thuật rất quan trọng: thông số bạn muốn in (.setText()) cũng như vị trí bạn muốn in tài liệu (.setIndex(1)).

Bạn hiện đã chèn bản chép lời của tệp âm thanh vào Tài liệu được tạo.

8. Chạy mã

Bây giờ, bạn đã có tất cả mã cần thiết để lấy tệp âm thanh, lấy bản chép lời và in bản chép lời của tệp đó vào một tệp Google Tài liệu mới tạo. Hãy bắt đầu thực hiện chương trình này!

Vì bạn sẽ chạy mã java bằng hệ thống xây dựng gradle, nên bạn phải cho tệp build.gradle biết chính xác những gì cần tạo và chạy. Trong dự án này và các dự án khác, hãy đảm bảo bạn giữ cho mainClassName nhất quán với lớp java mà bạn muốn chạy.

Tuyệt vời! Bây giờ, bạn đã sẵn sàng chạy mã. Để thực hiện việc này, hãy nhập nội dung sau vào dòng lệnh:

$ gradle run

Xác thực người dùng cuối

Lần đầu tiên chạy mã này, bạn sẽ thấy một URL được in trong cửa sổ dòng lệnh yêu cầu bạn đăng nhập vào tài khoản dịch vụ của bạn và cấp quyền truy cập vào Google Tài liệu của tài khoản đó. Sau khi cho phép truy cập, bạn sẽ thấy một tệp mới được lưu trữ trong thư mục của mình.

Bên trong thư mục đang hoạt động, bạn sẽ thấy một thư mục mới tạo có tên token, chứa tệp StoredCredential. Đây là mã thông báo xác thực mà bạn vừa cung cấp mà ứng dụng của bạn đã yêu cầu từ Máy chủ xác thực của Google, được trích xuất từ phản hồi và giờ đây sẽ gửi qua bất kỳ API nào mà bạn gọi.

Giải pháp

Nếu mã của bạn không hoạt động, hãy kiểm tra bên trong tệp CreateTranscript.java trong thư mục CreateTranscript.java. Tệp này có tất cả mã của bạn chính xác như cần thiết để chạy thành công.

Giờ hãy cùng xem kết quả.

9. Xem kết quả

Bạn vừa tạo một Tài liệu Google mới có chứa bản chép lời của tệp âm thanh, chúng ta cùng xem qua nhé.

Tài liệu này được tạo qua tài khoản mà người dùng cuối đã uỷ quyền. Một cách mở rộng khả thi là bạn có thể tự động chia sẻ Tài liệu này với người khác bằng API Drive.

Khi sử dụng mã nguồn và tệp âm thanh được cung cấp, bạn sẽ thấy như sau:

ee73fcdd1dbcdcff.png

10. Xin chúc mừng!

Giờ đây, bạn đã biết cách tạo tệp Google Tài liệu, thực hiện lệnh gọi đến API Chuyển lời nói thành văn bản và xuất bản chép lời của tệp âm thanh sang Tài liệu đã tạo.

Những điểm có thể cải thiện

Dưới đây là một số ý tưởng về cách tích hợp hấp dẫn hơn:

  • Thiết lập mã của bạn để nghe khi có tệp âm thanh được thêm vào Drive nhóm trên Google Cloud Storage, đồng thời kích hoạt một Hàm Google Cloud để thực thi mã này
  • Thử nghiệm cách chèn văn bản vào tệp Google Tài liệu không trống

Tìm hiểu thêm