طبقهبندی صدا یک مورد استفاده رایج از یادگیری ماشین برای طبقهبندی انواع صدا است. به عنوان مثال، میتواند گونههای پرندگان را از روی آواز آنها شناسایی کند.
API مربوط به Task Library AudioClassifier میتواند برای پیادهسازی طبقهبندیکنندههای صوتی سفارشی یا از پیش آموزشدیده در برنامه تلفن همراه شما استفاده شود.
ویژگیهای کلیدی رابط برنامهنویسی کاربردی طبقهبندی صوتی (AudioClassifier API)
پردازش صدای ورودی، مثلاً تبدیل کدگذاری PCM 16 بیتی به کدگذاری PCM Float و دستکاری بافر حلقه صوتی.
برچسبگذاری محل نقشه.
پشتیبانی از مدل طبقهبندی چند سر.
پشتیبانی از طبقهبندی تک برچسبی و چند برچسبی.
آستانه امتیاز برای فیلتر کردن نتایج.
نتایج طبقهبندی k برتر.
برچسبگذاری لیست مجاز و لیست ممنوع.
مدلهای طبقهبندی صوتی پشتیبانیشده
مدلهای زیر تضمین میکنند که با رابط برنامهنویسی کاربردی (API) AudioClassifier سازگار باشند.
مدلهای ایجاد شده توسط TensorFlow Lite Model Maker برای طبقهبندی صدا .
مدلهای طبقهبندی رویدادهای صوتی از پیش آموزشدیده در TensorFlow Hub .
مدلهای سفارشی که الزامات سازگاری مدل را برآورده میکنند.
اجرای استنتاج در جاوا
برای مثالی از استفاده از 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نتایج پر خواهد شد.
- آرایه