1. ภาพรวม
Google Cloud Speech-to-Text API ช่วยให้นักพัฒนาซอฟต์แวร์แปลงเสียงเป็นข้อความใน 120 ภาษาและภาษาต่างๆ ด้วยการนำโมเดลเครือข่ายที่เป็นกลางไปใช้กับ API ที่ใช้งานง่าย
ใน Codelab นี้ คุณจะมุ่งเน้นการใช้ Speech-to-Text API กับ Node.js คุณจะได้เรียนรู้วิธีส่งไฟล์เสียงในภาษาอังกฤษและภาษาอื่นๆ ไปยัง Cloud Speech-to-Text API เพื่อถอดเสียง
สิ่งที่คุณจะได้เรียนรู้
- วิธีเปิดใช้ Speech-to-Text API
- วิธีตรวจสอบสิทธิ์คำขอ API
- วิธีติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud สำหรับ Node.js
- วิธีถอดเสียงจากไฟล์เสียงเป็นภาษาอังกฤษ
- วิธีถอดเสียงจากไฟล์เสียงพร้อมการประทับเวลาของคำ
- วิธีถอดเสียงจากไฟล์เสียงในภาษาต่างๆ
สิ่งที่คุณต้องมี
- โปรเจ็กต์ Google Cloud Platform
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- คุ้นเคยกับการใช้ JavaScript/Node.js
แบบสำรวจ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Node.js เท่าใด
คุณจะให้คะแนนประสบการณ์การใช้บริการ Google Cloud Platform เท่าใด
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย โปรดทำตามวิธีการในส่วน "การล้างข้อมูล" ซึ่งจะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell
หากไม่เคยเริ่มใช้ Cloud Shell มาก่อน คุณจะเห็นหน้าจอระดับกลาง (ด้านล่าง) ที่อธิบายว่า Cloud Shell คืออะไร ในกรณีนี้ ให้คลิกต่อไป (และคุณจะไม่เห็นหน้าจอนี้อีก) หน้าจอแบบครั้งเดียวจะมีลักษณะดังนี้
การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน
เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานในโค้ดแล็บนี้ได้โดยใช้เพียงเบราว์เซอร์หรือ Chromebook
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณแล้ว
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
เอาต์พุตของคำสั่ง
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
เอาต์พุตของคำสั่ง
[core] project = <PROJECT_ID>
หากไม่ได้ตั้งค่าไว้ คุณตั้งค่าได้ด้วยคำสั่งนี้
gcloud config set project <PROJECT_ID>
เอาต์พุตของคำสั่ง
Updated property [core/project].
3. เปิดใช้ Speech-to-Text API
คุณต้องเปิดใช้ Speech-to-Text API ก่อนจึงจะเริ่มใช้งานได้ คุณเปิดใช้ API ได้โดยใช้คำสั่งต่อไปนี้ใน Cloud Shell
gcloud services enable speech.googleapis.com
4. ตรวจสอบสิทธิ์คำขอ API
หากต้องการส่งคำขอไปยัง Speech-to-Text API คุณต้องใช้บัญชีบริการ บัญชีบริการเป็นของโปรเจ็กต์ของคุณ และไลบรารีของไคลเอ็นต์ Google Node.js จะใช้บัญชีนี้เพื่อส่งคำขอ Speech-to-Text API บัญชีบริการจะแสดงด้วยอีเมลเช่นเดียวกับบัญชีผู้ใช้อื่นๆ ในส่วนนี้ คุณจะใช้ Cloud SDK เพื่อสร้างบัญชีบริการ จากนั้นสร้างข้อมูลเข้าสู่ระบบที่คุณจะต้องใช้เพื่อตรวจสอบสิทธิ์ในฐานะบัญชีบริการ
ก่อนอื่น ให้ตั้งค่าตัวแปรสภาพแวดล้อมด้วย PROJECT_ID ที่คุณจะใช้ตลอดทั้งโค้ดแล็บนี้ หากใช้ Cloud Shell ระบบจะตั้งค่าให้คุณ
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
จากนั้นสร้างบัญชีบริการใหม่เพื่อเข้าถึง Speech-to-Text API โดยใช้ข้อมูลต่อไปนี้
gcloud iam service-accounts create my-speech-to-text-sa \
--display-name "my speech-to-text codelab service account"
จากนั้นสร้างข้อมูลเข้าสู่ระบบที่โค้ด Node.js จะใช้เพื่อเข้าสู่ระบบในฐานะบัญชีบริการใหม่ สร้างข้อมูลเข้าสู่ระบบเหล่านี้และบันทึกเป็นไฟล์ JSON ~/key.json โดยใช้คำสั่งต่อไปนี้
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-speech-to-text-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
สุดท้าย ให้ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS ซึ่งใช้โดยไลบรารี Speech-to-Text API Node.js ที่จะกล่าวถึงในขั้นตอนถัดไป เพื่อค้นหาข้อมูลเข้าสู่ระบบ ควรตั้งค่าตัวแปรสภาพแวดล้อมเป็นเส้นทางแบบเต็มของไฟล์ JSON ข้อมูลเข้าสู่ระบบที่คุณสร้างขึ้นโดยใช้คำสั่งต่อไปนี้
export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"
ดูข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ Speech-to-Text API
5. ติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud Speech-to-Text API สำหรับ Node.js
ก่อนอื่น ให้สร้างโปรเจ็กต์ที่จะใช้เรียกใช้แล็บ Speech-to-Text API นี้ จากนั้นเริ่มต้นแพ็กเกจ Node.js ใหม่ในโฟลเดอร์ที่คุณเลือก
npm init
NPM จะถามคำถามหลายข้อเกี่ยวกับการกำหนดค่าโปรเจ็กต์ เช่น ชื่อและเวอร์ชัน สำหรับคำถามแต่ละข้อ ให้กด ENTER เพื่อยอมรับค่าเริ่มต้น จุดแรกเข้าเริ่มต้นคือไฟล์ชื่อ index.js
จากนั้นติดตั้งไลบรารี Google Cloud Speech ในโปรเจ็กต์โดยทำดังนี้
npm install --save @google-cloud/speech
ดูวิธีการเพิ่มเติมในการตั้งค่าการพัฒนา Node.js สำหรับ Google Cloud ได้ที่คู่มือการตั้งค่า
ตอนนี้คุณพร้อมใช้ Speech-to-Text API แล้ว
6. ถอดเสียงจากไฟล์เสียง
ในส่วนนี้ คุณจะถอดเสียงไฟล์เสียงที่บันทึกไว้ล่วงหน้าเป็นภาษาอังกฤษ ไฟล์เสียงพร้อมใช้งานใน Google Cloud Storage
ไปที่ไฟล์ index.js ภายใน แล้วแทนที่โค้ดด้วยโค้ดต่อไปนี้
// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
/**
* Calls the Speech-to-Text API on a demo audio file.
*/
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
uri: gcsUri,
};
const config = {
encoding: 'LINEAR16',
sampleRateHertz: 16000,
languageCode: 'en-US',
};
const request = {
audio: audio,
config: config,
};
// Detects speech in the audio file
const [response] = await client.recognize(request);
const transcription = response.results
.map(result => result.alternatives[0].transcript)
.join('\n');
console.log(`Transcription: ${transcription}`);
}
quickstart();
ใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูว่าโค้ดใช้เพื่อถอดเสียงไฟล์เสียง*.* ได้อย่างไร
พารามิเตอร์ Encoding จะบอก API ว่าคุณใช้การเข้ารหัสเสียงประเภทใดสำหรับไฟล์เสียง Flac คือประเภทการเข้ารหัสสำหรับไฟล์ .raw (ดูรายละเอียดเพิ่มเติมเกี่ยวกับประเภทการเข้ารหัสได้ในเอกสาร)
ในออบเจ็กต์ RecognitionAudio คุณสามารถส่ง API เป็น URI ของไฟล์เสียงใน Cloud Storage หรือเส้นทางไฟล์ในเครื่องสำหรับไฟล์เสียงก็ได้ ในที่นี้ เราใช้ URI ของ Cloud Storage
เรียกใช้โปรแกรม
node .
คุณควรเห็นเอาต์พุตต่อไปนี้
how old is the Brooklyn Bridge
7. ถอดเสียงพร้อมการประทับเวลาของคำ
การแปลงเสียงเป็นข้อความสามารถตรวจหาออฟเซ็ตเวลา (การประทับเวลา) สำหรับเสียงที่ถอดเสียงเป็นคำได้ ออฟเซ็ตเวลาจะแสดงจุดเริ่มต้นและจุดสิ้นสุดของคำที่พูดแต่ละคำในเสียงที่ระบุ ค่าออฟเซ็ตเวลาแสดงถึงระยะเวลาที่ผ่านไปตั้งแต่ต้นเสียง โดยเพิ่มขึ้นครั้งละ 100 มิลลิวินาที
ไปที่ไฟล์ index.js ภายใน แล้วแทนที่โค้ดด้วยโค้ดต่อไปนี้
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
/**
* Calls the Speech-to-Text API on a demo audio file.
*/
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
uri: gcsUri,
};
const config = {
encoding: 'LINEAR16',
sampleRateHertz: 16000,
languageCode: 'en-US',
enableWordTimeOffsets: true,
};
const request = {
audio: audio,
config: config,
};
// Detects speech in the audio file
const [response] = await client.recognize(request);
response.results.forEach((result) => {
result.alternatives.forEach((alternative) => {
console.log(`Transcript: ${alternative.transcript}`);
console.log(`Word details:`);
console.log(` Word count ${alternative.words.length}`);
alternative.words.forEach((item) => {
console.log(` ${item.word}`);
const s = parseInt(item.startTime.seconds) +
item.startTime.nanos/1000000000;
console.log(` WordStartTime: ${s}s`);
const e = parseInt(item.endTime.seconds) +
item.endTime.nanos/1000000000;
console.log(` WordEndTime: ${e}s`);
});
});
});
}
quickstart();
ใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูว่าโค้ดนี้ใช้เพื่อถอดเสียงไฟล์เสียงพร้อมการประทับเวลาของคำ*.* พารามิเตอร์ EnableWordTimeOffsets จะบอก API ให้เปิดใช้การชดเชยเวลา (ดูรายละเอียดเพิ่มเติมได้ในเอกสาร)
เรียกใช้โปรแกรมอีกครั้ง
node .
คุณควรเห็นเอาต์พุตต่อไปนี้
Transcript: how old is the Brooklyn Bridge
Word details:
Word count 6
how
WordStartTime: 0s
WordEndTime: 0.3s
old
WordStartTime: 0.3s
WordEndTime: 0.6s
is
WordStartTime: 0.6s
WordEndTime: 0.8s
the
WordStartTime: 0.8s
WordEndTime: 0.9s
Brooklyn
WordStartTime: 0.9s
WordEndTime: 1.1s
Bridge
WordStartTime: 1.1s
WordEndTime: 1.4s
8. ถอดเสียงภาษาต่างๆ
Speech-to-Text API รองรับการถอดเสียงเป็นคำในกว่า 100 ภาษา ดูรายการภาษาที่รองรับได้ที่นี่
ในส่วนนี้ คุณจะถอดเสียงไฟล์เสียงที่บันทึกไว้ล่วงหน้าเป็นภาษาฝรั่งเศส ไฟล์เสียงพร้อมใช้งานใน Google Cloud Storage
ไปที่ไฟล์ index.js ภายใน แล้วแทนที่โค้ดด้วยโค้ดต่อไปนี้
// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
/**
* Calls the Speech-to-Text API on a demo audio file.
*/
async function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
const gcsUri = 'gs://cloud-samples-data/speech/corbeau_renard.flac';
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
uri: gcsUri,
};
const config = {
encoding: 'FLAC',
languageCode: 'fr-FR',
};
const request = {
audio: audio,
config: config,
};
// Detects speech in the audio file
const [response] = await client.recognize(request);
const transcription = response.results
.map((result) => result.alternatives[0].transcript)
.join('\n');
console.log(`Transcription: ${transcription}`);
}
quickstart();
เรียกใช้โปรแกรมอีกครั้ง แล้วคุณควรจะเห็นเอาต์พุตต่อไปนี้
maître corbeau sur un arbre perché tenait en son bec un fromage
นี่คือประโยคจากนิทานเด็กฝรั่งเศสยอดนิยม
ดูรายการภาษาที่รองรับและรหัสภาษาทั้งหมดได้ในเอกสารประกอบที่นี่
9. ยินดีด้วย
คุณได้เรียนรู้วิธีใช้ Speech-to-Text API โดยใช้ Node.js เพื่อถอดเสียงประเภทต่างๆ ในไฟล์เสียงแล้ว
ล้างข้อมูล
เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud Platform สำหรับทรัพยากรที่ใช้ในการเริ่มต้นอย่างรวดเร็วนี้ ควรทำดังนี้
- ไปที่คอนโซล Cloud Platform
- เลือกโปรเจ็กต์ที่ต้องการปิด แล้วคลิก "ลบ" ที่ด้านบน ซึ่งจะเป็นการกำหนดเวลาให้ลบโปรเจ็กต์
ดูข้อมูลเพิ่มเติม
- Google Cloud Speech-to-Text API: https://cloud.google.com/speech-to-text/docs
- Node.js ใน Google Cloud Platform: https://cloud.google.com/nodejs/
- ไคลเอ็นต์ Node.js ของ Google Cloud: https://googlecloudplatform.github.io/google-cloud-node/
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป