שימוש ב-Speech-to-Text API עם Python

1. סקירה כללית

9e7124a578332 להבין.png

Speech-to-Text API מאפשר למפתחים להמיר אודיו לטקסט ביותר מ-125 שפות וריאנטים, באמצעות מודלים רבי עוצמה של רשתות נוירונים בממשק API קל לשימוש.

במדריך הזה תתמקדו בשימוש ב-Speech-to-Text API עם Python.

מה תלמדו

  • איך מגדירים את הסביבה
  • איך מתמללים קובצי אודיו באנגלית
  • איך לתמלל קובצי אודיו עם חותמות זמן של מילים
  • איך מתמללים קובצי אודיו בשפות שונות

מה צריך להכין

  • פרויקט ב-Google Cloud
  • דפדפן כמו Chrome או Firefox
  • היכרות עם Python

סקר

איך תשתמשו במדריך הזה?

לקריאה בלבד לקרוא אותו ולבצע את התרגילים

איזה דירוג מגיע לדעתך לחוויה שלך עם Python?

מתחילים בינונית בקיאים

איזה דירוג מגיע לחוויה שלך בשירותי Google Cloud?

מתחילים בינונית בקיאים

2. הגדרה ודרישות

הגדרת סביבה בקצב עצמאי

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן.
  • Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט שלכם (בדרך כלל מזוהה כ-PROJECT_ID). אם המזהה שנוצר לא מוצא חן בעיניכם, אתם יכולים ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלך ולראות אם הוא זמין. לא ניתן לשנות אותו אחרי השלב הזה, והוא נשאר למשך הפרויקט.
  • לידיעתך, יש ערך שלישי, Project Number, שבו משתמשים בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא יעלה הרבה כסף, אם בכלל. כדי להשבית משאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

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

הפעלת Cloud Shell

  1. במסוף Cloud, לוחצים על Activate Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

במכונה הווירטואלית הזו נמצאים כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. אם לא את כולן, ניתן לבצע חלק גדול מהעבודה ב-Codelab הזה באמצעות דפדפן.

