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

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

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

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

  • معالجة الصوت الذي تم إدخاله، مثل تحويل ترميز PCM 16 بت إلى PCM الترميز العائم والتلاعب بالمخزن المؤقت لحلقة الصوت.

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

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

  • إتاحة كل من التصنيف الأحادي والتصنيف المتعدّد التصنيفات.

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

  • نتائج تصنيف أعلى 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.

تنفيذ الاستنتاج في بايثون

الخطوة 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-s مع النوع TENSOR_AXIS_LABELS، تتضمن تصنيفًا واحدًا في كل سطر. الأول من نوعه يتم استخدام AssociatedFile (إن وُجد) لملء الحقل label (باسم class_name في C++) للنتائج. الحقل display_name ممتلئة. من الملف المرتبط (إن وُجد) الذي تتطابق لغته مع الحقل display_names_locale من AudioClassifierOptions المستخدم في وقت الإنشاء ("en" تلقائيًا، أي الإنجليزية). إذا لم يكن أي منها المتاحة، سيتم ملء حقل index فقط من النتائج.