สร้างข้อความถอดเสียงการประชุมทางธุรกิจโดยใช้ Google เอกสารและ แมชชีนเลิร์นนิง

1. ภาพรวม

ใน Codelab นี้ คุณจะได้เรียนรู้วิธีส่งไฟล์เสียงผ่าน Google Cloud Speech to Text API จากนั้นเอาต์พุตการถอดเสียงไปยัง Google เอกสาร Speech to Text API นั้นใช้งานง่าย และใช้โครงข่ายระบบประสาทเทียมที่มีประสิทธิภาพเพื่อให้นักพัฒนาซอฟต์แวร์เปลี่ยนเสียงเป็นข้อความได้ แถมยังขับเคลื่อนโดยแมชชีนเลิร์นนิงอีกด้วย

คุณจะใช้ Google เอกสาร API เพื่อสร้างและเขียนไปยังเอกสารใหม่ คุณจะสร้างแอปพลิเคชันบรรทัดคำสั่ง Java และเรียกใช้โค้ดโดยใช้ระบบ Gradle เวอร์ชัน จากนั้นใช้ Docs API เพื่อดูผลลัพธ์

สิ่งที่คุณจะได้เรียนรู้

  • วิธีใช้ Google Cloud Speech to Text API
  • วิธีใช้ Google เอกสาร API เพื่อสร้างเอกสารใหม่
  • วิธีใช้ Docs API เพื่อเขียนเอกสาร

สิ่งที่ต้องมี

  • ติดตั้ง Java (เวอร์ชัน 7 ขึ้นไป)
  • ติดตั้ง Gradle แล้ว (เวอร์ชัน 5 ขึ้นไป)
  • การเข้าถึงอินเทอร์เน็ตและเว็บเบราว์เซอร์
  • บัญชี Google
  • โปรเจ็กต์ Google Cloud Platform

2. ตั้งค่าโปรเจ็กต์

สร้างโปรเจ็กต์ที่อยู่ในระบบคลาวด์

  1. ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ Workspace คุณต้องสร้างบัญชี)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID ในภายหลัง

  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

รับคีย์บัญชีบริการสำหรับ Cloud Speech-to-Text API

60f112dedc208681.png

  1. ไปที่คอนโซล GCP และค้นหาโปรเจ็กต์ใหม่
  2. สร้างบัญชีบริการ
  3. ดาวน์โหลดคีย์บัญชีบริการเป็น JSON
  4. ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS เป็นเส้นทางไฟล์ของไฟล์ JSON ที่มีคีย์บัญชีบริการของคุณ หากรีสตาร์ทเซสชัน Shell คุณจะต้องตั้งค่าตัวแปรอีกครั้ง
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

เช่น

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

รับข้อมูลเข้าสู่ระบบสำหรับ Docs API

  1. กลับไปที่คอนโซล GCP ให้ไปที่ข้อมูลเข้าสู่ระบบ
  2. สร้างคีย์ OAuth 2.0 และดาวน์โหลดเป็น JSON
  3. เปลี่ยนชื่อไฟล์ credentials.json และตรวจสอบว่าอยู่ในไดเรกทอรี src/main/resources/ ของโค้ด

เปิดใช้ API

3066cf79c136a078.png

  1. เลือกแท็บแดชบอร์ด คลิกปุ่มเปิดใช้ API และบริการ แล้วเปิดใช้ API 2 รายการต่อไปนี้
  2. การแปลงเสียงพูดเป็นข้อความ
  3. Google เอกสาร

846ba54aa7e1e584.png

ตอนนี้คุณพร้อมที่จะดำเนินการต่อและเริ่มทำงานกับโค้ดของคุณแล้ว

3. ตั้งค่ารหัส

รับโค้ดตัวอย่าง

หากต้องการรับโค้ดตัวอย่าง ให้ดาวน์โหลดไฟล์ ZIP ลงในคอมพิวเตอร์...

