إنشاء تطبيق أساسي لتصنيف الصوت

1. قبل البدء

TensorFlow هو إطار عمل لتعلُّم الآلة متعدّد الأغراض. ويمكن استخدامها لتدريب النماذج الضخمة على مستوى المجموعات في السحابة الإلكترونية، أو لتدريب النماذج محليًا على نظام مضمّن، مثل الهاتف.

يستخدم هذا الدرس التطبيقي حول الترميز TensorFlow Lite لتشغيل نموذج تصنيف صوتي على جهاز Android.

ما ستتعرَّف عليه

  • كيفية العثور على نموذج لتعلّم الآلة مدرّب مسبقًا وجاهزًا للاستخدام.
  • طريقة إجراء تصنيف صوتي للمحتوى الصوتي الذي يتم تسجيله في الوقت الفعلي
  • كيفية استخدام مكتبة دعم TensorFlow Lite لمعالجة إدخال النموذج ومخرجات نموذج "المعالجة اللاحقة".
  • كيفية استخدام مكتبة مهام الصوت لتنفيذ كل الأعمال المتعلقة بالصوت.

العناصر التي سيتم إنشاؤها

تطبيق بسيط للتعرّف على الصوت يعمل على نموذج التعرّف على الصوت من TensorFlow Lite للتعرّف على الأصوات من الميكروفون في الوقت الفعلي.

33af0fdb0a027fa8.png

الأشياء التي تحتاج إليها

  • إصدار حديث من "استوديو Android" (الإصدار 4.1.2 أو الإصدارات الأحدث)
  • جهاز يعمل بنظام التشغيل Android بإصدار Android واجهة برمجة التطبيقات 23 (Android 6.0)
  • نموذج الرمز
  • المعرفة الأساسية بتطوير نظام التشغيل Android بلغة Kotlin

2. الحصول على نموذج الرمز

تنزيل الرمز

انقر على الرابط التالي لتنزيل كل رموز هذا الدرس التطبيقي حول الترميز:

فك ضغط ملف zip الذي تم تنزيله. سيؤدي ذلك إلى تفريغ مجلد جذر (odml-pathways) يضم جميع الموارد التي تحتاجها. بالنسبة إلى هذا الدرس التطبيقي حول الترميز، ستحتاج إلى المصادر في الدليل الفرعي audio_classification/codelab1/android فقط.

ملاحظة: إذا كنت تفضّل إنشاء نسخة طبق الأصل من المستودع، يمكنك اتّباع الخطوات التالية:

git clone https://github.com/googlecodelabs/odml-pathways.git

يحتوي الدليل الفرعي android في المستودع audio_classification/codelab1/android على دليلَين:

  • Android_studio_folder.png Starter - الرمز الذي يتم استخدامه في هذا الدرس التطبيقي حول الترميز.
  • Android_studio_folder.pngنهائي - اكتمل رمز نموذج التطبيق المكتمل.

استيراد تطبيق إجراء التفعيل

لنبدأ باستيراد تطبيق إجراء التفعيل إلى "استوديو Android".

  1. افتح Android Studio واختَر استيراد مشروع (Gradle أو Eclipse ADT وغير ذلك)
  2. افتح مجلد starter (audio_classification/codelab1/android/starter) من رمز المصدر الذي نزّلته في وقت سابق.

7c0f27882a2698ac.png

للتأكد من توفر جميع الاعتماديات على تطبيقك، يجب مزامنة مشروعك مع ملفات Excel عند انتهاء عملية الاستيراد.

  1. اختَر مزامنة المشروع مع ملفات Gradle ( b451ab2d04d835f9.png) من شريط أدوات "استوديو Android".

تشغيل تطبيق إجراء التفعيل

الآن بعد أن قمت باستيراد المشروع إلى Android Studio، أصبحت مستعدًا لتشغيل التطبيق للمرة الأولى.

يمكنك توصيل جهاز Android عبر USB بجهاز الكمبيوتر والنقر على تشغيل ( تنفيذ) في شريط أدوات "استوديو Android".

5518972c21705945.png

3- العثور على نموذج مدرَّب مسبقًا

لإجراء تصنيف الصوت، ستحتاج إلى نموذج. ابدأ بنموذج مدرّب مسبقًا حتى لا تضطر إلى تدريب واحد بنفسك.

للعثور على نماذج مدرَّبة مسبقًا، يمكنك استخدام TensorFlow Hub ( www.tfhub.dev).

91e39900ff58818c.png

يتم تصنيف النماذج حسب النطاقات. النطاق الذي تحتاجه الآن هو من نطاقات مشاكل الصوت.

9d44d38c297bf3dc.png

بالنسبة إلى تطبيقك، ستُجري تصنيف الحدث باستخدام نموذج YAMNet.

