שימוש ב-Speech-to-Text API באמצעות Node.js

שימוש ב-Speech-to-Text API באמצעות Node.js

מידע על Codelab זה

subjectהעדכון האחרון: דצמ׳ 15, 2022
account_circleנכתב על ידי Anu Srivastava

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 ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, עליכם ליצור חשבון).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID.

  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.

מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.

הפעלת Cloud Shell

  1. במסוף Cloud, לוחצים על Activate Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RWzVad_4nCwUyfp1RWzVad_4nCwlZUDZ5LtFCZUHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RWzVad_4nCwZlZ5Lt.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים (בחלק הנגלל) שמתאר מהו. במקרה כזה, לוחצים על המשך (וזה לא יקרה שוב). כך נראה המסך החד-פעמי:

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

ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-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.‏ הפעלת Speech-to-Text API

כדי להתחיל להשתמש ב-Speech-to-Text API, צריך להפעיל את ה-API. כדי להפעיל את ה-API תוכלו להשתמש בפקודה הבאה ב-Cloud Shell:

gcloud services enable speech.googleapis.com

4.‏ אימות בקשות API

כדי לשלוח בקשות ל-Speech-to-Text API, צריך להשתמש בחשבון שירות. חשבון שירות שייך לפרויקט שלכם, ומשמש את ספריית Node.js של לקוח Google כדי לשלוח בקשות של 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, שבו נמצאת ספריית 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

קודם כול, יוצרים את הפרויקט שבו תשתמשו להרצת שיעור ה-Lab הזה של 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.‏ תמלול עם חותמות זמן של מילים

'המרת דיבור לטקסט' (STT) יכולה לזהות היסט זמן (חותמת זמן) של האודיו המתומלל. הפרשי זמן מייצגים את ההתחלה והסוף של כל מילה שנאמרת באודיו שסופק. ערך היסט זמן מייצג את משך הזמן שעבר מתחילת האודיו, במרווחים של 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 Console.
  • בוחרים את הפרויקט שרוצים להשבית ולוחצים על Delete (מחיקה). למעלה: מתזמנת את מחיקת הפרויקט.

מידע נוסף

רישיון

היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.