1. ภาพรวม
ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีส่งไฟล์เสียงผ่าน Google Cloud Speech to Text API จากนั้นส่งเอาต์พุตของข้อความถอดเสียงไปยังเอกสารใน Google Speech to Text API ใช้งานง่าย และใช้เครือข่ายที่เป็นกลางที่มีประสิทธิภาพเพื่อช่วยให้นักพัฒนาซอฟต์แวร์แปลงเสียงเป็นข้อความได้ นอกจากนี้ ยังขับเคลื่อนโดยแมชชีนเลิร์นนิงด้วย
คุณจะใช้ Google Docs API เพื่อสร้างและเขียนเอกสารใหม่ คุณจะสร้างแอปพลิเคชันบรรทัดคำสั่ง Java และเรียกใช้โค้ดโดยใช้ระบบบิลด์ Gradle จากนั้นใช้ Docs API เพื่อดูผลลัพธ์
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ Google Cloud Speech-to-Text API
- วิธีใช้ Google เอกสาร API เพื่อสร้างเอกสารใหม่
- วิธีใช้ Docs API เพื่อเขียนลงในเอกสาร
สิ่งที่คุณต้องมี
- ติดตั้ง Java (เวอร์ชัน 7 ขึ้นไป)
- ติดตั้ง Gradle (เวอร์ชัน 5 ขึ้นไป)
- สิทธิ์เข้าถึงอินเทอร์เน็ตและเว็บเบราว์เซอร์
- บัญชี Google
- โปรเจ็กต์ Google Cloud Platform
2. สร้างโปรเจ็กต์
สร้างโปรเจ็กต์ที่อยู่ในระบบคลาวด์
- ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ Workspace คุณต้องสร้างบัญชี)
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย โปรดทำตามวิธีการในส่วน "การล้างข้อมูล" ซึ่งจะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
รับคีย์บัญชีบริการสำหรับ Cloud Speech-to-Text API

- ไปที่คอนโซล GCP แล้วค้นหาโปรเจ็กต์ใหม่
- สร้างบัญชีบริการ
- ดาวน์โหลดคีย์บัญชีบริการเป็น JSON
- ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS เป็นเส้นทางไฟล์ของไฟล์ JSON ที่มีคีย์บัญชีบริการ หากรีสตาร์ทเซสชันเชลล์ คุณจะต้องตั้งค่าตัวแปรอีกครั้ง
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
เช่น
$ export GOOGLE_APPLICATION_CREDENTIALS="/home/usr/downloads/ServiceAccount.json"
รับข้อมูลเข้าสู่ระบบสำหรับ Docs API
- กลับไปที่คอนโซล GCP แล้วไปที่ข้อมูลเข้าสู่ระบบ
- สร้างคีย์ OAuth 2.0 และดาวน์โหลดเป็น JSON
- เปลี่ยนชื่อไฟล์
credentials.jsonและตรวจสอบว่าไฟล์อยู่ในไดเรกทอรีsrc/main/resources/ของโค้ด
เปิดใช้ API

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

