دليل تصنيف الصوت في بايثون

تتيح لك مهمة MediaPipe Audio Classife تصنيف البيانات الصوتية. يمكنك استخدام هذه المهمة لتحديد الأحداث الصوتية من مجموعة من الفئات المدرَّبة. توضح لك هذه التعليمات كيفية استخدام "مصنِّف الصوت" مع بايثون.

للحصول على مزيد من المعلومات حول الإمكانيات والنماذج وخيارات الإعداد لهذه المهمة، يُرجى الاطّلاع على نظرة عامة.

مثال الرمز البرمجي

يوفر الرمز النموذجي لمصنِّف الصوت تنفيذًا كاملاً لهذه المهمة في بايثون كمرجع لك. تساعدك هذه التعليمة البرمجية في اختبار هذه المهمة والبدء في إنشاء مصنف خاص بك للصوت. يمكنك عرض أداة تصنيف الصوت example code وتشغيلها وتعديلها باستخدام متصفّح الويب فقط مع Google Colab. يمكنك الاطّلاع على رمز المصدر لهذا المثال على GitHub.

في حال تنفيذ مُصنِّف الصوت لنظام Raspberry Pi، يُرجى الرجوع إلى التطبيق المثالي لـ Raspberry Pi.

ضبط إعدادات الجهاز

يصف هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير ومشاريع الرموز البرمجية لاستخدام "مصنِّف الصوت" تحديدًا. للحصول على معلومات عامة حول إعداد بيئة التطوير لاستخدام مهام MediaPipe، بما في ذلك متطلبات إصدار النظام الأساسي، راجع دليل إعداد Python.

الطرود

تمثِّل أداة "مصنِّف الصوت" حزمة بروتوكول نقطة الأشرطة للوسائط. يمكنك تثبيت التبعية باستخدام ما يلي:

$ python -m pip install mediapipe

عمليات الاستيراد

قم باستيراد الفئات التالية للوصول إلى وظائف مهمة "أداة تصنيف الصوت":

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio

الطراز

تتطلب مهمة MediaPipe Audio Classife نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. للحصول على مزيد من المعلومات حول النماذج المدربة المتاحة لأداة "تصنيف الصوت"، راجِع قسم النماذج الذي يقدّم نظرة عامة على المهمة.

اختَر النموذج ونزِّله، ثم خزِّنه في دليل محلي. يمكنك استخدام نموذج Yamnet المقترح.

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 Scriptr 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، ثم تحويلها إلى كائن AudioDataMediaPipe. يمكنك استخدام مكتبة خارجية مثل 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)
    

تنفيذ المهمة

يمكنك استدعاء دالة التصنيف المقابلة لوضع التشغيل لديك لتقديم الاستنتاجات. تعرض واجهة برمجة التطبيقات لمصنِّف الصوت الفئات المحتملة للأحداث الصوتية ضمن المخزن المؤقت للصوت المدخل.

مقاطع صوتية

# 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

يوضح الرمز "مثال عن مصنف الصوت" كيفية عرض نتائج التصنيف الناتجة عن هذه المهمة، راجع مثال الرمز البرمجي للحصول على التفاصيل.