ב-GenAI Speech Recognition API של ML Kit, אפשר לתמלל תוכן אודיו לטקסט. ה-API הזה תומך במצבים הבאים:
- Basic: Speech Recognition API משתמש במודל מסורתי של זיהוי דיבור במכשיר, בדומה ל-SpeechRecognizer API
- זמין ברוב מכשירי Android עם רמת API 31 ומעלה
- מתקדם: Speech Recognition API משתמש במודל AI גנרטיבי, שמפיק כיסוי שפה רחב יותר ואיכות כוללת טובה יותר
- זמין במכשירי 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()
}
הדרישות לגבי קלט אודיו
ה-API של AI גנרטיבי לזיהוי דיבור תומך בקלט מהמיקרופון או ממקור מותאם אישית באמצעות מתאר קובץ.
אם משתמשים ב-AudioSource.fromPfd(parcelFileDescriptor), האודיו שמוזן צריך לעמוד בדרישות המחמירות הבאות:
- פורמט: Raw, PCM 16 ביט ללא כותרת.
- ערוצים: מונו (ערוץ יחיד).
- תדירות דגימה: 16 kHz.
ברוב תרחישי השימוש, מומלץ להשתמש ב-AudioSource.fromMic() כי הוא מטפל במגבלות האלה באופן אוטומטי.
שפות ומכשירים נתמכים
| המצב | 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