ตอนนี้คุณก็พร้อมที่จะเริ่มทำงานกับโค้ดแล้ว
3. ตั้งค่ารหัส
รับโค้ดตัวอย่าง
หากต้องการรับตัวอย่างโค้ด ให้ดาวน์โหลดไฟล์ ZIP ลงในคอมพิวเตอร์...
...หรือโคลนที่เก็บ GitHub จากบรรทัดคำสั่ง
$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git
คุณจะทำงานในไฟล์ CreateTranscript.java ภายในไดเรกทอรี start ไม่ควรแก้ไขไฟล์ Gradle
ในไดเรกทอรี ให้ไปที่โฟลเดอร์ start แล้วเปิดไฟล์ CreateTranscript.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 ซึ่งผู้ใช้ต้องให้ความยินยอมในการใช้แอป
เปลี่ยนชื่อตัวแปร
ตรวจสอบว่าได้ประกาศตัวแปรข้างต้นอย่างถูกต้องสำหรับโปรเจ็กต์แล้ว
- ตรวจสอบว่าได้ตั้งค่า AUDIO_FILENAME เป็นชื่อของไฟล์ตัวอย่างที่คุณส่งไปยัง Speech-to-Text API ในไฟล์ CreateTranscript.java คุณควรเห็นว่ามีการตั้งค่าอย่างถูกต้องแล้ว
- เปลี่ยนชื่อ 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 ของเอกสาร
จากนั้นคุณจะเริ่มต้นไคลเอ็นต์ Speech-to-Text
6. เรียกใช้ Speech-to-Text API
งานถัดไปที่คุณต้องการทำในโค้ดคือการขอรับข้อความถอดเสียงที่เขียนไว้สำหรับไฟล์เสียง ใน CreateTranscript.java ให้ค้นหาฟังก์ชัน getTranscript()
ก่อนอื่น ให้รับเส้นทางและไบต์เสียงของไฟล์เสียงโดยทำดังนี้
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();
การสร้างคำขอ
เมื่อส่งคำขอ BatchUpdate คุณจะต้องตั้งค่าข้อกำหนดที่สำคัญ 2 อย่าง ได้แก่ สิ่งที่ต้องการพิมพ์ (.setText()) และตำแหน่งในเอกสารที่ต้องการพิมพ์ (.setIndex(1))
ตอนนี้คุณได้แทรกข้อความถอดเสียงของไฟล์เสียงลงในเอกสารที่สร้างขึ้นแล้ว
8. การเรียกใช้โค้ด
ตอนนี้คุณมีโค้ดทั้งหมดที่จำเป็นในการนำไฟล์เสียง รับข้อความถอดเสียง และพิมพ์ข้อความถอดเสียงลงในเอกสารใน Google เอกสารที่สร้างขึ้นใหม่แล้ว มาเริ่มกันเลย
เนื่องจากคุณจะเรียกใช้โค้ด Java โดยใช้ระบบบิลด์ Gradle คุณจึงต้องบอกไฟล์ build.gradle ว่าจะบิลด์และเรียกใช้อะไร ในโปรเจ็กต์นี้และโปรเจ็กต์อื่นๆ ให้ตรวจสอบว่าคุณได้ตั้งค่า mainClassName ให้สอดคล้องกับคลาส Java ที่ต้องการเรียกใช้
เยี่ยมเลย ตอนนี้คุณพร้อมที่จะเรียกใช้โค้ดแล้ว โดยพิมพ์คำสั่งต่อไปนี้ในบรรทัดคำสั่ง
$ gradle run
การตรวจสอบสิทธิ์ผู้ใช้ปลายทาง
เมื่อเรียกใช้โค้ดนี้เป็นครั้งแรก คุณจะเห็น URL ที่พิมพ์ในเทอร์มินัล ซึ่งขอให้คุณเข้าสู่ระบบบัญชีบริการและให้สิทธิ์เข้าถึง Google เอกสารของบัญชี หลังจากอนุญาตการเข้าถึงแล้ว คุณจะเห็นไฟล์ใหม่ที่จัดเก็บไว้ในไดเรกทอรี
ในไดเรกทอรีการทำงาน คุณจะเห็นโฟลเดอร์ที่สร้างขึ้นใหม่ชื่อ tokens ซึ่งมีไฟล์ StoredCredential นี่คือโทเค็นการตรวจสอบสิทธิ์ที่คุณเพิ่งระบุ ซึ่งไคลเอ็นต์ของคุณขอจากเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของ Google แยกออกมาจากการตอบกลับ และจะส่งผ่านไปยัง API ที่คุณเรียกใช้
โซลูชัน
หากโค้ดไม่ทำงาน ให้ดูในไฟล์ CreateTranscript.java ภายในโฟลเดอร์ finish ไฟล์นี้มีโค้ดทั้งหมดของคุณตรงตามที่จำเป็นเพื่อให้ทำงานได้สำเร็จ
มาดูผลลัพธ์กัน
9. ดูผลลัพธ์
คุณเพิ่งสร้างเอกสาร Google ใหม่ที่มีข้อความถอดเสียงของไฟล์เสียง ดังนั้นเรามาดูเอกสารนั้นกัน
เอกสารนี้สร้างขึ้นผ่านบัญชีที่ผู้ใช้ปลายทางให้สิทธิ์ การขยายขอบเขตที่เป็นไปได้อย่างหนึ่งคือคุณสามารถแชร์เอกสารนี้กับผู้อื่นโดยอัตโนมัติได้โดยใช้ Drive API
คุณควรเห็นสิ่งต่อไปนี้เมื่อใช้ซอร์สโค้ดและไฟล์เสียงที่ให้ไว้

10. ยินดีด้วย
ตอนนี้คุณได้เรียนรู้วิธีสร้างเอกสารใน Google, โทรหา Speech-to-Text API และส่งเอาต์พุตข้อความถอดเสียงของไฟล์เสียงไปยังเอกสารที่สร้างขึ้นแล้ว
การปรับปรุงที่เป็นไปได้
ลองดูไอเดียบางส่วนเกี่ยวกับวิธีผสานรวมที่น่าสนใจยิ่งขึ้น
- ตั้งค่าโค้ดให้รอฟังเมื่อมีการเพิ่มไฟล์เสียงลงใน Bucket ของ Google Cloud Storage ในไดรฟ์ แล้วทริกเกอร์ Google Cloud Function เพื่อเรียกใช้โค้ดนี้
- ลองแทรกข้อความลงใน Google เอกสารที่มีเนื้อหา
ดูข้อมูลเพิ่มเติม
- อ่านเอกสารประกอบสำหรับนักพัฒนา Google Docs API
- โพสต์คำถามและค้นหาคำตอบใน Stack Overflow ภายใต้แท็ก google-docs-api