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

تتيح لك مهمة مصنِّف الصوت 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

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