ضمن واجهة برمجة التطبيقات GenAI Speech Recognition API في حزمة تعلّم الآلة، يمكنك تحويل المحتوى الصوتي إلى نص. تتيح واجهة برمجة التطبيقات هذه الأوضاع التالية:
- متقدّم: تستخدم واجهة Speech Recognition API نموذج الذكاء الاصطناعي التوليدي الذي يوفّر تغطية لغوية أوسع وجودة عامة أفضل. ولن تحتاج إلى تنزيل حزمة لغة منفصلة لكل لغة، ما يوفّر مساحة التخزين.
- أساسي: تستخدم واجهة Speech Recognition API نموذج التعرّف على الكلام التقليدي على الجهاز فقط، على غرار واجهة SpeechRecognizer API.
تحوّل واجهة Speech Recognition API المحتوى الصوتي إلى نص باللغة نفسها. لتحويل الصوت إلى نص بلغة مختلفة، استخدِم Speech Translation API.
الإمكانات الأساسية
- يلتقط الإدخال المباشر من الميكروفون أو ملف صوتي.
- تحويل ملف كامل مسجَّل مسبقًا إلى نص باستخدام الطريقة
AudioSource.fromFile()أوAudioSource.fromUri()لمعرفة التفاصيل، يُرجى الاطّلاع على متطلبات إدخال الصوت. - بالنسبة إلى الإدخالات المباشرة، توفّر هذه الميزة وقت البدء الدقيق لكل كلمة يتم التعرّف عليها لمساعدتك في مزامنة الصور المتحركة في واجهة المستخدم أو إنشاء الترجمة أو تمييز الكلمات أثناء نطقها. وقت بدء كل كلمة تم التعرّف عليها (بالملي ثانية) هو إزاحة من بداية الحدث، وهو الطابع الزمني 0.
- يتم توفير النص المحوَّل من الصوت كبث مستمر، وقد يكون في البداية جزئيًا (وقابل للتغيير) قبل أن يصبح النص النهائي الذي تم التعرّف عليه.
أمثلة النتائج
| الصوت | الوضع | اللغة | تحويل الصوت إلى نص |
|---|---|---|---|
| audio_2 | إعدادات متقدمة | es-ES | "Este es un mensaje corto." |
| audio_1 | التذكرة الأساسية | en-US | "هذه رسالة قصيرة" |
مقارنة مع واجهة برمجة التطبيقات Speech Recognition API الخاصة بالمنصة
تغطي واجهة برمجة التطبيقات للتعرّف على الكلام في "حزمة تعلّم الآلة" الوظائف الأساسية لواجهة برمجة التطبيقات SpeechRecognizer على المنصة عند استخدام الوضع الأساسي. من المزايا الرئيسية لحزمة تعلّم الآلة
أنّها غير مرتبطة بإصدار نظام أساسي معيّن.
بالإضافة إلى ذلك، تتيح واجهة Speech Recognition API في حزمة تعلّم الآلة التعرّف على الكلام باستخدام نموذج Gemini على الجهاز فقط عند استخدام "الوضع المتقدّم"، ما يوفّر تغطية لغوية موسّعة.
البدء
أضِف واجهة Speech Recognition API في حزمة تعلّم الآلة كعنصر تابع في إعدادات build.gradle:
implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")
لدمج واجهة برمجة التطبيقات Speech Recognition API في تطبيقك، أنشئ عميل SpeechRecognizer. التحقّق من حالة ميزات النموذج اللازمة على الجهاز وتنزيل النموذج إذا لم يكن متوفّرًا على الجهاز بعد
إعداد الإدخال الصوتي في SpeechRecognizerRequest، يمكنك تشغيل الاستنتاج باستخدام
العميل لتلقّي مخرجات البث من Kotlin flow. أخيرًا،
تذكَّر إغلاق العميل لإخلاء الموارد.
// 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()
}
متطلبات إدخال الصوت
تتيح واجهة GenAI Speech Recognition API إدخال الصوت من الميكروفون أو من مصدر مخصّص عبر واصِف الملف.
إذا كنت تستخدم AudioSource.fromPfd(parcelFileDescriptor)، يجب أن يستوفي الصوت المُدخَل المتطلبات الصارمة التالية:
- التنسيق: ملف PCM خام بدون عنوان بمعدّل 16 بت.
- القنوات: أحادي (قناة واحدة)
- معدّل البيانات في الملف الصوتي: 16 كيلوهرتز
في معظم حالات الاستخدام، ننصح باستخدام AudioSource.fromMic() لأنّه يتعامل مع هذه القيود تلقائيًا.
تنسيقات الإدخال الصوتي المتوافقة
تتيح واجهة Speech Recognition API استخدام تنسيقات الإدخال الصوتي التالية:
- يتم تلقائيًا فك ترميز ملفات MP3 وWAV وFLAC وM4A وOGG على الجهاز.
- يجب أن يكون الصوت الأولي بدون عنوان (
.rawأو.pcm) بتنسيق PCM 16 بت و16 كيلوهرتز وأحادي.
إذا كان التنسيق غير صالح أو غير متوافق، يتم عرض قيمة ErrorResponse عند بدء التعرّف على الصوت.
تنفيذ واجهة برمجة التطبيقات Speech Recognition API
في ما يلي كيفية استخدام واجهة Speech Recognition API لتحويل الصوت إلى نص واستخدام توقيت الكلمات.
تحويل الصوت إلى نص
تتيح واجهة Speech Recognition API إدخال الصوت من ميكروفون الجهاز أو الملفات المسجّلة مسبقًا أو المسارات المخصّصة باستخدام عنصر ParcelFileDescriptor.
لإعداد بياناتك الصوتية، أنشئ كائن AudioSource باستخدام إحدى
طرق المصنع المدرَجة في الجدول التالي:
| الطريقة | وضع الصوت | حالة الاستخدام المقترَحة |
|---|---|---|
AudioSource.fromMic() |
STREAMING |
التقاط الإدخال الصوتي المباشر من المستخدم يتطلّب ذلك الحصول على إذن RECORD_AUDIO.
|
AudioSource.fromFile(file)AudioSource.fromUri(context, uri)
|
ONE_SHOT |
تحويل الملفات الصوتية المسجَّلة مسبقًا إلى نص تفكّ هذه الميزة ترميز تنسيقات الملفات العادية تلقائيًا على الجهاز مباشرةً. |
AudioSource.fromPfd(pfd, mode)AudioSource.fromPfd(pfd, mode, audioFormat)
|
STREAMING أو ONE_SHOT |
مسارات الصوت المخصّصة (مثل البيانات الصوتية التي تتم معالجتها في مكان آخر في تطبيقك) |
يتحكّم الثابت AudioSource.Mode في كيفية معالجة واجهة برمجة التطبيقات للصوت الوارد:
- يضبط الثابت
AudioSource.Mode.STREAMINGأداة التعرّف على الكلام لعرض نتائج تحويل الصوت إلى نص جزئية ونهائية بشكل مستمر عند وصول البيانات الصوتية. عند تقديم عنصرParcelFileDescriptorمخصّص، يجب كتابة البيانات في البث في الوقت الفعلي (حوالي 32,000 بايت في الثانية للصوت العادي بتنسيق PCM أحادي القناة بتردد 16 كيلوهرتز و16 بت). يمكن أن تؤدي كتابة البيانات بسرعة كبيرة إلى تجاوز سعة المخزن المؤقت. - يضبط الثابت
AudioSource.Mode.ONE_SHOTأداة التعرّف على الكلام للانتظار حتى يتم نقل مصدر الصوت بالكامل قبل إجراء الاستنتاج وتقديم النص النهائي. يمكنك كتابة البيانات الصوتية بأسرع ما يمكن، ولكن يجب إغلاق نهاية الكتابة لواصف الملف للإشارة إلى نهاية الملف. ولا يتم تسليم نتيجة تحويل الصوت إلى نص النهائية إلا بعد تلقّي إشارة نهاية الملف هذه.
يحوّل المثال التالي ملفًا صوتيًا مسجَّلاً مسبقًا إلى نص:
suspend fun recognizeFromFile(recognizer: SpeechRecognizer, audioFile: File) {
val audioSource = AudioSource.fromFile(audioFile)
val request = speechRecognizerRequest { this.audioSource = audioSource }
try {
recognizer.startRecognition(request).collect { response ->
when (response) {
is SpeechRecognizerResponse.FinalTextResponse -> {
// Process the transcription of the whole file.
}
is SpeechRecognizerResponse.ErrorResponse -> {
// Handle the error, for example an unsupported audio format.
}
else -> {}
}
}
} finally {
audioSource.close()
}
}
استخدام توقيت الكلمات
يمكنك طلب وقت البدء لكل كلمة يتم التعرّف عليها من خلال ضبط المَعلمة enableWordTiming على true في مجموعة إعدادات recognitionOptions لطلبك.
عند تفعيل ميزة توقيت الكلمات، يتضمّن كل عنصر SpeechRecognizerResponse.FinalTextResponse
السمة wordTimings التي تحتوي على قائمة
بعناصر SpeechRecognizerResponse.WordTiming. يوفّر كل عنصر سلسلة الكلمات التي تم التعرّف عليها (text) والإزاحة بالملي ثانية (timestampMs) بدءًا من بداية جلسة التعرّف على الكلام. عند إيقاف توقيت الكلمات (الإعداد التلقائي)، يتم عرض قائمة wordTimings فارغة.
يوضّح مثال الرمز البرمجي التالي كيفية ضبط توقيت الكلمات وتفعيله:
suspend fun recognizeWithWordTiming(recognizer: SpeechRecognizer) {
val request = speechRecognizerRequest {
audioSource = AudioSource.fromMic()
recognitionOptions { enableWordTiming = true }
}
recognizer.startRecognition(request).collect { response ->
if (response is SpeechRecognizerResponse.FinalTextResponse) {
for (wordTiming in response.wordTimings) {
val word: String = wordTiming.text
val timestamp: Long = wordTiming.timestampMs
}
}
}
}
اللغات المتاحة
| الوضع | اللغات |
| إعدادات متقدمة | ar-SA (إصدار تجريبي)، cmn-Hans-CN، cmn-Hant-TW، da-DK (إصدار تجريبي)، de-DE، en-US، es-ES، fr-FR، hi-IN (إصدار تجريبي)، id-ID (إصدار تجريبي)، it-IT، ja-JP، ko-KR، nl-NL (إصدار تجريبي)، pl-PL (إصدار تجريبي)، pt-PT، ru-RU، sv-SE (إصدار تجريبي)، th-TH، tr-TR (إصدار تجريبي)، vi-VN (إصدار تجريبي) |
| التذكرة الأساسية | cmn-Hans-CN (إصدار تجريبي)، cmn-Hant-TW (إصدار تجريبي)، de-DE (إصدار تجريبي)، en-US، es-ES (إصدار تجريبي)، fr-FR (إصدار تجريبي)، hi-IN (إصدار تجريبي)، it-IT (إصدار تجريبي)، ja-JP (إصدار تجريبي)، ko-KR (إصدار تجريبي)، pl-PL (إصدار تجريبي)، pt-BR (إصدار تجريبي)، ru-RU (إصدار تجريبي)، tr-TR (إصدار تجريبي)، vi-VN (إصدار تجريبي) |
الأجهزة المعتمدة
| الوضع | الأجهزة المتوافقة |
| التذكرة الأساسية | أجهزة Android التي تستخدم المستوى 31 من واجهة برمجة التطبيقات والإصدارات الأحدث |
| إعدادات متقدمة |
سلسلة هواتف Pixel 10 وPixel 11، بالإضافة إلى الأجهزة المزوّدة بنموذج Gemini Nano على شرائح التعريف التالية (بما في ذلك سلسلة هواتف Samsung Galaxy S26 وZ Flip8 وZ Fold8 وغيرها):
|
المشاكل الشائعة في الإعداد
تعتمد واجهات برمجة التطبيقات للذكاء الاصطناعي التوليدي في "حزمة تعلّم الآلة" على تطبيق Android AICore للوصول إلى Gemini Nano. عند إعداد جهاز للتو (بما في ذلك إعادة الضبط)، أو إعادة ضبط تطبيق AICore للتو (مثل محو البيانات وإلغاء التثبيت ثم إعادة التثبيت)، قد لا يتوفّر لتطبيق AICore الوقت الكافي لإنهاء عملية الإعداد (بما في ذلك تنزيل أحدث الإعدادات من الخادم). نتيجةً لذلك، قد لا تعمل واجهات برمجة التطبيقات GenAI في حزمة تعلّم الآلة على النحو المتوقّع. في ما يلي رسائل الخطأ الشائعة في الإعداد التي قد تظهر لك وكيفية التعامل معها:
| مثال على رسالة خطأ | طريقة التعامل |
| تعذَّر تشغيل AICore وظهر نوع الخطأ 4-CONNECTION_ERROR ورمز الخطأ 601-BINDING_FAILURE: تعذَّر ربط خدمة AICore. | قد يحدث ذلك عند تثبيت التطبيق باستخدام واجهات برمجة تطبيقات الذكاء الاصطناعي التوليدي في "حزمة تعلّم الآلة" فورًا بعد إعداد الجهاز أو عند إلغاء تثبيت AICore بعد تثبيت تطبيقك. من المفترض أن يؤدي تحديث تطبيق AICore ثم إعادة تثبيت تطبيقك إلى حلّ المشكلة. |
| تعذّر تشغيل AICore وظهر نوع الخطأ 3-PREPARATION_ERROR ورمز الخطأ 606-FEATURE_NOT_FOUND: الميزة ... غير متاحة. |
قد يحدث ذلك عندما لا ينتهي AICore من تنزيل أحدث الإعدادات. عندما يكون الجهاز متصلاً بالإنترنت، يستغرق عادةً التحديث من بضع دقائق إلى بضع ساعات. يمكن أن تؤدي إعادة تشغيل الجهاز إلى تسريع عملية التحديث.
يُرجى العِلم أنّه إذا كان برنامج الإقلاع في الجهاز غير مقفل، سيظهر لك هذا الخطأ أيضًا، لأنّ واجهة برمجة التطبيقات هذه لا تتوافق مع الأجهزة التي تتضمّن برامج إقلاع غير مقفلة. |
| تعذّر تشغيل AICore وظهر نوع الخطأ 1-DOWNLOAD_ERROR ورمز الخطأ 0-UNKNOWN: تعذّر تشغيل الميزة ... وظهرت حالة التعذّر 0 والخطأ esz: UNAVAILABLE: Unable to resolve host ... | يُرجى إبقاء الاتصال بالشبكة والانتظار لبضع دقائق ثم إعادة المحاولة. |
نموذج الرموز البرمجية
- استكشِف نموذج الرمز البرمجي لواجهة Speech Recognition API في "حزمة تعلّم الآلة" على GitHub