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. ตั้งค่าโปรเจ็กต์
สร้างโปรเจ็กต์ที่อยู่ในระบบคลาวด์
- ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ Workspace คุณต้องสร้างบัญชี)
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID
ในภายหลัง
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
รับคีย์บัญชีบริการสำหรับ Cloud Speech-to-Text API
- ไปที่คอนโซล GCP และค้นหาโปรเจ็กต์ใหม่
- สร้างบัญชีบริการ
- ดาวน์โหลดคีย์บัญชีบริการเป็น JSON
- ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS เป็นเส้นทางไฟล์ของไฟล์ JSON ที่มีคีย์บัญชีบริการของคุณ หากรีสตาร์ทเซสชัน Shell คุณจะต้องตั้งค่าตัวแปรอีกครั้ง
$ 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 และเปิดไฟล์ 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 ซึ่งผู้ใช้ต้องให้ความยินยอมในการใช้แอป
เปลี่ยนชื่อตัวแปร
ตรวจสอบว่าตัวแปรข้างต้นได้รับการประกาศอย่างถูกต้องสำหรับโปรเจ็กต์ของคุณ
- ตรวจสอบว่าได้ตั้งค่า 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 ของเอกสาร
จากนั้นจึงเริ่มต้นไคลเอ็นต์การแปลงเสียงพูดเป็นข้อความ
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
เมื่อใช้ซอร์สโค้ดและไฟล์เสียงที่ให้มา คุณจะเห็นสิ่งต่อไปนี้
10. ยินดีด้วย
ตอนนี้คุณก็ได้เรียนรู้วิธีสร้างเอกสารใน Google เอกสาร เรียก API การแปลงเสียงพูดเป็นข้อความ และเอาต์พุตข้อความถอดเสียงของไฟล์เสียงลงในเอกสารที่สร้างไว้แล้ว
สิ่งที่ปรับปรุงได้
ต่อไปนี้เป็นแนวคิดบางประการเกี่ยวกับวิธีสร้างการผสานรวมที่น่าสนใจยิ่งขึ้น
- ตั้งค่าโค้ดให้ฟังเมื่อมีการเพิ่มไฟล์เสียงลงในไดรฟ์ที่เก็บข้อมูล Google Cloud Storage และเรียกใช้ Google Cloud Function เพื่อเรียกใช้โค้ดนี้
- ลองแทรกข้อความลงใน Google เอกสารโดยไม่ว่างเปล่า
ดูข้อมูลเพิ่มเติม
- อ่านเอกสารสำหรับนักพัฒนาซอฟต์แวร์ Google เอกสาร API
- โพสต์คำถามและหาคำตอบบน Stack Overflow ใต้แท็ก google-docs-api