...หรือโคลนที่เก็บ GitHub จากบรรทัดคำสั่ง

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

คุณจะทำงานในไฟล์ CreateTranscript.java ภายในไดเรกทอรี start ไม่ควรแก้ไขไฟล์ Gradle

ในไดเรกทอรี ให้ไปที่โฟลเดอร์ start และเปิดไฟล์ Create Transcribe.java เลื่อนลงไปที่ตำแหน่งที่เห็นประกาศของชั้นเรียน 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);

สำหรับตัวแปร SCOPES คุณระบุว่าโค้ดของคุณจะสามารถดูและจัดการเอกสาร Google เอกสารของผู้ใช้ได้ หากโค้ดของคุณกำหนดให้มีการให้สิทธิ์นอกเหนือจากหรือต่างจากการเข้าถึงนี้ โปรดปรับตัวแปรนี้ตามขอบเขต Google API ของ OAuth 2.0

ตัวอย่างเช่น หากไม่ได้เขียนไปยัง Google เอกสาร คุณก็เปลี่ยนขอบเขตเป็น DOCUMENTS_READONLY ได้ ตัวแปร SCOPES ไม่จำเป็นเพียงแค่เพื่อให้แอปมีสิทธิ์เข้าถึงที่เหมาะสมเท่านั้น แต่ยังเพื่อช่วยดูแลความโปร่งใสต่อผู้ใช้ด้วย ผู้ใช้จะเห็นขอบเขตเฉพาะที่คุณขอในหน้าการยืนยัน OAuth ซึ่งผู้ใช้ต้องให้ความยินยอมในการใช้แอป

เปลี่ยนชื่อตัวแปร