YAMNet هو مصنِّف للأحداث الصوتية يستخدم الموجات الصوتية كإدخال ويُنشئ توقعات مستقلة لكل حدث صوتي من 521 حدثًا.

تم تحويل النموذج yamnet/labelification من قبل إلى TensorFlow Lite ويحتوي على بيانات وصفية مُحدَّدة تمكّن مكتبة TFLite لمهمة الصوت من أجل تسهيل استخدام النموذج على الأجهزة الجوّالة.

65dc0f610eb27762.png

اختيار علامة التبويب المناسبة: TFLite (yamnet/classification/tflite) والنقر على تنزيل يمكنك أيضًا رؤية البيانات الوصفية للنموذج في الجزء السفلي.

cfb3cfeb310e1f51.png

سيتم استخدام ملف النموذج هذا (lite-model_yamnet_classification_tflite_1.tflite) في الخطوة التالية.

4. استيراد النموذج الجديد إلى التطبيق الأساسي

تتمثل الخطوة الأولى في نقل النموذج الذي تم تنزيله من الخطوة السابقة إلى مجلد مواد العرض في تطبيقك.

في "استوديو Android"، في مستكشف المشاريع، انقر بزر الماوس الأيمن على مجلد مواد العرض.

7cca2c22ed8cf4c8.png

ستظهر لك نافذة منبثقة تعرِض قائمة بالخيارات. وستكون إحدى هذه الخطوات هي فتح المجلد في نظام الملفات. وعلى نظام التشغيل Mac، ستظهر علامة التبويب Reveal in Finder على نظام التشغيل Mac، أما على Windows، فسيتم فتح القسم Open in Explorer (فتح في Explorer)، أما بالنسبة إلى Ubuntu، فسيتم اختيار Show in Files (عرض في الملفات). ابحث عن التطبيق المناسب لنظام التشغيل وحدده.

95e0eca881d35f6b.png

وبعد ذلك، انسخ النموذج الذي تم تنزيله إليه.

عند الانتهاء من ذلك، ارجع إلى "استوديو Android"، ومن المفترض أن يظهر لك ملفك في مجلد مواد العرض.

703b1842fb09e893.png

5. تحميل النموذج الجديد على التطبيق الأساسي

والآن، عليك اتّباع بعض المهام وإتاحة تصنيف الصوت باستخدام النموذج الذي أضفته للتو إلى المشروع في الخطوة السابقة.

لتسهيل العثور على المهام، في استوديو Android، انتقل إلى القائمة: عرض &gt؛ أداة Windows &gt؛ ytc. سيؤدي ذلك إلى فتح نافذة تتضمّن القائمة، ويمكنك النقر عليها للانتقال مباشرةً إلى الرمز.

ستعثر على المهمة الأولى في الملف build.gradle (إصدار الوحدة).

يتمثل المهام الإصدار 1 في إضافة تبعيات Android:

implementation 'org.tensorflow:tensorflow-lite-task-audio:0.2.0'

سيتم تنفيذ جميع تغييرات الرمز المتبقية على MainActivity.

ينشئ المهام الإصدار 2.1 المتغير مع اسم النموذج لتحميله في الخطوات التالية.

var modelPath = "lite-model_yamnet_classification_tflite_1.tflite"

المهام المطلوبة من النموذج 2.2 تحديد الحد الأدنى لقبول توقع من النموذج. سيتم استخدام هذا المتغيّر لاحقًا.

var probabilityThreshold: Float = 0.3f

المهام الإصدار 2.3 هي المكان الذي يمكنك من خلاله تحميل النموذج من مجلد مواد العرض. تم تحضير صف الصوت التالي في مكتبة مهام الصوت لتحميل النموذج وتوفير جميع الطرق اللازمة لتشغيل الاستنتاجات والمساعدة في إنشاء مسجل الصوت.

val classifier = AudioClassifier.createFromFile(this, modelPath)

6- التقاط الصوت

توفّر واجهة برمجة تطبيقات "مهام الصوت" بعض الطرق المساعدة لمساعدتك في إنشاء مسجّلة صوتية من خلال الضبط الصحيح الذي يتوقّعه النموذج الذي تستخدمه (على سبيل المثال: معدل نقل البيانات، معدل نقل البيانات، عدد القنوات). باستخدام هذا، لا تحتاج إلى العثور عليه يدويًا وإنشاء كائنات الإعداد أيضًا.

قائمة الإصدار 3.1: يمكنك إنشاء متغيّر الموتِّر الذي سيخزِّن التسجيل لكي يتم استنتاجه وإنشاء مواصفات التنسيق للمسجِّلة.

val tensor = classifier.createInputTensorAudio()

