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
- איך מתמללים קובצי אודיו באנגלית
- איך מתמללים קובצי אודיו עם חותמות זמן של מילים
- איך מתמללים קובצי אודיו בשפות שונות
מה תצטרכו
סקר
איך תשתמשו במדריך הזה?
איך היית מדרג את חוויית השימוש שלך ב-Node.js?
איזה דירוג מגיע לדעתך לחוויית השימוש שלך בשירותים של Google Cloud Platform?
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, אתם צריכים ליצור חשבון).
חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה נתייחס אליו כאל PROJECT_ID.
- לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' כדי להשבית את המשאבים, וכך לא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
הפעלת Cloud Shell
- ב-Cloud Console, לוחצים על Activate Cloud Shell
.
אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים (בחלק הנגלל) עם תיאור של Cloud Shell. במקרה כזה, לוחצים על המשך (והמסך הזה לא יוצג לכם יותר). כך נראה המסך החד-פעמי:
הקצאת המשאבים והחיבור ל-Cloud Shell נמשכים רק כמה רגעים.
המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את רוב העבודה ב-codelab הזה, אם לא את כולה, באמצעות דפדפן או 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. כדי להפעיל את ה-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, שבו תשתמשו לאורך כל ה-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"
מידע נוסף על אימות של 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. תמלול עם חותמות זמן של מילים
התכונה 'דיבור לטקסט' יכולה לזהות את ההפרש בזמן (חותמת זמן) של האודיו המתומלל. ההיסטים של הזמן מראים את ההתחלה והסוף של כל מילה מדוברת באודיו שסופק. ערך ההיסט של הזמן מייצג את משך הזמן שחלף מתחילת האודיו, במרווחים של 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.
- בוחרים את הפרויקט שרוצים לסגור ולוחצים על 'מחיקה' בחלק העליון. הפעולה הזו מתזמנת את הפרויקט למחיקה.
מידע נוסף
- 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 שמותנה בייחוס 2.0 כללי.