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

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

يمكن استخدام واجهة برمجة تطبيقات تصنيف الصوت AudioClassifier المهام لنشر المصنفات الصوتية المخصصة الخاصة بك أو المصنفات المسبقة في تطبيق الهاتف المحمول الخاص بك.

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

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

  • لغة خريطة التسمية.

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

  • دعم التصنيف الفردي والمتعدد الملصقات.

  • عتبة النتيجة لتصفية النتائج.

  • نتائج تصنيف Top-k.

  • تسمية allowlist و denylist.

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

النماذج التالية مضمونة لتكون متوافقة مع AudioClassifier API.

تشغيل الاستدلال في 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 (NNAPI is included)
    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: استخدام النموذج

سويفت

// 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)
        }
    }
}

ج موضوعية

// 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 install tflite-support
  • Linux: قم بتشغيل sudo apt-get update && apt-get install libportaudio2
  • Mac و Windows: يتم تثبيت PortAudio تلقائيًا عند تثبيت حزمة نقطة tflite-support .

الخطوة 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 .

متطلبات توافق النموذج

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

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

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

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

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