ادغام طبقه بندی کننده های صوتی

طبقه‌بندی صدا یک مورد استفاده رایج از یادگیری ماشین برای طبقه‌بندی انواع صدا است. به عنوان مثال، می‌تواند گونه‌های پرندگان را از روی آواز آنها شناسایی کند.

API مربوط به Task Library AudioClassifier می‌تواند برای پیاده‌سازی طبقه‌بندی‌کننده‌های صوتی سفارشی یا از پیش آموزش‌دیده در برنامه تلفن همراه شما استفاده شود.

ویژگی‌های کلیدی رابط برنامه‌نویسی کاربردی طبقه‌بندی صوتی (AudioClassifier API)

  • پردازش صدای ورودی، مثلاً تبدیل کدگذاری PCM 16 بیتی به کدگذاری PCM Float و دستکاری بافر حلقه صوتی.

  • برچسب‌گذاری محل نقشه.

  • پشتیبانی از مدل طبقه‌بندی چند سر.

  • پشتیبانی از طبقه‌بندی تک برچسبی و چند برچسبی.

  • آستانه امتیاز برای فیلتر کردن نتایج.

  • نتایج طبقه‌بندی k برتر.

  • برچسب‌گذاری لیست مجاز و لیست ممنوع.

مدل‌های طبقه‌بندی صوتی پشتیبانی‌شده

مدل‌های زیر تضمین می‌کنند که با رابط برنامه‌نویسی کاربردی (API) AudioClassifier ​​سازگار باشند.

اجرای استنتاج در جاوا

برای مثالی از استفاده از AudioClassifier در یک برنامه اندروید، به برنامه مرجع طبقه‌بندی صوتی مراجعه کنید.

مرحله ۱: وارد کردن وابستگی Gradle و سایر تنظیمات

فایل مدل .tflite را در دایرکتوری assets ماژول اندروید که مدل در آن اجرا خواهد شد، کپی کنید. مشخص کنید که فایل نباید فشرده شود و کتابخانه 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'
}

مرحله ۲: استفاده از مدل

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

برای گزینه‌های بیشتر برای پیکربندی AudioClassifier به کد منبع و javadoc مراجعه کنید.

اجرای استنتاج در iOS

مرحله ۱: نصب وابستگی‌ها

کتابخانه وظایف (Task Library) از نصب با استفاده از CocoaPods پشتیبانی می‌کند. مطمئن شوید که CocoaPods روی سیستم شما نصب شده است. لطفاً برای دستورالعمل‌ها به راهنمای نصب CocoaPods مراجعه کنید.

برای جزئیات بیشتر در مورد افزودن پاد به یک پروژه Xcode، لطفاً به راهنمای CocoaPods مراجعه کنید.

غلاف TensorFlowLiteTaskAudio را در Podfile اضافه کنید.

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

مطمئن شوید که مدل .tflite که برای استنتاج استفاده خواهید کرد، در بسته برنامه شما موجود است.

مرحله ۲: استفاده از مدل

سویفت

// 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 به کد منبع مراجعه کنید.

اجرای استنتاج در پایتون

مرحله ۱: نصب بسته pip

pip install tflite-support
  • لینوکس: sudo apt-get update && apt-get install libportaudio2 را اجرا کنید.
  • مک و ویندوز: PortAudio هنگام نصب بسته pip tflite-support به طور خودکار نصب می‌شود.

مرحله ۲: استفاده از مدل

# 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 API) انتظار یک مدل TFLite با فراداده‌های مدل TFLite اجباری را دارد. نمونه‌هایی از ایجاد فراداده برای طبقه‌بندی‌کننده‌های صوتی با استفاده از API نویسنده فراداده TensorFlow Lite را ببینید.

مدل‌های طبقه‌بندی صوتی سازگار باید الزامات زیر را برآورده کنند:

  • تانسور صدای ورودی (kTfLiteFloat32)

    • کلیپ صوتی با اندازه [batch x samples] .
    • استنتاج دسته‌ای پشتیبانی نمی‌شود ( batch باید ۱ باشد).
    • برای مدل‌های چند کاناله، کانال‌ها باید در هم آمیخته شوند.
  • تانسور امتیاز خروجی (kTfLiteFloat32)

    • آرایه [1 x N] با N نشان دهنده شماره کلاس است.
    • نقشه(های) برچسب اختیاری (اما توصیه‌شده) به صورت AssociatedFile-s با نوع TENSOR_AXIS_LABELS، شامل یک برچسب در هر خط. اولین AssociatedFile از این نوع (در صورت وجود) برای پر کردن فیلد label (که در C++ به عنوان class_name نامگذاری شده است) نتایج استفاده می‌شود. فیلد display_name از AssociatedFile (در صورت وجود) که زبان محلی آن با فیلد display_names_locale از AudioClassifierOptions استفاده شده در زمان ایجاد ("en" به طور پیش‌فرض، یعنی انگلیسی) مطابقت دارد، پر می‌شود. اگر هیچ یک از این موارد در دسترس نباشد، فقط فیلد index نتایج پر خواهد شد.