در رابط برنامهنویسی تشخیص گفتار GenAI کیت ML، میتوانید محتوای صوتی را به متن تبدیل کنید. این رابط برنامهنویسی از حالتهای زیر پشتیبانی میکند:
- پایه : API تشخیص گفتار از مدل تشخیص گفتار سنتی روی دستگاه، مشابه API SpeechRecognizer، استفاده میکند.
- به طور کلی در اکثر دستگاههای اندروید با سطح API 31 و بالاتر موجود است
- پیشرفته : رابط برنامهنویسی تشخیص گفتار (Speech Recognition API) از مدل GenAI استفاده میکند که پوشش زبانی وسیعتر و کیفیت کلی بهتری را ارائه میدهد.
- موجود در دستگاههای پیکسل ۱۰، دستگاههای بیشتری در حال توسعه هستند
قابلیتهای کلیدی
- ورودی جریان را از میکروفون یا فایل صوتی ضبط میکند
- متن رونویسیشده به صورت یک جریان پیوسته ارائه میشود که ممکن است در ابتدا جزئی (و قابل تغییر) باشد و سپس به محتوای نهایی تبدیل شود.
نتایج مثال
| صوتی | حالت | محلی | رونویسی |
|---|---|---|---|
| صوتی_1 | پایه | انگلیسی-آمریکایی | «این یک پیام کوتاه است» |
| صوتی_2 | پیشرفته | ایاس-ایاس | «این یک مردِ کُروتو است.» |
مقایسه با پلتفرم تشخیص گفتار API
هنگام استفاده از حالت پایه، API تشخیص گفتار ML Kit عملکرد اصلی مشابهی با API تشخیص گفتار پلتفرم ارائه میدهد. یکی از مزایای کلیدی ML Kit پشتیبانی آن از طیف وسیعتری از نسخههای پلتفرم اندروید است که به API سطح ۳۱ یا بالاتر نیاز دارد، که گستردهتر از برخی APIهای پلتفرم است.
همچنین، API تشخیص گفتار ML Kit از مدل Gemini روی دستگاه در حالت پیشرفته استفاده میکند و پوشش زبانی وسیعتری را ارائه میدهد.
شروع کنید
API تشخیص گفتار ML Kit را به عنوان یک وابستگی در پیکربندی build.gradle خود اضافه کنید.
implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")
برای ادغام 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()
}
زبانها و دستگاههای پشتیبانیشده
| حالت | مناطق محلی |
| پایه | 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 (بتا)، da-DK (بتا)، sv-SE (بتا)، pl-PL (بتا)، hi-IN (بتا)، vi-VN (بتا)، id-ID (بتا)، ar-SA (بتا)، tr-TR (بتا) |
دستگاههای پشتیبانیشده
| حالت | دستگاههای پشتیبانیشده |
| پایه | دستگاههای اندروید که از API سطح ۳۱ و بالاتر استفاده میکنند. |
| پیشرفته | پیکسل ۱۰ |
مشکلات رایج در راهاندازی
رابطهای برنامهنویسی کاربردی ML Kit GenAI برای دسترسی به Gemini Nano به برنامه Android AICore متکی هستند. هنگامی که یک دستگاه تازه راهاندازی شده (شامل تنظیم مجدد) یا برنامه AICore تازه تنظیم مجدد شده است (مثلاً پاک کردن دادهها، حذف نصب و سپس نصب مجدد)، ممکن است برنامه AICore زمان کافی برای تکمیل مقداردهی اولیه (از جمله دانلود آخرین پیکربندیها از سرور) نداشته باشد. در نتیجه، رابطهای برنامهنویسی کاربردی ML Kit GenAI ممکن است آنطور که انتظار میرود عمل نکنند. در اینجا پیامهای خطای راهاندازی رایجی که ممکن است مشاهده کنید و نحوه مدیریت آنها آمده است:
| مثال پیام خطا | نحوه رسیدگی |
| AICore با خطای نوع ۴-CONNECTION_ERROR و کد خطای ۶۰۱-BINDING_FAILURE ناموفق بود: سرویس AICore نتوانست اتصال برقرار کند. | این مشکل میتواند زمانی رخ دهد که شما برنامه را با استفاده از APIهای ML Kit GenAI بلافاصله پس از راهاندازی دستگاه نصب میکنید یا زمانی که AICore پس از نصب برنامه شما حذف نصب میشود. بهروزرسانی برنامه AICore و سپس نصب مجدد برنامه باید این مشکل را برطرف کند. |
| AICore با خطای نوع ۳-PREPARATION_ERROR و کد خطای ۶۰۶-FEATURE_NOT_FOUND ناموفق بود: ویژگی ... در دسترس نیست. | این اتفاق ممکن است زمانی رخ دهد که AICore دانلود آخرین تنظیمات را تمام نکرده باشد. وقتی دستگاه به اینترنت متصل است، معمولاً چند دقیقه تا چند ساعت طول میکشد تا بهروزرسانی شود. راهاندازی مجدد دستگاه میتواند سرعت بهروزرسانی را افزایش دهد. توجه داشته باشید که اگر بوت لودر دستگاه آنلاک شده باشد، این خطا را نیز مشاهده خواهید کرد - این API از دستگاههایی با بوت لودر آنلاک شده پشتیبانی نمیکند. |
| AICore با خطای نوع ۱-DOWNLOAD_ERROR و کد خطا ۰-UNKNOWN شکست خورد: ویژگی ... با وضعیت خرابی ۰ و خطای esz شکست خورد: UNAVAILABLE: قادر به حل مشکل میزبان نیست ... | اتصال شبکه را حفظ کنید، چند دقیقه صبر کنید و دوباره امتحان کنید. |
کد نمونه
- نمونه کد API تشخیص گفتار کیت ML را در GitHub بررسی کنید