ตรวจสอบว่าตัวแปรข้างต้นได้รับการประกาศอย่างถูกต้องสำหรับโปรเจ็กต์ของคุณ

  1. ตรวจสอบว่าได้ตั้งค่า AUDIO_FILENAME เป็นชื่อไฟล์เดโมที่คุณกำลังส่งไปยัง Speech to Text API ในไฟล์ CreateTranscript.java จะเห็นว่ามีการตั้งค่าอย่างถูกต้อง
  2. เปลี่ยนชื่อ CREDENTIALS_FILE_PATH เป็นชื่อไฟล์ข้อมูลเข้าสู่ระบบที่ดาวน์โหลดมา (ควรเป็น "/credentials.json') ตรวจสอบว่าไฟล์นี้อยู่ในไดเรกทอรี src/main/resources ของโฟลเดอร์ ดังนั้นให้สร้างไดเรกทอรีนี้หากการโคลนของ GitHub ไม่ได้ดำเนินการให้กับคุณ

ตอนนี้คุณก็เริ่มใช้งานโค้ดได้แล้ว

4. เริ่มต้นไคลเอ็นต์เอกสาร

ในไฟล์ CreateTranscript.java ให้ค้นหาการประกาศเมธอดหลักและดูสิ่งที่อยู่ภายใน

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

การให้สิทธิ์ฟังก์ชัน

งานแรกที่คุณดำเนินการที่นี่คือการสร้าง Docs service (ตัวแปร) บริการนี้แสดงไคลเอ็นต์ API ที่ได้รับอนุญาต ซึ่งมีข้อมูลเข้าสู่ระบบของคุณ และในกรณีนี้เป็นการตรวจสอบสิทธิ์ผู้ใช้ปลายทาง

ในโค้ดของคุณ ฟังก์ชันที่เรียกไปยัง Docs API จะต้องใช้ตัวแปร service นี้เพื่อทำงานที่เกี่ยวข้องกับเอกสาร

5. การสร้าง Google เอกสาร

คุณจะสร้างเอกสาร Google ใหม่โดยระบุชื่อ เรามาคัดลอกโค้ดด้านล่างในฟังก์ชัน createDocument กัน

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

ฟังก์ชันนี้จะแสดงรหัสไฟล์ในไดรฟ์ของ Google เอกสาร รหัสเดียวกันนี้พบได้ภายใน URL ของเอกสาร

จากนั้นจึงเริ่มต้นไคลเอ็นต์การแปลงเสียงพูดเป็นข้อความ

6. เรียกใช้ API การแปลงเสียงพูดเป็นข้อความ

งานต่อไปที่คุณจะทำในโค้ดก็คือหาข้อความถอดเสียงจากไฟล์เสียง หาฟังก์ชัน getTranscript() ใน CreateTranscript.java

ขั้นแรก ให้รับเส้นทางและไบต์เสียงของไฟล์เสียงดังนี้

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

กำหนดค่าการจดจำคำพูด

ขั้นต่อไป คุณต้องเริ่มต้นตัวแปร RecognitionConfig อย่างถูกต้อง

ในส่วนนี้ config จะให้ข้อมูลเกี่ยวกับวิธีที่โปรแกรมจดจำเสียงพูดควรประมวลผลคำขอของคุณ ตัวอย่างเช่น คุณจะต้องแก้ไข setLanguageCode() ในกรณีต่างๆ เช่น ไฟล์เสียงเป็นภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ และเปลี่ยน setSampleRateHertz() หากไฟล์เสียงมีอัตราตัวอย่างที่แตกต่างกันในหน่วยเฮิรตซ์ (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();

การเตรียมข้อความ

สุดท้าย จัดการตัวแปร result ของข้อความถอดเสียงของไฟล์เสียง และเตรียมที่จะแทรกลงในเอกสาร

ทุกรายการในผลการค้นหาคือข้อความถอดเสียงประเภท SpeechRecognitionAlternatives ดังนั้น แต่ละรายการจึงประกอบด้วย 2 ส่วนคือ ข้อความถอดเสียงและคะแนนความเชื่อมั่นของ 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. แทรกข้อความในเอกสาร

คุณก็จะแทรกข้อความจากการถอดเสียงลงใน Google เอกสารได้ หากต้องการแก้ไขเอกสาร คุณจะต้องใช้เมธอด BatchUpdate BatchUpdate คือคอนเทนเนอร์สำหรับคำขอการเขียนประเภทต่างๆ และตรงนี้คุณจะใช้ InsertTextRequest

EndOfSegmentLocation คือพารามิเตอร์สำคัญที่ระบุตำแหน่งในเอกสารที่คุณต้องการพิมพ์ข้อความ คุณกำลังแทรกข้อความในเนื้อหาของเอกสารในซอร์สโค้ด

มาแทรกโค้ดด้านล่างในฟังก์ชันของคุณกันเพื่อดูว่าผลลัพธ์ของ Speech-to-Text API ที่ทำงานร่วมกับการเรียก Docs API จะช่วยให้เราแทรกการถอดเสียงของไฟล์เสียงลงใน Google เอกสารได้อย่างไร

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

การสร้างคำขอ

เมื่อส่งคำขออัปเดตแบบกลุ่ม คุณต้องกำหนดข้อกำหนดที่สำคัญมาก 2 ประการ ได้แก่ สิ่งที่ต้องการพิมพ์ (.setText()) รวมถึงตำแหน่งที่ต้องการพิมพ์ (.setIndex(1)) ในเอกสาร

คุณได้แทรกข้อความถอดเสียงของไฟล์เสียงในเอกสารที่สร้างขึ้นแล้ว

8. การเรียกใช้โค้ด

ตอนนี้คุณมีโค้ดทั้งหมดที่ต้องใช้ในการทำไฟล์เสียง รับข้อความถอดเสียง และพิมพ์ข้อความถอดเสียงลงในเอกสารใน Google เอกสารที่สร้างขึ้นใหม่แล้ว มาเริ่มเผยแพร่รายการนี้กันเลย

เนื่องจากคุณจะเรียกใช้โค้ด Java โดยใช้ระบบบิลด์ Gradle คุณต้องบอกไฟล์ build.gradle ว่าต้องสร้างและเรียกใช้จริงๆ ในโปรเจ็กต์นี้และส่วนอื่นๆ โปรดตรวจสอบว่าคุณรักษา mainClassName ให้สอดคล้องกับคลาส Java ที่คุณต้องการเรียกใช้

เยี่ยม! ตอนนี้คุณพร้อมที่จะเรียกใช้โค้ดแล้ว โดยพิมพ์คำสั่งต่อไปนี้ลงในบรรทัดคำสั่ง

$ gradle run

การตรวจสอบสิทธิ์ของผู้ใช้ปลายทาง

ครั้งแรกที่เรียกใช้โค้ดนี้ คุณจะเห็น URL พิมพ์อยู่ที่เครื่องอ่านบัตร ซึ่งขอให้คุณเข้าสู่ระบบบัญชีบริการและให้สิทธิ์เข้าถึง Google เอกสาร หลังจากอนุญาตให้เข้าถึงแล้ว คุณจะเห็นไฟล์ใหม่ที่จัดเก็บไว้ในไดเรกทอรี

ภายในไดเรกทอรีที่ใช้งานอยู่ คุณจะเห็นโฟลเดอร์ที่สร้างใหม่ชื่อว่า tokens ซึ่งมีไฟล์ StoredCredential นี่คือโทเค็นการตรวจสอบสิทธิ์ที่คุณเพิ่งระบุ ซึ่งไคลเอ็นต์ของคุณขอจากเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของ Google ซึ่งดึงมาจากการตอบกลับ และตอนนี้จะส่งไปยัง API ที่คุณเรียกใช้

โซลูชัน

หากโค้ดของคุณไม่ทำงาน โปรดดูที่ไฟล์ CreateTranscript.java ในโฟลเดอร์ CreateTranscript.java ไฟล์นี้มีโค้ดทั้งหมดที่ต้องใช้เพื่อให้ทำงานได้สำเร็จ

ตอนนี้เรามาดูผลลัพธ์กัน

9. การดูผลลัพธ์

คุณเพิ่งสร้างเอกสาร Google ใหม่ที่มีข้อความถอดเสียงจากไฟล์เสียงของคุณ ดังนั้นเรามาดูรายละเอียดกัน

เอกสารนี้สร้างขึ้นผ่านบัญชีที่ผู้ใช้ปลายทางให้สิทธิ์ การขยายการใช้งานอย่างหนึ่งที่เป็นไปได้คือ คุณสามารถแชร์เอกสารนี้กับผู้อื่นโดยอัตโนมัติโดยใช้ Drive API

เมื่อใช้ซอร์สโค้ดและไฟล์เสียงที่ให้มา คุณจะเห็นสิ่งต่อไปนี้

ee73fcdd1dbcdcff.png

10. ยินดีด้วย

ตอนนี้คุณก็ได้เรียนรู้วิธีสร้างเอกสารใน Google เอกสาร เรียก API การแปลงเสียงพูดเป็นข้อความ และเอาต์พุตข้อความถอดเสียงของไฟล์เสียงลงในเอกสารที่สร้างไว้แล้ว

สิ่งที่ปรับปรุงได้

ต่อไปนี้เป็นแนวคิดบางประการเกี่ยวกับวิธีสร้างการผสานรวมที่น่าสนใจยิ่งขึ้น

  • ตั้งค่าโค้ดให้ฟังเมื่อมีการเพิ่มไฟล์เสียงลงในไดรฟ์ที่เก็บข้อมูล Google Cloud Storage และเรียกใช้ Google Cloud Function เพื่อเรียกใช้โค้ดนี้
  • ลองแทรกข้อความลงใน Google เอกสารโดยไม่ว่างเปล่า

ดูข้อมูลเพิ่มเติม