GenAI Speech Recognition API

ב-GenAI Speech Recognition API של ML Kit, אפשר לתמלל תוכן אודיו לטקסט. ה-API הזה תומך במצבים הבאים:

  • Basic: Speech Recognition API משתמש במודל מסורתי של זיהוי דיבור במכשיר, בדומה ל-SpeechRecognizer API.
    • זמינה בדרך כלל ברוב מכשירי Android עם API ברמה 31 ומעלה
  • מתקדם: Speech Recognition API משתמש במודל GenAI, שמפיק כיסוי שפה רחב יותר ואיכות כוללת טובה יותר.
    • זמין במכשירי Pixel 10, ובמכשירים נוספים שנמצאים בפיתוח

יכולות מרכזיות

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

תוצאות לדוגמה

אודיו מצב לוקאל תמליל
audio_1 בסיסי en-US "This is a short message"
audio_2 הגדרות מתקדמות es-ES ‪"Este es un mensaje corto."

השוואה ל-Speech Recognition API של הפלטפורמה

כשמשתמשים במצב בסיסי, ML Kit Speech Recognition API מציע פונקציונליות ליבה דומה ל-Speech Recognition API של הפלטפורמה. יתרון מרכזי של ML Kit הוא התמיכה במגוון רחב יותר של גרסאות פלטפורמת Android, שנדרשת בהן רמת API‏ 31 ומעלה, רחבה יותר מכמה ממשקי API של פלטפורמות.

בנוסף, ML Kit Speech Recognition API משתמש במודל Gemini במכשיר במצב מתקדם, ומספק כיסוי שפה רחב יותר.

שנתחיל?

מוסיפים את ML Kit Speech Recognition API כתלות בהגדרה build.gradle

implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")

כדי לשלב את Speech Recognition API באפליקציה, צריך ליצור SpeechRecognizerלקוח. בודקים את הסטטוס של התכונות שדורשות מודל במכשיר ומורידים את המודל אם הוא עדיין לא במכשיר. אחרי שמכינים את קלט האודיו ב-SpeechRecognizerRequest, מריצים הסקה באמצעות הלקוח כדי לקבל פלט סטרימינג מתהליך Kotlin. לבסוף, חשוב לזכור לסגור את הלקוח כדי לשחרר משאבים.

// 1. Create a SpeechRecognizer with desired options.
val options: SpeechRecognizerOptions =
    speechRecognizerOptions {
        locale = Locale.US
        preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
    }
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(options)

// 2. Check if the recognition model is available or needs downloading.
launch {
    val status: Int = speechRecognizer.checkStatus()
    if (status == FeatureStatus.DOWNLOADABLE) {
        // 3. If needed, download the model and monitor progress.
        speechRecognizer.download.collect { downloadStatus ->
            when (downloadStatus) {
                is DownloadStatus.DownloadCompleted -> {
                    // Model is ready, start recognition.
                    startMyRecognition(speechRecognizer)
                }
                is DownloadStatus.DownloadFailed -> {
                    // Handle download failure (e.g., inform the user).
                }
                is DownloadStatus.DownloadProgress -> {
                    // Handle download progress (e.g., update a progress bar).
                }
            }
        }
    } else if (status == FeatureStatus.AVAILABLE) {
        // Model is already ready, start recognition immediately.
        startMyRecognition(speechRecognizer)
    } else {
        // Handle other statuses (e.g., DOWNLOADING, UNAVAILABLE).
    }
}

// 4. Define your recognition logic using a suspend function.
suspend fun startMyRecognition(recognizer: SpeechRecognizer) {
    // Create a request (e.g., specifying audio source).
    val request: SpeechRecognizerRequest
        = speechRecognizerRequest { audioSource = AudioSource.fromMic() }
    // Start recognition and process the continuous stream of responses.
    recognizer.startRecognition(request).collect {
        // Process the SpeechRecognitionResponse data here.
    }
}

// 5. Stop recognition and clean up resources when the session is complete.
launch {
    recognizer.stopRecognition()
    recognizer.close()
}

