دمج المصنِّفات الصوتية

تصنيف الصوت هو حالة استخدام شائعة لتعلُّم الآلة بهدف تصنيف أنواع الأصوات. على سبيل المثال، يمكنه تحديد أنواع الطيور من خلال أغانيها.

يمكن استخدام واجهة برمجة التطبيقات AudioClassifier الخاصة بمكتبة Task Library لنشر مصنّفات الصوت المخصّصة أو المصنّفات المُدرَّبة مسبقًا في تطبيقك على الأجهزة الجوّالة.

الميزات الرئيسية في AudioClassifier API

  • معالجة الصوت المُدخَل، مثل تحويل ترميز PCM 16 بت إلى ترميز PCM Float ومعالجة مخزن مؤقت حلقي للصوت

  • لغة خريطة التصنيفات

  • إتاحة نموذج التصنيف المتعدّد الرؤوس

  • يتيح التصنيف باستخدام تصنيف واحد أو تصنيفات متعددة.

  • الحد الأدنى للنتيجة لفلترة النتائج.

  • أفضل k نتائج للتصنيف

  • القائمة المسموح بها والقائمة المرفوضة للتصنيفات

نماذج تصنيف الصوت المتوافقة

نضمن توافق الطُرز التالية مع واجهة برمجة التطبيقات AudioClassifier.

تشغيل الاستنتاج في Java

يمكنك الاطّلاع على تطبيق مرجعي لتصنيف الصوت للحصول على مثال على استخدام AudioClassifier في تطبيق Android.

الخطوة 1: استيراد تبعية Gradle والإعدادات الأخرى

انسخ ملف نموذج .tflite إلى دليل مواد العرض الخاص بوحدة Android التي سيتم تشغيل النموذج فيها. حدِّد أنّه يجب عدم ضغط الملف، وأضِف مكتبة TensorFlow Lite إلى ملف build.gradle الخاص بالوحدة:

android {
    // Other settings

    // Specify that the tflite file should not be compressed when building the APK package.
    aaptOptions {
        noCompress "tflite"
    }
}

dependencies {
    // Other dependencies

    // Import the Audio Task Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-audio:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

الخطوة 2: استخدام النموذج

// Initialization
AudioClassifierOptions options =
    AudioClassifierOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setMaxResults(1)
        .build();
AudioClassifier classifier =
    AudioClassifier.createFromFileAndOptions(context, modelFile, options);

// Start recording
AudioRecord record = classifier.createAudioRecord();
record.startRecording();

// Load latest audio samples
TensorAudio audioTensor = classifier.createInputTensorAudio();
audioTensor.load(record);

// Run inference
List<Classifications> results = audioClassifier.classify(audioTensor);

يمكنك الاطّلاع على رمز المصدر وjavadoc لمعرفة المزيد من الخيارات لإعداد AudioClassifier.

تنفيذ الاستدلال في نظام التشغيل iOS

الخطوة 1: تثبيت التبعيات

تتيح "مكتبة المهام" إمكانية التثبيت باستخدام CocoaPods. تأكَّد من تثبيت CocoaPods على نظامك. يُرجى الاطّلاع على دليل تثبيت CocoaPods للحصول على التعليمات.

يُرجى الاطّلاع على دليل CocoaPods لمعرفة تفاصيل حول إضافة وحدات إلى مشروع Xcode.

أضِف مجموعة الإعلانات المتسلسلة TensorFlowLiteTaskAudio في ملف Podfile.

target 'MyAppWithTaskAPI' do
  use_frameworks!
  pod 'TensorFlowLiteTaskAudio'
end

تأكَّد من أنّ نموذج .tflite الذي ستستخدمه للاستدلال مضمّن في حِزمة تطبيقك.

الخطوة 2: استخدام النموذج

Swift

// Imports
import TensorFlowLiteTaskAudio
import AVFoundation

// Initialization
guard let modelPath = Bundle.main.path(forResource: "sound_classification",
                                            ofType: "tflite") else { return }

let options = AudioClassifierOptions(modelPath: modelPath)

// Configure any additional options:
// options.classificationOptions.maxResults = 3

let classifier = try AudioClassifier.classifier(options: options)

// Create Audio Tensor to hold the input audio samples which are to be classified.
// Created Audio Tensor has audio format matching the requirements of the audio classifier.
// For more details, please see:
// https://github.com/tensorflow/tflite-support/blob/master/tensorflow_lite_support/ios/task/audio/core/audio_tensor/sources/TFLAudioTensor.h
let audioTensor = classifier.createInputAudioTensor()

// Create Audio Record to record the incoming audio samples from the on-device microphone.
// Created Audio Record has audio format matching the requirements of the audio classifier.
// For more details, please see:
https://github.com/tensorflow/tflite-support/blob/master/tensorflow_lite_support/ios/task/audio/core/audio_record/sources/TFLAudioRecord.h
let audioRecord = try classifier.createAudioRecord()

// Request record permissions from AVAudioSession before invoking audioRecord.startRecording().
AVAudioSession.sharedInstance().requestRecordPermission { granted in
    if granted {
        DispatchQueue.main.async {
            // Start recording the incoming audio samples from the on-device microphone.
            try audioRecord.startRecording()

            // Load the samples currently held by the audio record buffer into the audio tensor.
            try audioTensor.load(audioRecord: audioRecord)

            // Run inference
            let classificationResult = try classifier.classify(audioTensor: audioTensor)
        }
    }
}

Objective-C

// Imports
#import <TensorFlowLiteTaskAudio/TensorFlowLiteTaskAudio.h>
#import <AVFoundation/AVFoundation.h>

// Initialization
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"sound_classification" ofType:@"tflite"];