إصدار 3.2: يعرض مواصفات مسجّل الصوت الذي تم تحديده من خلال البيانات الوصفية للطراز في الخطوة السابقة.

val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
       "Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs

92e81894674a5b0.png

قائمة التشغيل 3.3: أنشئ مسجِّل الصوت وابدأ التسجيل.

val record = classifier.createAudioRecord()
record.startRecording()

اعتبارًا من الآن، يستمع تطبيقك إلى ميكروفون هاتفك، ولكنه لا يستنتج أي شيء حتى الآن. وستعالج هذا الأمر في الخطوة التالية.

7- إضافة الاستنتاج إلى النموذج

في هذه الخطوة، ستضيف رمز الاستنتاج إلى تطبيقك وتعرضه على الشاشة. تحتوي الرمز على سلسلة محادثات موقِّت يتم تنفيذها كل نصف ثانية، ويعمل عليها هذا الاستنتاج.

تتضمن معلمات الطريقة scheduleAtFixedRate المدة التي تنتظرها لبدء التنفيذ والوقت بين تنفيذ المهمة المتعاقبة، في الرمز أدناه كل 500 مللي ثانية.

Timer().scheduleAtFixedRate(1, 500) {
...
}

المهام الإصدار 4.1 أضِف الرمز لاستخدام النموذج. عليك أولاً تحميل التسجيل في موتّر صوت ثم تمريره إلى أداة التصنيف:

tensor.load(record)
val output = classifier.classify(tensor)

إجراء 4.2 للحصول على نتائج استنتاج أفضل، ستتمكّن من فلترة أي تصنيف له احتمالية منخفضة جدًا. ستستخدم هنا "المتغيّر" الذي تم إنشاؤه في خطوة سابقة (probabilityThreshold):

val filteredModelOutput = output[0].categories.filter {
   it.score > probabilityThreshold
}

قائمة 4.3: لتسهيل قراءة النتيجة، عليك إنشاء سلسلة تحتوي على النتائج المفلترة:

val outputStr = filteredModelOutput.sortedBy { -it.score }
   .joinToString(separator = "\n") { "${it.label} -> ${it.score} " }

إصدار 4.4 تحديث واجهة المستخدم. في هذا التطبيق البسيط جدًا، يتم عرض النتيجة فقط في TextView. نظرًا لعدم وجود التصنيف في سلسلة التعليمات الرئيسية، ستحتاج إلى استخدام المعالج لإجراء هذا التحديث.

runOnUiThread {
   textView.text = outputStr
}

لقد أضفت جميع الرموز اللازمة إلى:

  • تحميل النموذج من مجلد مواد العرض
  • إنشاء مسجّل صوتي باستخدام الإعدادات الصحيحة
  • استنتاج قيد التشغيل
  • عرض أفضل النتائج على الشاشة

كل ما يحتاج إليه الآن هو اختبار التطبيق.

8- تشغيل التطبيق النهائي

لقد دمجت نموذج التصنيف الصوتي في التطبيق، لذا لنختبره.

يمكنك الاتصال بجهاز Android، ثم النقر على "تشغيل" (تنفيذ) في شريط أدوات "استوديو Android".

في عملية التنفيذ الأولى، ستحتاج إلى منح أذونات التسجيل الصوتي للتطبيق.

بعد منح الإذن، سيستخدم التطبيق في البداية ميكروفون الهاتف. للاختبار، ابدأ بالتحدث بالقرب من الهاتف لأن أحد الصفوف التي تكتشفها YAMNet هو الكلام. ومن المهام الأخرى التي يسهل اختبارها اختبار لعق الأصابع أو تصفيقها.

يمكنك أيضًا محاولة اكتشاف نباح الكلاب وغير ذلك من الأحداث المحتملة الأخرى (521). للحصول على قائمة كاملة، يمكنك الاطّلاع على رمز المصدر أو يمكنك أيضًا قراءة البيانات الوصفية مع ملف التصنيفات مباشرة.

33af0fdb0a027fa8.png

9- تهانينا.

في هذا الدرس التطبيقي حول الترميز، تعلّمت كيفية العثور على نموذج مدرّب مسبقًا لتصنيف الصوت ونشره في تطبيقك المتوافق مع الأجهزة الجوّالة باستخدام TensorFlow Lite. للتعرّف على مزيد من المعلومات عن TFLite، يمكنك الاطّلاع على عيّنات TFLite الأخرى.

المواضيع التي تناولناها

  • كيفية نشر نموذج TensorFlow Lite على تطبيق Android.
  • كيفية العثور على النماذج واستخدامها من TensorFlow Hub

الخطوات التالية

  • خصِّص النموذج باستخدام بياناتك.

مزيد من المعلومات

هل لديك أي أسئلة؟

الإبلاغ عن المشاكل