שפות ומכשירים נתמכים

המצב Locales
בסיסי ‫en-US, ‏ fr-FR (בטא), ‏ it-IT (בטא), ‏ de-DE (בטא), ‏ es-ES (בטא), hi-IN (בטא), ‏ ja-JP (בטא), ‏ pt-BR (בטא), ‏ tr-TR (בטא), ‏ pl-PL (בטא), cmn-Hans-CN (בטא), ‏ ko-KR (בטא), ‏ cmn-Hant-TW (בטא), ‏ ru-RU (בטא), vi-VN (בטא)
הגדרות מתקדמות לוקאלים שבדרך כלל יש בהם רמת דיוק גבוהה: en-US, ko-KR, es-ES, fr-FR, de-DE, it-IT, pt-PT, cmn-Hans-CN, cmn-Hant-TW, ja-JP, th-TH, ru-RU, nl-NL (beta), da-DK (beta), sv-SE (beta), pl-PL (beta), hi-IN (beta), vi-VN (beta), id-ID (beta), ar-SA (beta), tr-TR (beta)

מכשירים נתמכים

המצב מכשירים נתמכים
בסיסי מכשירי Android עם API ברמה 31 ומעלה.
הגדרות מתקדמות Pixel 10

בעיות נפוצות בהגדרה

ממשקי ה-API של GenAI ב-ML Kit מסתמכים על אפליקציית Android AICore כדי לגשת ל-Gemini Nano. כשמגדירים מכשיר חדש (כולל איפוס), או כשמאפסים את אפליקציית AICore (למשל, מוחקים את הנתונים, מסירים את ההתקנה ואז מתקינים מחדש), יכול להיות שלאפליקציית AICore לא יהיה מספיק זמן לסיים את האתחול (כולל הורדת ההגדרות העדכניות מהשרת). כתוצאה מכך, יכול להיות שממשקי ה-API של ML Kit GenAI לא יפעלו כמצופה. ריכזנו כאן הודעות שגיאה נפוצות שמוצגות במהלך ההגדרה, והסבר איך לטפל בהן:

דוגמה להודעת שגיאה איך לטפל בבעיה
השגיאה AICore נכשלה עם סוג השגיאה 4-CONNECTION_ERROR וקוד השגיאה 601-BINDING_FAILURE: שירות AICore נכשל בקישור. זה יכול לקרות כשמתקינים את האפליקציה באמצעות ממשקי ה-API של ML Kit GenAI מיד אחרי הגדרת המכשיר, או כשמסירים את ההתקנה של AICore אחרי התקנת האפליקציה. עדכון של אפליקציית AICore ואז התקנה מחדש של האפליקציה אמורים לפתור את הבעיה.
הפעולה של AICore נכשלה עם סוג השגיאה 3-PREPARATION_ERROR וקוד השגיאה 606-FEATURE_NOT_FOUND: התכונה ... לא זמינה. יכול להיות שהמצב הזה קורה כי AICore לא סיים להוריד את ההגדרות האחרונות. כשהמכשיר מחובר לאינטרנט, העדכון מתבצע בדרך כלל תוך כמה דקות עד כמה שעות. הפעלה מחדש של המכשיר יכולה להאיץ את העדכון.

שימו לב שאם תוכנת האתחול של המכשיר לא נעולה, תוצג גם השגיאה הזו – ה-API הזה לא תומך במכשירים עם תוכנת אתחול לא נעולה.
הייתה שגיאה ב-AICore מסוג 1-DOWNLOAD_ERROR וקוד שגיאה 0-UNKNOWN: התכונה ... נכשלה עם סטטוס כשל 0 ושגיאה esz: UNAVAILABLE: לא ניתן לפתור את המארח ... משאירים את החיבור לרשת, מחכים כמה דקות ומנסים שוב.

קוד לדוגמה

  • אפשר לעיין בדוגמת הקוד של ML Kit Speech Recognition API ב-GitHub