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

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

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ ธ.ค. 15, 2022
account_circleเขียนโดย Anu Srivastava

1 ภาพรวม

Google Cloud Speech-to-Text API ช่วยให้นักพัฒนาซอฟต์แวร์แปลงเสียงเป็นข้อความใน 120 ภาษาและตัวแปร โดยใช้โมเดลโครงข่ายระบบประสาทเทียมอันทรงพลังใน API ที่ใช้งานง่าย

ใน Codelab นี้ คุณจะมุ่งเน้นที่การใช้ 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 ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID ในภายหลัง

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

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

เริ่มต้น Cloud Shell

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

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

  1. คลิกเปิดใช้งาน Cloud Shell กริ๊งๆๆๆ จาก Cloud Console

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

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

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

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

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์หรือ 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 เปิดใช้ API การแปลงเสียงพูดเป็นข้อความ

คุณต้องเปิดใช้ API ก่อนจึงจะเริ่มใช้ Speech-to-Text API ได้ คุณเปิดใช้ API ได้โดยใช้คำสั่งต่อไปนี้ใน Cloud Shell

gcloud services enable speech.googleapis.com

4 ตรวจสอบสิทธิ์คำขอ API

คุณต้องใช้บัญชีบริการเพื่อส่งคำขอไปยัง Speech-to-Text API บัญชีบริการเป็นของโปรเจ็กต์และไลบรารีของ Google Client Node.js จะใช้บัญชีนี้เพื่อสร้างคำขอ Speech-to-Text API บัญชีบริการจะแสดงด้วยอีเมลเช่นเดียวกับบัญชีผู้ใช้อื่นๆ ในส่วนนี้ คุณจะใช้ Cloud SDK เพื่อสร้างบัญชีบริการ จากนั้นจึงสร้างข้อมูลเข้าสู่ระบบที่จะใช้ตรวจสอบสิทธิ์ว่าเป็นบัญชีบริการ

ก่อนอื่นให้ตั้งค่าตัวแปรสภาพแวดล้อมด้วย PROJECT_ID ซึ่งคุณจะใช้ตลอดทั้ง Codelab หากใช้ 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 ซึ่งใช้โดยไลบรารี Node.js ของ Speech-to-Text API ซึ่งจะกล่าวถึงในขั้นตอนถัดไป เพื่อค้นหาข้อมูลเข้าสู่ระบบ ควรตั้งค่าตัวแปรสภาพแวดล้อมเป็นเส้นทางแบบเต็มของไฟล์ JSON ของข้อมูลเข้าสู่ระบบที่คุณสร้างขึ้น โดยใช้สิ่งต่อไปนี้

export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"

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

5 ติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud Speech-to-Text API สำหรับ Node.js

ก่อนอื่นให้สร้างโปรเจ็กต์ที่คุณจะใช้ห้องทดลอง 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
();

โปรดใช้เวลาสัก 1-2 นาทีศึกษาโค้ดและดูว่ามีการใช้โค้ดเพื่อถอดเสียงไฟล์เสียง**

พารามิเตอร์ 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
();

ใช้เวลาสัก 1-2 นาทีศึกษาโค้ดและดูว่ามีการใช้โค้ดเพื่อถอดเสียงไฟล์เสียงที่มีการประทับเวลาของคำ** พารามิเตอร์ 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 ยินดีด้วย

คุณได้เรียนรู้วิธีใช้ API การแปลงเสียงพูดเป็นข้อความโดยใช้ Node.js เพื่อถอดเสียงเป็นคำในไฟล์เสียงแบบต่างๆ แล้ว

ล้างข้อมูล

เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud Platform สำหรับทรัพยากรที่ใช้ในการเริ่มต้นอย่างรวดเร็วนี้ ควรทำดังนี้

  • ไปที่คอนโซล Cloud Platform
  • เลือกโครงการที่คุณต้องการปิดการทำงาน แล้วคลิก "ลบ" ที่ด้านบน: การดำเนินการนี้จะกำหนดเวลาการลบโปรเจ็กต์

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0