מידע על Codelab זה
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 ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, עליכם ליצור חשבון).
חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID
.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.
מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הפעלת Cloud Shell
אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
הפעלת Cloud Shell
- במסוף Cloud, לוחצים על Activate 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, צריך להשתמש בחשבון שירות. חשבון שירות שייך לפרויקט שלכם, ומשמש את ספריית 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"
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 (מחיקה). למעלה: מתזמנת את מחיקת הפרויקט.
מידע נוסף
- Google Cloud Speech-to-Text API: https://cloud.google.com/speech-to-text/docs
- Node.js ב-Google Cloud Platform: https://cloud.google.com/nodejs/
- לקוח Google Cloud Node.js: https://googlecloudplatform.github.io/google-cloud-node/
רישיון
היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.