ליצור תמליל של הפגישות העסקיות באמצעות Google Docs & למידת מכונה

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

ב-Codelab הזה תלמדו איך לשלוח קובץ אודיו באמצעות Google Cloud Speech to Text API, ואז ליצור פלט של התמליל למסמך Google. קל להשתמש ב-Speech to Text API ומיישמת רשתות נוירונים עוצמתיות כדי לאפשר למפתחים להפוך אודיו לטקסט! בנוסף, הוא מבוסס על למידת מכונה.

אתם יכולים להשתמש ב-Google Docs API כדי ליצור מסמך חדש ולכתוב בו. אתם יוצרים אפליקציית שורת פקודה של Java ומריצים את הקוד באמצעות מערכת gradle, ולאחר מכן משתמשים ב-Docs API כדי להציג את התוצאות.

מה תלמדו

  • איך משתמשים ב-Google Cloud Speech to Text API
  • איך משתמשים ב-Google Docs API כדי ליצור מסמך חדש
  • איך משתמשים ב-Docs API כדי לכתוב במסמך

למה תזדקק?

  • התקנת Java (גרסה 7 ומעלה)
  • Gradle הותקנה (גרסה 5 ומעלה)
  • גישה לאינטרנט ולדפדפן אינטרנט
  • חשבון Google
  • פרויקט ב-Google Cloud Platform

2. הגדרת הפרויקט

יצירת פרויקט בענן

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

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 Speech-to-Text API

60f112dedc208681.png

  1. עוברים אל מסוף GCP ומוצאים את הפרויקט החדש.
  2. יצירה של חשבון שירות
  3. הורדת מפתח של חשבון שירות כקובץ JSON
  4. מגדירים את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS לנתיב הקובץ של קובץ ה-JSON שמכיל את המפתח של חשבון השירות. אם תפעילו מחדש את סשן המעטפת, תצטרכו להגדיר שוב את המשתנה.
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

לדוגמה:

$ export GOOGLE_APPLICATION_CREDENTIALS="/home/usr/downloads/ServiceAccount.json"

קבלת פרטי כניסה ל-Docs API

  1. במסוף GCP, עוברים אל Credentials
  2. יצירת מפתח OAuth 2.0 והורדה שלו כ-JSON
  3. כדאי לשנות את שם הקובץ credentials.json ולוודא שהוא נמצא בספריית src/main/resources/ של הקוד

הפעלת ממשקי API

3066cf79c136a078.png

  1. בוחרים בכרטיסייה מרכז בקרה, לוחצים על הלחצן Enable APIs and services ומפעילים את שני ממשקי ה-API הבאים:
  2. המרת דיבור לטקסט (STT)
  3. Google Docs

846ba54aa7e1e584.png

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

3. הגדרת הקוד

לקבלת הקוד לדוגמה

כדי לקבל את הקוד לדוגמה, מורידים את קובץ ה-ZIP למחשב...

...או משכפלים את המאגר של GitHub משורת הפקודה.

$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git

העבודה תתבצע בקובץ CreateTranscript.java שבתוך ספריית start. אין לשנות את קובצי ה-Gradle.

בספרייה, עוברים לתיקייה start ופותחים את הקובץ Create ההתראות.java. גוללים למטה למקום שבו מופיעה ההצהרה לגבי הכיתה CreateTranscript.

public class CreateTranscript {
  private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
  
  // Specify audio file name below.
  private static final String AUDIO_FILENAME = "audioFile.wav";
  private static final String TOKENS_DIRECTORY_PATH = "tokens";
  private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
  private static final String APPLICATION_NAME = "CreateTranscript";
  private static final List<String> SCOPES = Collections.singletonList(DocsScopes.DOCUMENTS);

עבור המשתנה SCOPES ציינת שהקוד יוכל להציג ולנהל את מסמכי Google Docs של המשתמש שלך. אם הקוד מחייב הרשאה מעבר לגישה הזו או שונה ממנה, חשוב לשנות את המשתנה הזה בהתאם בהתאם להיקפי ההרשאות של Google API ב-OAuth 2.0.

למשל, אם לא כתבתם במסמך Google Docs, אפשר לשנות את ההיקף ל-DOCUMENTS_READONLY. המשתנה SCOPES נדרש לא רק כדי שלאפליקציה יהיו הרשאות גישה מתאימות, אלא גם כדי לשמור על שקיפות מול המשתמשים. למשתמש מוצגים היקפי ההרשאות הספציפיים שביקשתם בדף האימות של OAuth, שבו הוא צריך להביע הסכמה לשימוש באפליקציה.

שינוי שמות של משתנים

חשוב לוודא שהמשתנים שלמעלה מוצהרים בצורה נכונה בפרויקט שלכם.

