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

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. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

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

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

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

เปิดใช้งาน Cloud Shell

  1. จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

หากไม่เคยเริ่มใช้ Cloud Shell มาก่อน คุณจะเห็นหน้าจอระดับกลาง (ด้านล่าง) ที่อธิบายว่า Cloud Shell คืออะไร ในกรณีนี้ ให้คลิกต่อไป (และคุณจะไม่เห็นหน้าจอนี้อีก) หน้าจอแบบครั้งเดียวจะมีลักษณะดังนี้

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

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

เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณแล้ว

  1. เรียกใช้คำสั่งต่อไปนี้ใน 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
  • เลือกโปรเจ็กต์ที่ต้องการปิด แล้วคลิก "ลบ" ที่ด้านบน ซึ่งจะเป็นการกำหนดเวลาให้ลบโปรเจ็กต์

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป