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

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

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

ویژگی های کلیدی AudioClassifier API

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

  • محل نقشه را برچسب بزنید.

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

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

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

  • نتایج طبقه بندی Top-k

  • لیست مجاز و رد لیست را برچسب بزنید.

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

سازگاری مدل های زیر با AudioClassifier API تضمین شده است.

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

برای مثال با استفاده از 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);

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

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

مرحله 1: وابستگی ها را نصب کنید

Task Library از نصب با استفاده از 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)
        }
    }
}

هدف-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
  • لینوکس: اجرای sudo apt-get update && apt-get install libportaudio2
  • مک و ویندوز: PortAudio به طور خودکار هنگام نصب بسته pip 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 به کد منبع مراجعه کنید.

الزامات سازگاری مدل

AudioClassifier API یک مدل 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 از AssociatedFile (در صورت وجود) پر می شود که منطقه آن با فیلد display_names_locale از AudioClassifierOptions استفاده شده در زمان ایجاد ("en" به طور پیش فرض، یعنی انگلیسی) مطابقت دارد. اگر هیچ یک از اینها در دسترس نباشد، فقط قسمت index نتایج پر می شود.