  1. מוודאים ש-AUDIO_FILENAME מוגדר לשם קובץ ההדגמה שנשלח אל Speech to Text API. אתם אמורים לראות שכבר מוגדר כראוי בקובץ CreateTranscript.java בקובץ.
  2. משנים את השם של CREDENTIALS_FILE_PATH לשם של קובץ פרטי הכניסה שהורדתם (צריך להיות בפורמט '/credentials.json''). חשוב לוודא שהקובץ נמצא בספריית src/main/resources של התיקייה, אז חשוב ליצור את הספרייה הזו אם השכפול של GitHub לא עושה זאת.

עכשיו אפשר להתחיל להריץ את הקוד!

4. אתחול לקוח Docs

בקובץ CreateTranscript.java, מוצאים את הצהרת השיטה הראשית ובודקים את התוכן שבתוכו:

final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Docs service = new Docs.Builder(HTTP_TRANSPORT, JSON_FACTORY,
    getCredentials(HTTP_TRANSPORT))
          .setApplicationName(APPLICATION_NAME)
          .build();

הרשאת פונקציה

המשימה הראשונה שמבצעים כאן היא יצירת Docs service (משתנה). השירות מייצג לקוח API מורשה, שמחזיק את פרטי הכניסה שלכם, ובמקרה הזה, את אימות משתמש הקצה שלכם.

בקוד שלכם, כל פונקציה שמבצעת קריאה ל-Docs API תצטרך להשתמש במשתנה service זה כדי לבצע משימות הקשורות ל-Docs.

5. יצירת מסמך ב-Google Docs

ייווצר מסמך חדש של Google עם כותרת מוגדרת. נעתיק את הקוד שלמטה מהפונקציה createDocument.

Document doc = new Document().setTitle("Transcript for " +
    AUDIO_FILENAME);
doc = service.documents().create(doc).execute();
String documentId = doc.getDocumentId();
return documentId;

הפונקציה הזו מחזירה את מזהה הקובץ ב-Drive של מסמך Google Docs. המזהה מופיע בכתובת ה-URL של המסמך.

בשלב הבא מפעילים את הלקוח 'המרת דיבור לטקסט'.

6. הפעלת ה-API של המרת דיבור לטקסט (STT)

המשימה הבאה שאתם רוצים לבצע בקוד היא השגת התמליל של קובץ האודיו. בתוך CreateTranscript.java, מחפשים את הפונקציה getTranscript().

תחילה, משיגים את הנתיב ואת הבייטים של קובץ האודיו:

SpeechClient speech = SpeechClient.create();
Path path = Paths.get(AUDIO_FILENAME);
byte[] data = Files.readAllBytes(path);
ByteString audioBytes = ByteString.copyFrom(data);

הגדרת זיהוי דיבור

בשלב הבא צריך לאתחל בצורה נכונה את המשתנה RecognitionConfig.

כאן, config מספק מידע לגבי האופן שבו מזהה הדיבור אמור לעבד את הבקשה שלך. צריך לערוך את setLanguageCode() אם, למשל, קובץ האודיו הוא בשפה שאינה אנגלית, ולשנות את הערך setSampleRateHertz() אם קצב הדגימה של קובץ האודיו שונה בהרץ (1600 הוא אופטימלי).

RecognitionConfig config =
    RecognitionConfig.newBuilder()
        .setEncoding(AudioEncoding.LINEAR16)
        .setLanguageCode("en-US")
        .setSampleRateHertz(8000)
        .build();
RecognitionAudio audio =
    RecognitionAudio.newBuilder().setContent(audioBytes).build();
RecognizeResponse response = speech.recognize(config, audio);
List<SpeechRecognitionResult> results = response.getResultsList();

הכנת הטקסט

לסיום, מטפלים במשתנה result של התמליל של קובץ האודיו ומכינים אותו להוספה למסמך.

כל פריט בתוצאות הוא תמליל מסוג SpeechRecognitionAlternatives. לכן, כל פריט מכיל שני חלקים: תמליל טקסט וציון הסמך המתאים של ה-API.

List<Request> requests = new ArrayList<>();
for (SpeechRecognitionResult result : results) {
     // Using the first + most likely alternative transcript
     SpeechRecognitionAlternative alternative =
         result.getAlternativesList().get(0);
     String toInsert = alternative.getTranscript();

     // Add requests array list to return.
     requests.add(
         new Request()
             .setInsertText(
                 new InsertTextRequest()
                     .setText(toInsert)
                     .setEndOfSegmentLocation(new
     EndOfSegmentLocation().setSegmentId(""))));
}
return requests;

7. הוספת טקסט למסמך

עכשיו מוסיפים את הטקסט של התמליל למסמך ב-Google Docs. כדי לבצע שינויים במסמך, צריך להשתמש בשיטה BatchUpdate. BatchUpdate הוא מאגר לסוגים שונים של בקשות כתיבה, וכאן משתמשים ב-InsertTextRequest.

EndOfSegmentLocation הוא פרמטר חשוב שמציין את המיקום במסמך Google Docs שבו תרצו להדפיס את הטקסט. בקוד המקור מוסיפים טקסט לגוף המסמך.

עכשיו נכניס את הקוד הבא לפונקציה כדי לראות איך התוצאות של Speech-to-Text API, בשילוב עם קריאות ל-Docs API, יכולות לאפשר לנו להוסיף תמליל של קובץ אודיו במסמך Google Docs:

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
    body.setRequests(insertRequests)).execute();

יצירת הבקשה

בעת שליחת בקשת BatchUpdate, הגדרת שני מפרטים חשובים מאוד: מה ברצונך להדפיס (.setText()), ואיפה במסמך ברצונך לעשות זאת (.setIndex(1)).

עכשיו הוספת את התמליל של קובץ האודיו למסמך שיצרת.

8. הרצת הקוד

עכשיו, אחרי שיש לכם את כל הקוד הנדרש כדי לקחת קובץ אודיו, לקבל את התמליל שלו ולהדפיס אותו במסמך חדש ב-Google Docs, נסתכל על התוכנית הזאת בנסיעות!

מאחר שאתם מריצים את הקוד של Java באמצעות מערכת build של gradle, עליכם לומר לקובץ build.gradle מה בדיוק צריך לבנות ולהפעיל. בפרויקט הזה ובפרויקטים אחרים, צריך להקפיד שה-mainClassName יהיה תואם למחלקה של Java שאתם רוצים להריץ.

נהדר! עכשיו אתם מוכנים להרצת הקוד. כדי לעשות זאת, מקלידים את הטקסט הבא בשורת הפקודה:

$ gradle run

אימות משתמש קצה

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

בתוך ספריית העבודה תופיע תיקייה חדשה שנוצרה בשם tokens (אסימונים) ובה הקובץ StoredCredential. זהו אסימון האימות שסיפקת עכשיו, שהלקוח שלך ביקש משרת Google Auth. הוא נשלף מהתשובה שלו, ועכשיו הוא ישלח אותו לכל API שאליו תישלח קריאה.

פתרון

אם הקוד לא עובד, בודקים את הקובץ CreateTranscript.java בתיקייה CreateTranscript.java. קובץ זה מכיל את כל הקוד שלך בדיוק כפי שהוא צריך כדי לפעול בהצלחה.

עכשיו נסתכל על התוצאה.

9. הצגת התוצאות

יצרת עכשיו מסמך חדש ב-Google Docs שמכיל את התמליל של קובץ האודיו, אז כדאי לבדוק אותו.

מסמך זה נוצר באמצעות החשבון שאיתו משתמש הקצה העניק הרשאה. אפשרות אחת להרחבה היא שניתן לשתף את המסמך הזה באופן אוטומטי עם אחרים באמצעות Drive API.

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

ee73fcdd1dbcdcff.png

10. מעולה!

עכשיו למדתם איך ליצור מסמך Google Docs, לבצע קריאה ל-Speech-to-Text API ופלט את התמליל של קובץ האודיו למסמך שיצרתם.

שיפורים אפשריים

הנה כמה רעיונות ליצירת שילוב מושך יותר:

  • מגדירים את הקוד להאזנה כשמוסיפים קובץ אודיו ל-Drive בקטגוריה של Google Cloud Storage, ומריצים פונקציה של Google Cloud Functions כדי להריץ את הקוד הזה
  • להתנסות בהוספה של טקסט למסמך Google Docs שאינו ריק

מידע נוסף