تتيح لك مهمة مصنِّف الصوت MediaPipe تصنيف البيانات الصوتية. يمكنك استخدِم هذه المهمة لتحديد الأحداث الصوتية من مجموعة من الفئات المدرَّبة. هذه سنشرح لك كيفية استخدام "مصنف الصوت" مع لغة بايثون.
مزيد من المعلومات حول الإمكانات والنماذج وخيارات الضبط هذه المهمة، راجع نظرة عامة.
مثال على الرمز البرمجي
ويقدِّم الرمز البرمجي لمصنّف الصوت مثالاً على ذلك المهمة في لغة بايثون كمرجع لك. يساعدك هذا الرمز في اختبار هذه المهمة والحصول على وبدأت في إنشاء مصنف صوتي خاص بك. يمكنك عرض ملف الدفع وتشغيله وتعديله مثال على أداة تصنيف الصوت الرمز باستخدام متصفح الويب مع Google Colab. يمكنك عرض رمز المصدر هذا المثال على GitHub.
إذا كنت تستخدم "مصنِّف الصوت" في Raspberry Pi، راجِع مثال Raspberry Pi التطبيق.
ضبط إعدادات الجهاز
يصف هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير لترميز البيانات خصيصًا لاستخدام "مصنِّف الصوت". للحصول على معلومات عامة عن إعداد بيئة التطوير الخاصة بك لاستخدام مهام MediaPipe، بما في ذلك متطلبات إصدار النظام الأساسي، راجع دليل إعداد Python
الطرود
مهمة مصنف الصوت مهمة حزمة Mediapi pip. يمكنك تثبيت مع ما يلي:
$ python -m pip install mediapipe
عمليات الاستيراد
عليك استيراد الفئات التالية للوصول إلى وظائف "مصنِّف الصوت":
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio
الطراز
تتطلّب مهمة "مصنِّف الصوت MediaPipe" نموذجًا مدرّبًا متوافقًا مع هذه المهمة. لمزيد من المعلومات حول النماذج المدرَّبة المتاحة لـ "مصنِّف الصوت"، يُرجى الاطّلاع على نظرة عامة على المهمة قسم النماذج.
اختَر نموذجًا ونزِّله ثم خزِّنه في دليل محلي. يمكنك استخدام الموصى بها اليمنيت الأمثل.
model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'
حدّد مسار النموذج ضمن معلمة اسم النموذج، كما هو موضح أدناه:
base_options = BaseOptions(model_asset_path=model_path)
إنشاء المهمة
استخدِم الدالة create_from_options
لإنشاء المهمة. تشير رسالة الأشكال البيانية
تقبل الدالة create_from_options
خيارات الإعداد، بما في ذلك خيارات التشغيل
الوضع، لغة الأسماء المعروضة، الحد الأقصى لعدد النتائج، الحد الأدنى للثقة،
وقائمة السماح بالفئات، وقائمة الحظر. لمزيد من المعلومات عن الإعدادات
اطلع على نظرة عامة على التهيئة.
تتيح مَهمّة "مصنِّف الصوت" استخدام المقاطع الصوتية وعمليات البث الصوتي كإدخال. إِنْتَ يجب تحديد وضع التشغيل المتوافق لنوع بيانات الإدخال عندما إنشاء المهمة. اختَر علامة التبويب المقابلة لنوع بيانات الإدخال المطلوب عرضها وكيفية إنشاء المهمة وتنفيذ الاستنتاج.
مقاطع صوتية
AudioClassifier = mp.tasks.audio.AudioClassifier AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions AudioRunningMode = mp.tasks.audio.RunningMode BaseOptions = mp.tasks.BaseOptions options = AudioClassifierOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), max_results=5, running_mode=AudioRunningMode.AUDIO_CLIPS) with AudioClassifier.create_from_options(options) as classifier: # The classifier is initialized. Use it here. # ...
بث صوتي
AudioClassifier = mp.tasks.audio.AudioClassifier AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions AudioClassifierResult = mp.tasks.audio.AudioClassifierResult AudioRunningMode = mp.tasks.audio.RunningMode BaseOptions = mp.tasks.BaseOptions def print_result(result: AudioClassifierResult, timestamp_ms: int): print(AudioClassifierResult result: {}’.format(result)) options = AudioClassifierOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), running_mode=AudioRunningMode.AUDIO_STREAM, max_results=5, result_callback=print_result) with AudioClassifier.create_from_options(options) as classifier: # The classifier is initialized. Use it here. # ...
للاطّلاع على مثال كامل حول إنشاء "مصنِّف صوتي" لاستخدامه مع المحتوى الصوتي، يُرجى مراجعة مقالة رمز مثال.
خيارات الإعداد
تشتمل هذه المهمة على خيارات الإعداد التالية لتطبيقات بايثون:
اسم الخيار | الوصف | نطاق القيمة | القيمة الافتراضية |
---|---|---|---|
running_mode |
لضبط وضع التشغيل للمهمة. يتضمّن "مصنِّف الصوت" وضعَين: AUDIO_CLIPS: وضع تشغيل مهمة الصوت على المقاطع الصوتية المستقلة. AUDIO_STREAM: وضع تشغيل المهمة الصوتية في بث صوتي، من الميكروفون مثلاً. في هذا الوضع، يجب أن يكون resultListener يتم استدعاؤها لإعداد أداة استماع لتلقي نتائج التصنيف بشكل غير متزامن. |
{AUDIO_CLIPS, AUDIO_STREAM } |
AUDIO_CLIPS |
display_names_locale |
لتعيين لغة التسميات لاستخدامها في الأسماء المعروضة المقدمة في
بيانات التعريف لنموذج المهمة، إن وجد. القيمة التلقائية هي en لمدة
الإنجليزية. يمكنك إضافة تصنيفات مترجَمة إلى البيانات الوصفية لنموذج مخصّص.
باستخدام TensorFlow Lite Metadata Writer API
| رمز اللغة | en |
max_results |
لضبط الحد الأقصى الاختياري لنتائج التصنيف الأعلى تقييمًا إرجاع. إذا كانت قيمة 0، سيتم عرض جميع النتائج المتاحة. | أي أرقام موجبة | -1 |
score_threshold |
لتعيين الحد الأدنى لنتيجة التنبؤ الذي يلغي الحد المقدم في بيانات التعريف للنموذج (إن وجدت). يتم رفض النتائج التي تكون أدنى من هذه القيمة. | [0.0، 1.0] | لم يتم ضبط الوضع |
category_allowlist |
تضبط هذه السياسة القائمة الاختيارية لأسماء الفئات المسموح بها. إذا لم تكن فارغة،
سيتم وضع نتائج التصنيف التي لا يوجد اسم فئته بها في هذه المجموعة
بفلترته. ويتم تجاهل أسماء الفئات المكرّرة أو غير المعروفة.
لا يمكن لأحد الطرفين استخدام هذا الخيار إلا بعد استخدام category_denylist .
يؤدي كلا الخيارين إلى خطأ. |
أي سلاسل | لم يتم ضبط الوضع |
category_denylist |
تحدِّد هذه السياسة القائمة الاختيارية لأسماء الفئات غير المسموح بها. في حال حذف
نتائج التصنيف التي يكون اسم فئتها في هذه المجموعة غير فارغة، ستتم فلترتها
. ويتم تجاهل أسماء الفئات المكرّرة أو غير المعروفة. يتوفّر هذا الخيار
حصرية مع category_allowlist واستخدام النتيجتين معًا إلى حدوث خطأ. |
أي سلاسل | لم يتم ضبط الوضع |
result_callback |
تعمل هذه السياسة على ضبط أداة معالجة النتائج لتلقّي نتائج التصنيف.
بشكل غير متزامن عندما يكون مصنف الصوت في البث الصوتي
الحالي. لا يمكن استخدام الإذن إلا عند ضبط "وضع التشغيل" على AUDIO_STREAM |
لا ينطبق | لم يتم ضبط الوضع |
تجهيز البيانات
يتوافق "مصنِّف الصوت" مع المقاطع الصوتية وعمليات البث الصوتي. تتعامل المهمة مع المعالجة المسبقة لإدخال البيانات، بما في ذلك إعادة أخذ العينات والتخزين المؤقت والتأطير.
قم بإعداد الإدخال كملف صوتي أو صفيفة numpy، ثم قم بتحويله إلى
كائن MediaPipe AudioData
. يمكنك استخدام مكتبة خارجية مثل
SciPy لتحميل مقاطع الصوت المدخلة على شكل صفائف numpy.
توضح الأمثلة التالية كيفية إعداد البيانات للمعالجة وتوضحها لكل نوع من أنواع البيانات المتاحة:
مقاطع صوتية
import numpy as np from scipy.io import wavfile AudioData = mp.tasks.components.containers.AudioData sample_rate, buffer = wavfile.read('/path/to/audio.wav') audio_data = AudioData.create_from_array( buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
بث صوتي
import numpy as np AudioData = mp.tasks.components.containers.AudioData # Read microphone data as np arrays, then call audio_data = AudioData.create_from_array( buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
تنفيذ المهمة
يمكنك استدعاء دالة التصنيف المقابلة لوضع الجري لبدء التشغيل والاستنتاجات. تعرض واجهة برمجة التطبيقات Audio Classifier API الفئات المحتملة للمحتوى الصوتي. الأحداث داخل المخزن المؤقت لصوت الإدخال.
مقاطع صوتية
# Perform audio classification on the provided audio clip. audio_classifier_result_list = classifier.classify(audio_data)
بث صوتي
# Send live audio data to perform audio classification. # Results are sent to the `result_callback` provided in the `AudioClassifierOptions` classifier.classify_async(audio_data, timestamp_ms)
يُرجى ملاحظة ما يلي:
- عند التشغيل في وضع البث الصوتي، يجب أيضًا توفير السمة تمثِّل مهمة "مصنِّف الصوت" الطابع الزمني لبيانات الإدخال الصوتي.
- عند تشغيله في نموذج المقاطع الصوتية، ستحظر مهمة "مصنِّف الصوت" سلسلة المحادثات الحالية إلى أن تنتهي من معالجة صوت الإدخال.
للاطلاع على مثال أكثر اكتمالاً حول تشغيل "مصنِّف الصوت" مع المقاطع الصوتية، راجع رمز مثال.
التعامل مع العملاء وعرض النتائج
عند تنفيذ الاستنتاج، تعرض مهمة "مصنِّف الصوت"
عنصر AudioClassifierResult
الذي يحتوي على قائمة الفئات المحتملة
للأحداث الصوتية ضمن الإدخال الصوتي.
في ما يلي مثال على بيانات الإخراج من هذه المهمة:
AudioClassifierResult:
Timestamp in microseconds: 100
ClassificationResult #0:
Timestamp in microseconds: 100
Classifications #0 (single classification head):
head index: 0
category #0:
category name: "Speech"
score: 0.6
index: 0
category #1:
category name: "Music"
score: 0.2
index: 1
يوضّح رمز نموذج "مصنِّف الصوت" طريقة عرض التصنيف التي تم إرجاعها من هذه المهمة، راجع التعليمة البرمجية مثال لمزيد من التفاصيل.