وتصنيف الصوت هو حالة استخدام شائعة للتعلم الآلي لتصنيف أنواع الصوت. على سبيل المثال، يمكنها تحديد أنواع الطيور من خلال أغانيها.
يمكن استخدام واجهة برمجة تطبيقات AudioClassifier
في "مكتبة المهام" لنشر المحتوى الصوتي المخصّص.
المصنِّفات أو المصنِّفات المُدرَّبة مسبقًا في تطبيقك للأجهزة الجوّالة.
الميزات الرئيسية في AudioClassifier API
معالجة الصوت الذي تم إدخاله، مثل تحويل ترميز PCM 16 بت إلى PCM الترميز العائم والتلاعب بالمخزن المؤقت لحلقة الصوت.
تصنيف لغة الخريطة.
إتاحة نموذج التصنيف متعدد الرؤوس.
إتاحة كل من التصنيف الأحادي والتصنيف المتعدّد التصنيفات.
الحد الأدنى للنتيجة لفلترة النتائج.
نتائج تصنيف أعلى k.
القائمة المسموح بها للتصنيفات وقائمة الحظر.
نماذج المصنِّفات الصوتية المتوافقة
نؤكّد أنّ النماذج التالية متوافقة مع AudioClassifier
.
واجهة برمجة التطبيقات.
نماذج أنشأها TensorFlow Lite model Maker لتصنيف الصوت.
تشير رسالة الأشكال البيانية نماذج تصنيف الأحداث الصوتية المدرَّبة مسبقًا على TensorFlow Hub
تتوافق النماذج المخصصة التي تلبي متطلبات توافق النموذج.
تنفيذ الاستنتاج باستخدام 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
فقط من النتائج.
- تمثّل المصفوفة