אחרי ההתחברות ל-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`
  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהפקודה ב-gcloud יודעת על הפרויקט שלכם:
gcloud config list project

פלט הפקודה

[core]
project = <PROJECT_ID>

אם הוא לא משויך, תוכלו להגדיר אותו באמצעות הפקודה הבאה:

gcloud config set project <PROJECT_ID>

פלט הפקודה

Updated property [core/project].

3. הגדרת סביבה

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

gcloud services enable speech.googleapis.com

אתם אמורים לראות משהו כזה:

Operation "operations/..." finished successfully.

עכשיו אפשר להשתמש ב-Speech-to-Text API!

מנווטים לספריית הבית:

cd ~

יוצרים סביבה וירטואלית של Python כדי לבודד את יחסי התלות:

virtualenv venv-speech

מפעילים את הסביבה הווירטואלית:

source venv-speech/bin/activate

מתקינים את IPython ואת ספריית הלקוח Speech-to-Text API:

pip install ipython google-cloud-speech

אתם אמורים לראות משהו כזה:

...
Installing collected packages: ..., ipython, google-cloud-speech
Successfully installed ... google-cloud-speech-2.25.1 ...

עכשיו אפשר להשתמש בספריית הלקוח של Speech-to-Text API.

בשלבים הבאים תשתמשו במפענח אינטראקטיבי של Python בשם IPython, שהתקנתם בשלב הקודם. כדי להתחיל סשן מריצים את ipython ב-Cloud Shell:

ipython

אתם אמורים לראות משהו כזה:

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.18.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

עכשיו אפשר לשלוח את הבקשה הראשונה...

4. תמלול קובצי אודיו

בקטע הזה, תתמללו קובץ אודיו באנגלית.

מעתיקים את הקוד הבא לסשן IPython:

from google.cloud import speech


def speech_to_text(
    config: speech.RecognitionConfig,
    audio: speech.RecognitionAudio,
) -> speech.RecognizeResponse:
    client = speech.SpeechClient()

    # Synchronous speech recognition request
    response = client.recognize(config=config, audio=audio)

    return response


def print_response(response: speech.RecognizeResponse):
    for result in response.results:
        print_result(result)


def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    

כדאי להקדיש רגע כדי ללמוד את הקוד ולראות איך הוא משתמש בשיטת ספריית הלקוח של recognize כדי לתמלל קובץ אודיו*.* הפרמטר config מציין איך לעבד את הבקשה והפרמטר audio מציין את נתוני האודיו שיש לזהות.

שליחת בקשה:

config = speech.RecognitionConfig(
    language_code="en",
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

הפלט הבא אמור להתקבל:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    how old is the Brooklyn Bridge
confidence:    98%

מעדכנים את ההגדרה כדי להפעיל פיסוק אוטומטי ולשלוח בקשה חדשה:

config.enable_automatic_punctuation = True

response = speech_to_text(config, audio)
print_response(response)

הפלט הבא אמור להתקבל:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%

סיכום

בשלב הזה הצלחת לתמלל קובץ אודיו באנגלית באמצעות פרמטרים שונים ולהדפיס את התוצאה. מידע נוסף על תמלול קובצי אודיו

5. קבלת חותמות זמן של מילים

'המרת דיבור לטקסט' (STT) יכולה לזהות היסט זמן (חותמות זמן) של האודיו המתומלל. הפרשי זמן מייצגים את ההתחלה והסוף של כל מילה שנאמרת באודיו שסופק. ערך היסט זמן מייצג את משך הזמן שעבר מתחילת האודיו, במרווחים של 100 אלפיות שנייה.

כדי לתמלל קובץ אודיו עם חותמות זמן של מילים, מעדכנים את הקוד על ידי העתקת הפרטים הבאים לסשן IPython:

def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    print("-" * 80)
    for word in best_alternative.words:
        start_s = word.start_time.total_seconds()
        end_s = word.end_time.total_seconds()
        print(f"{start_s:>7.3f} | {end_s:>7.3f} | {word.word}")
        

כדאי להקדיש רגע כדי ללמוד את הקוד ולראות איך הוא מתמלל קובץ אודיו עם חותמות זמן של מילים*.* הפרמטר enable_word_time_offsets מורה ל-API להחזיר את הפרשי הזמן לכל מילה (פרטים נוספים זמינים במסמך).

שליחת בקשה:

config = speech.RecognitionConfig(
    language_code="en",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

הפלט הבא אמור להתקבל:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%
--------------------------------------------------------------------------------
  0.000 |   0.300 | How
  0.300 |   0.600 | old
  0.600 |   0.800 | is
  0.800 |   0.900 | the
  0.900 |   1.100 | Brooklyn
  1.100 |   1.400 | Bridge?

סיכום

בשלב הזה הצלחת לתמלל קובץ אודיו באנגלית עם חותמות זמן של מילים ולהדפיס את התוצאה. מידע נוסף על קבלת חותמות זמן של מילים

6. תמלול שפות שונות

Speech-to-Text API מזהה יותר מ-125 שפות וריאנטים! כאן אפשר למצוא רשימה של שפות נתמכות.

בקטע הזה, תתמללו קובץ אודיו בצרפתית.

כדי לתמלל את קובץ האודיו בצרפתית, מעדכנים את הקוד על ידי העתקת הקוד הבא לסשן IPython:

config = speech.RecognitionConfig(
    language_code="fr-FR",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/corbeau_renard.flac",
)

response = speech_to_text(config, audio)
print_response(response)

הפלט הבא אמור להתקבל:

--------------------------------------------------------------------------------
language_code: fr-fr
transcript:    Maître corbeau sur un arbre perché Tenait dans son bec un fromage maître Renard par l'odeur alléché lui tint à peu près ce langage et bonjour monsieur du corbeau.
confidence:    94%
--------------------------------------------------------------------------------
  0.000 |   0.700 | Maître
  0.700 |   1.100 | corbeau
  1.100 |   1.300 | sur
  1.300 |   1.600 | un
  1.600 |   1.700 | arbre
  1.700 |   2.000 | perché
  2.000 |   3.000 | Tenait
  3.000 |   3.000 | dans
  3.000 |   3.200 | son
  3.200 |   3.500 | bec
  3.500 |   3.700 | un
  3.700 |   3.800 | fromage
...
 10.800 |  11.800 | monsieur
 11.800 |  11.900 | du
 11.900 |  12.100 | corbeau.

סיכום

בשלב הזה הצלחת לתמלל קובץ אודיו בצרפתית ולהדפיס את התוצאה. למידע נוסף על השפות הנתמכות

7. מעולה!

9e7124a578332 להבין.png

למדתם איך להשתמש ב-Speech-to-Text API באמצעות Python כדי לבצע סוגים שונים של תמלול בקובצי אודיו.

הסרת המשאבים

כדי לנקות את סביבת הפיתוח, מבצעים את הפעולות הבאות ב-Cloud Shell:

  • אם אתם עדיין נמצאים בסשן של IPython, עליכם לחזור למעטפת: exit
  • מפסיקים להשתמש בסביבה הווירטואלית של Python: deactivate
  • מוחקים את התיקייה של הסביבה הווירטואלית: cd ~ ; rm -rf ./venv-speech

כדי למחוק את הפרויקט ב-Google Cloud, צריך לבצע מתוך Cloud Shell:

  • אחזור של מזהה הפרויקט הנוכחי: PROJECT_ID=$(gcloud config get-value core/project)
  • צריך לוודא שזה הפרויקט שרוצים למחוק: echo $PROJECT_ID
  • מוחקים את הפרויקט: gcloud projects delete $PROJECT_ID

מידע נוסף

רישיון

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