TFLAudioClassifierOptions *options =
    [[TFLAudioClassifierOptions alloc] initWithModelPath:modelPath];

// Configure any additional options:
// options.classificationOptions.maxResults = 3;

TFLAudioClassifier *classifier = [TFLAudioClassifier audioClassifierWithOptions:options
                                                                          error:nil];

// Create Audio Tensor to hold the input audio samples which are to be classified.
// Created Audio Tensor has audio format matching the requirements of the audio classifier.
// For more details, please see:
// https://github.com/tensorflow/tflite-support/blob/master/tensorflow_lite_support/ios/task/audio/core/audio_tensor/sources/TFLAudioTensor.h
TFLAudioTensor *audioTensor = [classifier createInputAudioTensor];

// Create Audio Record to record the incoming audio samples from the on-device microphone.
// Created Audio Record has audio format matching the requirements of the audio classifier.
// For more details, please see:
https://github.com/tensorflow/tflite-support/blob/master/tensorflow_lite_support/ios/task/audio/core/audio_record/sources/TFLAudioRecord.h
TFLAudioRecord *audioRecord = [classifier createAudioRecordWithError:nil];

// Request record permissions from AVAudioSession before invoking -[TFLAudioRecord startRecordingWithError:].
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
    if (granted) {
        dispatch_async(dispatch_get_main_queue(), ^{
            // Start recording the incoming audio samples from the on-device microphone.
            [audioRecord startRecordingWithError:nil];

            // Load the samples currently held by the audio record buffer into the audio tensor.
            [audioTensor loadAudioRecord:audioRecord withError:nil];

            // Run inference
            TFLClassificationResult *classificationResult =
                [classifier classifyWithAudioTensor:audioTensor error:nil];

        });
    }
}];

يمكنك الاطّلاع على رمز المصدر لمعرفة المزيد من الخيارات لإعداد TFLAudioClassifier.

تشغيل الاستنتاج في Python

الخطوة 1: تثبيت حزمة pip

pip install tflite-support
  • ‫Linux: تشغيل sudo apt-get update && apt-get install libportaudio2
  • في نظامَي التشغيل Mac وWindows: يتم تثبيت PortAudio تلقائيًا عند تثبيت حزمة tflite-support pip.

الخطوة 2: استخدام النموذج

# Imports
from tflite_support.task import audio
from tflite_support.task import core
from tflite_support.task import processor

# Initialization
base_options = core.BaseOptions(file_name=model_path)
classification_options = processor.ClassificationOptions(max_results=2)
options = audio.AudioClassifierOptions(base_options=base_options, classification_options=classification_options)
classifier = audio.AudioClassifier.create_from_options(options)

# Alternatively, you can create an audio classifier in the following manner:
# classifier = audio.AudioClassifier.create_from_file(model_path)

# Run inference
audio_file = audio.TensorAudio.create_from_wav_file(audio_path, classifier.required_input_buffer_size)
audio_result = classifier.classify(audio_file)

يمكنك الاطّلاع على رمز المصدر لمعرفة المزيد من الخيارات لإعداد AudioClassifier.

تشغيل الاستدلال في C++‎

// Initialization
AudioClassifierOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<AudioClassifier> audio_classifier = AudioClassifier::CreateFromOptions(options).value();

// Create input audio buffer from your `audio_data` and `audio_format`.
// See more information here: tensorflow_lite_support/cc/task/audio/core/audio_buffer.h
int input_size = audio_classifier->GetRequiredInputBufferSize();
const std::unique_ptr<AudioBuffer> audio_buffer =
    AudioBuffer::Create(audio_data, input_size, audio_format).value();

// Run inference
const ClassificationResult result = audio_classifier->Classify(*audio_buffer).value();

يمكنك الاطّلاع على رمز المصدر لمعرفة المزيد من الخيارات لإعداد AudioClassifier.

متطلبات التوافق مع الطراز

تتوقّع واجهة برمجة التطبيقات AudioClassifier نموذج TFLite يتضمّن بيانات وصفية إلزامية لنموذج TFLite. يمكنك الاطّلاع على أمثلة حول إنشاء بيانات وصفية لمصنّفات الصوت باستخدام TensorFlow Lite Metadata Writer API.

يجب أن تستوفي نماذج تصنيف الصوت المتوافقة المتطلبات التالية:

  • موتر الصوت المُدخَل (kTfLiteFloat32)

    • مقطع صوتي بحجم [batch x samples]
    • لا تتوفّر الاستدلالات المجمّعة (يجب أن تكون قيمة batch هي 1).
    • بالنسبة إلى النماذج المتعددة القنوات، يجب أن تكون القنوات متداخلة.
  • موتر النتيجة الناتج (kTfLiteFloat32)

    • تمثّل المصفوفة [1 x N] التي تتضمّن N رقم الصف.
    • خرائط التصنيفات الاختيارية (ولكن يُنصح بها) كملفات AssociatedFile من النوع TENSOR_AXIS_LABELS، تحتوي على تصنيف واحد لكل سطر يتم استخدام أول AssociatedFile (إن وُجد) من هذا النوع لملء الحقل label (المسمّى class_name في C++) الخاص بالنتائج. يتم ملء الحقل display_name من AssociatedFile (إن وُجد) الذي تتطابق لغته مع الحقل display_names_locale في AudioClassifierOptions المستخدَم عند وقت الإنشاء (القيمة التلقائية هي "en"، أي الإنجليزية). إذا لم يتوفّر أي من هذه الحقول، سيتم ملء حقل index فقط في النتائج.