במאמר הזה מוסבר איך משתמשים ב-Cloud Speech-to-Text. במדריך הזה מוסבר על סוגי הבקשות שאפשר לשלוח ל-Cloud STT, איך ליצור את הבקשות האלה ואיך לטפל בתשובות שמתקבלות. מומלץ שכל המשתמשים ב-Cloud STT יקראו את המדריך הזה ואחד מהמדריכים שקשורים אליו לפני שיעברו ל-API עצמו.
נסו בעצמכם
אנחנו ממליצים למשתמשים חדשים ב-Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של Cloud STT בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300 $להרצה, לבדיקה ולפריסה של עומסי העבודה.
להתנסות ב-Cloud STT בחינםבקשות לדיבור
ל-Cloud STT יש שלוש שיטות עיקריות לביצוע זיהוי דיבור:
זיהוי סינכרוני (REST ו-gRPC) שולח נתוני אודיו אל Cloud Speech-to-Text API, מבצע זיהוי של הנתונים ומחזיר תוצאות אחרי שכל האודיו עבר עיבוד. בקשות סינכרוניות לזיהוי מוגבלות לנתוני אודיו באורך של דקה אחת או פחות.
זיהוי אסינכרוני (REST ו-gRPC) שולח נתוני אודיו ל-Cloud Speech-to-Text API ומתחיל פעולה ממושכת. באמצעות הפעולה הזו, אפשר לבצע דגימה תקופתית של תוצאות הזיהוי. אפשר להשתמש בבקשות לא סנכרוניות לנתוני אודיו בכל משך זמן של עד 480 דקות.
Streaming Recognition (רק ב-gRPC) מבצע זיהוי של נתוני אודיו שסופקו בזרם דו-כיווני של gRPC. בקשות סטרימינג מיועדות למטרות זיהוי בזמן אמת, כמו הקלטת אודיו חי ממיקרופון. זיהוי בסטרימינג מספק תוצאות ביניים בזמן שהאודיו נלכד, וכך מאפשר לתוצאה להופיע, למשל, בזמן שמשתמש עדיין מדבר.
הבקשות מכילות פרמטרים של הגדרות וגם נתוני אודיו. בקטעים הבאים מוסבר בפירוט על סוגי הבקשות האלה לזיהוי, על התגובות שהן יוצרות ועל אופן הטיפול בתגובות האלה.
זיהוי באמצעות Cloud Speech-to-Text API
בקשת זיהוי סינכרונית של Cloud Speech-to-Text API היא השיטה הכי פשוטה לזיהוי נתוני אודיו של דיבור. שירות Cloud STT יכול לעבד עד דקה של נתוני אודיו של דיבור שנשלחים בבקשה סינכרונית. אחרי ש-Cloud STT מעבד ומזהה את כל האודיו, הוא מחזיר תגובה.
בקשה סנכרונית חוסמת, כלומר Cloud STT חייב להחזיר תשובה לפני עיבוד הבקשה הבאה. בדרך כלל, Cloud STT מעבד אודיו מהר יותר מזמן אמת. העיבוד של 30 שניות של אודיו נמשך בממוצע 15 שניות. במקרים של איכות אודיו נמוכה, בקשת הזיהוי עשויה להימשך הרבה יותר זמן.
בקשות סנכרוניות לזיהוי דיבור
בקשת API סינכרונית ל-Cloud Speech-to-Text מורכבת מהגדרת זיהוי דיבור ומנתוני אודיו. לדוגמה:
{ "config": { "encoding": "LINEAR16", "sampleRateHertz": 16000, "languageCode": "en-US", }, "audio": { "uri": "gs://bucket-name/path_to_audio_file" } }
כל הבקשות הסינכרוניות לזיהוי דיבור ב-Cloud Speech-to-Text API חייבות לכלול שדה של זיהוי דיבור config (מהסוג RecognitionConfig). RecognitionConfig כולל את שדות המשנה הבאים:
-
encoding: חובה. מציינת את סכמת הקידוד של האודיו שסופק (מהסוגAudioEncoding). אם יש לכם אפשרות לבחור קודק, מומלץ לבחור קידוד ללא אובדן מידע כמו FLAC אוLINEAR16כדי לקבל את הביצועים הכי טובים. (מידע נוסף זמין במאמר בנושא קידודים של אודיו). השדהencodingהוא אופציונלי לקובצי FLAC ו-WAV שבהם הקידוד כלול בכותרת הקובץ. -
sampleRateHertz: חובה. מציינת את קצב הדגימה (בהרץ) של האודיו שסופק. (מידע נוסף על קצב דגימה זמין בקטע קצב דגימה שבהמשך). השדהsampleRateHertzהוא אופציונלי לקובצי FLAC ו-WAV שבהם קצב הדגימה כלול בכותרת הקובץ. -
languageCode: חובה. מכיל את השפה בתוספת האזור או הלוקאל שבהם רוצים להשתמש לזיהוי דיבור של האודיו שסופק. קוד השפה צריך להיות מזהה BCP-47. שימו לב שקודי שפה כוללים בדרך כלל תגי שפה ראשיים ותגי אזור משניים כדי לציין ניבים (לדוגמה, 'en' לאנגלית ו-'US' לארצות הברית בדוגמה הקודמת). (רשימת השפות הנתמכות מופיעה במאמר שפות נתמכות). -
maxAlternatives: אופציונלי, ברירת המחדל היא1. מציין את מספר התמלילים החלופיים שיופיעו בתשובה. כברירת מחדל, Cloud Speech-to-Text API מספק תמלול ראשי אחד. אם רוצים להעריך חלופות שונות, צריך להגדיר ערך גבוה יותר ל-maxAlternatives. שימו לב: Cloud STT יחזיר חלופות רק אם המערכת לזיהוי דיבור תקבע שהחלופות הן באיכות מספקת. באופן כללי, חלופות מתאימות יותר לבקשות בזמן אמת שדורשות משוב מהמשתמש (לדוגמה, פקודות קוליות), ולכן הן מתאימות יותר לבקשות לזיהוי דיבור בסטרימינג. -
profanityFilter: אופציונלי. מציין אם לסנן מילים או ביטויים גסים. המילים שסוננו יכילו את האות הראשונה שלהן וכוכביות במקום שאר התווים (לדוגמה: f***). מסנן השפה הגסה פועל על מילים בודדות, והוא לא מזהה שפה פוגעת או מעליבה שהיא ביטוי או שילוב של מילים. -
speechContext: אופציונלי. מכיל מידע נוסף על ההקשר לעיבוד האודיו. הקשר מכיל את שדות המשנה הבאים:-
boost: מכיל ערך שמשמש להקצאת משקל לזיהוי של מילה או ביטוי מסוימים. -
phrases: מכיל רשימה של מילים וביטויים שנותנים רמזים למשימת זיהוי הדיבור. מידע נוסף זמין במאמר בנושא התאמת דיבור.
-
האודיו מסופק ל-Cloud STT דרך הפרמטר audio מסוג RecognitionAudio. השדה audio מכיל אחד משדות המשנה הבאים:
- השדה
contentמכיל את האודיו שצריך להעריך, שמוטמע בבקשה. מידע נוסף זמין במאמר בנושא הטמעת תוכן אודיו. משך הזמן של אודיו שמועבר ישירות בשדה הזה מוגבל לדקה אחת. -
uriמכיל URI שמפנה לתוכן האודיו. הקובץ לא יכול להיות דחוס (למשל, gzip). השדה הזה חייב להכיל URI של Cloud Storage (בפורמטgs://bucket-name/path_to_audio_file). מידע נוסף זמין במאמר בנושא העברת הפניה לאודיו באמצעות URI.
תדירויות דגימה
אתם מציינים את קצב הדגימה של האודיו בשדה sampleRateHertz של הגדרת הבקשה, והוא צריך להיות זהה לקצב הדגימה של תוכן האודיו או השידור המשויכים. יש תמיכה בתדירויות דגימה בין 8,000 הרץ ל-48,000 הרץ ב-Cloud STT. אפשר לציין את קצב הדגימה של קובץ FLAC או WAV בכותרת הקובץ במקום להשתמש בשדה sampleRateHertz.
כדי לשלוח קובץ FLAC אל Speech-to-Text API, הוא צריך להכיל את קצב הדגימה בכותרת FLAC.
אם יש לכם אפשרות בחירה כשמקודדים את חומר המקור, כדאי להקליט את האודיו באמצעות קצב דגימה של 16,000 הרץ. ערכים נמוכים יותר עלולים לפגוע בדיוק של זיהוי הדיבור, וערכים גבוהים יותר לא משפיעים באופן משמעותי על איכות זיהוי הדיבור.
עם זאת, אם נתוני האודיו כבר הוקלטו בקצב דגימה קיים שאינו 16,000 הרץ, אל תדגמו מחדש את האודיו ל-16,000 הרץ. לדוגמה, ברוב האודיו של טלפוניה מדור קודם נעשה שימוש בקצב דגימה של 8,000 הרץ, שיכול להניב תוצאות פחות מדויקות. אם אתם חייבים להשתמש באודיו כזה, אתם צריכים לספק את האודיו ל-Speech API בקצב הדגימה המקורי שלו.
שפות
מנוע הזיהוי של Cloud STT תומך במגוון שפות וניבים. מציינים את השפה (ואת הניב האזורי או הלאומי) של האודיו בשדה languageCode של הגדרות הבקשה, באמצעות מזהה BCP-47.
רשימה מלאה של השפות הנתמכות בכל תכונה זמינה בדף תמיכה בשפות.
הזמן שחלף (חותמות זמן)
Cloud STT יכול לכלול ערכים של היסט זמן (חותמות זמן) לתחילת ולסוף של כל מילה מדוברת שמזוהה באודיו שסופק. ערך של היסט זמן מייצג את משך הזמן שחלף מתחילת האודיו, במרווחים של 100 אלפיות השנייה.
הזחות זמן שימושיות במיוחד לניתוח קובצי אודיו ארוכים, שבהם יכול להיות שתצטרכו לחפש מילה מסוימת בטקסט המזוהה ולאתר אותה (לדלג אליה) באודיו המקורי. הזחות זמן נתמכות בכל שיטות הזיהוי שלנו: recognize, streamingrecognize ו-longrunningrecognize.
ערכי הזמן שחלף נכללים רק בחלופה הראשונה שמופיעה בתשובת הזיהוי.
כדי לכלול את הפרשי השעות בתוצאות הבקשה, צריך להגדיר את הפרמטר enableWordTimeOffsets כ-true בהגדרות הבקשה. דוגמאות לשימוש ב-API בארכיטקטורת REST או בספריות הלקוח מופיעות במאמר שימוש בהזזות זמן (חותמות זמן).
לדוגמה, אפשר לכלול את הפרמטר enableWordTimeOffsets בהגדרת הבקשה, כמו שמוצג כאן:
{ "config": { "languageCode": "en-US", "enableWordTimeOffsets": true }, "audio":{ "uri":"gs://gcs-test-data/gettysburg.flac" } }
התוצאה שמוחזרת על ידי Cloud Speech-to-Text API תכיל ערכי הזמן שחלף לכל מילה מזוהה, כמו שמוצג בהמשך:
{ "name": "6212202767953098955", "metadata": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata", "progressPercent": 100, "startTime": "2017-07-24T10:21:22.013650Z", "lastUpdateTime": "2017-07-24T10:21:45.278630Z" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse", "results": [ { "alternatives": [ { "transcript": "Four score and twenty...(etc)...", "confidence": 0.97186122, "words": [ { "startTime": "1.300s", "endTime": "1.400s", "word": "Four" }, { "startTime": "1.400s", "endTime": "1.600s", "word": "score" }, { "startTime": "1.600s", "endTime": "1.600s", "word": "and" }, { "startTime": "1.600s", "endTime": "1.900s", "word": "twenty" }, ... ] } ] }, { "alternatives": [ { "transcript": "for score and plenty...(etc)...", "confidence": 0.9041967, } ] } ] } }
בחירת מודל
Cloud STT יכול להשתמש באחד מכמה מודלים של למידת מכונה כדי לתמלל את קובץ האודיו. Google אימנה את המודלים האלה לזיהוי דיבור עבור סוגים ומקורות ספציפיים של אודיו.
כששולחים בקשה לתמלול אודיו ל-Cloud STT, אפשר לשפר את התוצאות שמתקבלות על ידי ציון המקור של האודיו המקורי. כך Cloud Speech-to-Text API יכול לעבד את קובצי האודיו שלכם באמצעות מודל למידת מכונה שאומן לזיהוי אודיו של דיבור מסוג מסוים של מקור.
כדי לציין מודל לזיהוי דיבור, צריך לכלול את השדה model באובייקט RecognitionConfig של הבקשה, ולציין את המודל שבו רוצים להשתמש.
רשימת מודלים של תמלול ב-Cloud STT.
תוכן אודיו מוטמע
אודיו מוטמע נכלל בבקשה לזיהוי דיבור כשמעבירים פרמטר content בשדה audio של הבקשה. אם האודיו מוטמע כתוכן בבקשת gRPC, הוא צריך להיות תואם לסריאליזציה של Proto3 ולהישלח כנתונים בינאריים. אם האודיו המוטמע מסופק כתוכן בבקשת REST, הוא צריך להיות תואם לסריאליזציה של JSON, וקודם צריך לקודד אותו ב-Base64. מידע נוסף זמין במאמר בנושא קידוד Base64 של אודיו.
כשיוצרים בקשה באמצעות ספריית לקוח של Google Cloud, בדרך כלל כותבים את הנתונים הבינאריים (או את הנתונים שמקודדים ב-Base64) ישירות בשדה content.
העברת אודיו שמופנה באמצעות URI
בדרך כלל, מעבירים פרמטר uri בשדה audio של בקשת הדיבור, שמצביע על קובץ אודיו (בפורמט בינארי, לא base64) שנמצא ב-Cloud Storage בפורמט הבא:
gs://bucket-name/path_to_audio_file
לדוגמה, החלק הבא בבקשה לזיהוי דיבור מתייחס לקובץ האודיו לדוגמה שבו נעשה שימוש במדריך למתחילים:
... "audio": { "uri":"gs://cloud-samples-tests/speech/brooklyn.flac" } ...
צריכות להיות לכם הרשאות גישה מתאימות לקריאת קבצים ב-Cloud Storage, כמו אחת מההרשאות הבאות:
- ניתן לקריאה באופן ציבורי (כמו קובצי האודיו לדוגמה שלנו)
- אפשר לקרוא אותו באמצעות חשבון השירות, אם משתמשים בהרשאה של חשבון שירות.
- אפשר לקרוא את הנתונים באמצעות חשבון משתמש, אם משתמשים ב-OAuth תלת-רגלי להרשאת חשבון משתמש.
מידע נוסף על ניהול הגישה ל-Cloud Storage זמין במאמר יצירה וניהול של רשימות של בקרת גישה במסמכי התיעוד של Cloud Storage.
תשובות של Cloud Speech-to-Text API
כמו שצוין קודם, יכול לעבור זמן מה עד שתגובה של Cloud Speech-to-Text API סינכרוני תחזיר תוצאות, והזמן הזה יהיה יחסי לאורך האודיו שסופק. אחרי העיבוד, ה-API יחזיר תגובה כמו שמוצג בבלוק הקוד הבא:
{ "results": [ { "alternatives": [ { "confidence": 0.98267895, "transcript": "how old is the Brooklyn Bridge" } ] } ] }
-
resultsמכיל את רשימת התוצאות (מהסוגSpeechRecognitionResult) כאשר כל תוצאה מתאימה לפלח אודיו (פלחים של אודיו מופרדים על ידי הפסקות). כל תוצאה תכלול שדה אחד או יותר מהשדות הבאים:-
alternativesמכיל רשימה של תעתיקים אפשריים, מהסוגSpeechRecognitionAlternatives. האם יוצגו יותר מחלופה אחת תלוי גם בשאלה אם ביקשתם יותר מחלופה אחת (על ידי הגדרתmaxAlternativesלערך שגדול מ-1) וגם בשאלה אם Cloud STT הפיק חלופות באיכות גבוהה מספיק. כל חלופה תכלול את השדות הבאים:-
transcriptמכיל את הטקסט המתומלל. איך מטפלים בתמלילים -
confidenceמכיל ערך בין0ל-1שמציין את רמת הביטחון של Cloud STT בתמלול הנתון. הסבר על ערכי מהימנות
-
-
בקטעים הבאים מוסברים הרכיבים של התשובה הזו.
בחירת חלופות
כל תוצאה בתגובה מוצלחת של זיהוי סינכרוני יכולה להכיל alternatives או יותר חלופות (אם הערך של maxAlternatives בבקשה גדול מ-1). אם Cloud STT קובע שלחלופה יש ערך מהימנות מספיק, החלופה הזו נכללת בתגובה. החלופה הראשונה בתשובה היא תמיד החלופה הכי טובה (הכי סבירה).
הגדרת maxAlternatives לערך גבוה מ-1 לא מרמזת או מבטיחה שיוחזרו כמה חלופות. באופן כללי, יותר מאפשרות חלופית אחת מתאים יותר למתן אפשרויות בזמן אמת למשתמשים שמקבלים תוצאות באמצעות בקשת זיהוי בסטרימינג.
איך עובדים עם תמלילים
כל חלופה שמופיעה בתשובה תכיל תג transcript
עם הטקסט שזוהה. אם מקבלים חלופות עוקבות, צריך לשרשר את התמלילים האלה.
קוד ה-Python הבא מבצע איטרציה ברשימת התוצאות ומשרשר את התמלילים. הערה: אנחנו בוחרים תמיד את האפשרות הראשונה (האפשרות האפסית).
response = service_request.execute() recognized_text = 'Transcribed Text: \n' for i in range(len(response['results'])): recognized_text += response['results'][i]['alternatives'][0]['transcript']
ערכי מהימנות
הערך של confidence הוא הערכה בין 0.0 ל-1.0. החישוב מתבצע על ידי צבירה של ערכי הסבירות שמוקצים לכל מילה באודיו. מספר גבוה יותר מצביע על סבירות גבוהה יותר לכך שהמילים הבודדות זוהו בצורה נכונה. השדה הזה בדרך כלל מסופק רק עבור ההשערה המובילה, ורק עבור תוצאות שבהן is_final=true. לדוגמה, אפשר להשתמש בערך confidence כדי להחליט אם להציג למשתמש תוצאות חלופיות או לבקש ממנו אישור.
עם זאת, חשוב לזכור שהמודל קובע מהי התוצאה ה "הכי טובה" ומדרג אותה במקום הראשון על סמך יותר אותות מאשר רק הציון confidence (למשל, הקשר של המשפט).
לכן יש מקרים שבהם התוצאה העליונה לא מקבלת את ציון הסמך הכי גבוה. אם לא ביקשתם כמה תוצאות חלופיות, יכול להיות שערך האמינות של התוצאה ה"הטובה ביותר" שמוחזרת יהיה נמוך מהצפוי. לדוגמה, זה יכול לקרות במקרים שבהם נעשה שימוש במילים נדירות. למילה שמשתמשים בה לעיתים רחוקות יכול להיות ערך נמוך של 'סבירות', גם אם היא מזוהה בצורה נכונה. אם המודל קובע שהמילה הנדירה היא האפשרות הסבירה ביותר על סמך ההקשר, התוצאה הזו תוצג בראש גם אם ערך confidence שלה נמוך יותר מאפשרויות חלופיות.
בקשות ותגובות אסינכרוניות
בקשת API אסינכרונית ל-Cloud Speech-to-Text לשיטה LongRunningRecognize זהה בצורה שלה לבקשת API סינכרונית ל-Cloud Speech-to-Text. עם זאת, במקום להחזיר תגובה, הבקשה לא סנכרונית תפעיל פעולה ממושכת (מהסוג Operation) ותחזיר את הפעולה הזו למקבל הקריאה החוזרת באופן מיידי. אפשר להשתמש בזיהוי דיבור אסינכרוני עם אודיו בכל אורך של עד 480 דקות.
לדוגמה:
{ "name": "operation_name", "metadata": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata" "progressPercent": 34, "startTime": "2016-08-30T23:26:29.579144Z", "lastUpdateTime": "2016-08-30T23:26:29.826903Z" } }
שימו לב שעדיין לא מוצגות תוצאות. Cloud STT ימשיך לעבד את האודיו וישתמש בפעולה הזו כדי לאחסן את התוצאות. התוצאות יופיעו בשדה response של הפעולה שמוחזרת כשהבקשה LongRunningRecognize תושלם.
הדוגמה הבאה היא תגובה מלאה אחרי השלמת הבקשה:
{ "name": "1268386125834704889", "metadata": { "lastUpdateTime": "2016-08-31T00:16:32.169Z", "@type": "type.googleapis.com/google.cloud.speech.v1.LongrunningRecognizeMetadata", "startTime": "2016-08-31T00:16:29.539820Z", "progressPercent": 100 } "response": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse", "results": [{ "alternatives": [{ "confidence": 0.98267895, "transcript": "how old is the Brooklyn Bridge" }]}] }, "done": True, }
שימו לב שהערך של done הוגדר כ-True, ושהערך של response בפעולה מכיל קבוצת תוצאות מסוג SpeechRecognitionResult, שהוא אותו סוג שמוחזר על ידי בקשת זיהוי סינכרונית של Cloud Speech-to-Text API.
בקשות זיהוי ב-Streaming Cloud Speech-to-Text API
קריאה לזיהוי באמצעות Cloud Speech-to-Text API בסטרימינג מיועדת ללכידה ולזיהוי של אודיו בזמן אמת, בסטרימינג דו-כיווני. האפליקציה יכולה לשלוח אודיו בזרם הבקשה ולקבל תוצאות זיהוי ביניים וסופיות בזרם התגובה בזמן אמת. תוצאות הביניים מייצגות את תוצאת הזיהוי הנוכחית של קטע אודיו, ואילו תוצאת הזיהוי הסופית מייצגת את הניחוש האחרון והטוב ביותר לגבי קטע האודיו הזה.
בקשות לסטרימינג
בניגוד לקריאות סנכרוניות ולא סנכרוניות, שבהן שולחים את ההגדרה ואת האודיו בבקשה אחת, כדי לקרוא ל-Streaming Speech API צריך לשלוח כמה בקשות. ה-StreamingRecognizeRequest הראשון
חייב להכיל הגדרה מסוג
StreamingRecognitionConfig
ללא אודיו נלווה. הודעות StreamingRecognizeRequest הבאות שיישלחו באותו הסטרימינג יכללו פריימים עוקבים של בייטים של אודיו גולמי.
StreamingRecognitionConfig כולל את השדות הבאים:
-
config: חובה. מכיל פרטי הגדרה של האודיו, מסוג RecognitionConfig, והוא זהה לפרטים שמוצגים בבקשות סינכרוניות ואסינכרוניות. -
single_utterance: (אופציונלי, ברירת המחדל היאfalse) מציין אם הבקשה הזו צריכה להסתיים אוטומטית אחרי שלא מזוהה יותר דיבור. אם ההגדרה הזו מופעלת, Cloud STT יזהה הפסקות, שקט או אודיו שאינו דיבור כדי לקבוע מתי לסיים את הזיהוי. אם לא מגדירים את המאפיין הזה, הסטרימינג ימשיך להאזין ולעבד אודיו עד שהסטרימינג ייסגר ישירות או עד שאורך הסטרימינג יעבור את המגבלה. ההגדרהsingle_utteranceל-trueשימושית לעיבוד פקודות קוליות. -
interim_results: (אופציונלי, ברירת המחדל היאfalse) מציין שבקשת הסטרימינג הזו צריכה להחזיר תוצאות זמניות שאפשר לשפר בהמשך (אחרי עיבוד של עוד אודיו). תוצאות ביניים יצוינו בתשובות באמצעות ההגדרה שלis_finalל-false.
הצגת התשובות באופן שוטף
תוצאות של זיהוי דיבור בשידור חוזר מוחזרות בסדרה של תגובות מהסוג StreamingRecognitionResponse. תשובה כזו כוללת את השדות הבאים:
-
speechEventTypeמכיל אירועים מהסוג SpeechEventType. הערך של האירועים האלה יציין מתי נקבע שאמירה בודדת הושלמה. אירועי הדיבור משמשים כסמנים בתגובה של מקור הנתונים. -
resultsמכיל את רשימת התוצאות, שיכולות להיות תוצאות ביניים או תוצאות סופיות, מהסוג StreamingRecognitionResult. הרשימהresultsמכילה את שדות המשנה הבאים:-
alternativesמכיל רשימה של תמלילים חלופיים. - הערך
isFinalמציין אם התוצאות שמתקבלות ברשומה הזו הן זמניות או סופיות. יכול להיות ש-Google תחזיר כמה תוצאותisFinal=trueבמהלך שידור יחיד, אבל התוצאהisFinal=trueמובטחת רק אחרי ששידור הכתיבה נסגר (סגירה חלקית). -
stabilityמציין את התנודתיות של התוצאות שהתקבלו עד עכשיו, כאשר0.0מציין חוסר יציבות מוחלט ו-1.0מציין יציבות מוחלטת. שימו לב: בניגוד לערך המהימנות, שמעריך אם התמליל נכון,stabilityמעריך אם התוצאה החלקית שסופקה עשויה להשתנות. אםisFinalמוגדר לערךtrue, המדיניותstabilityלא תוגדר.
-