Die Audio-Klassifizierung ist ein häufiger Anwendungsfall von maschinellem Lernen, um die Soundtypen zu klassifizieren. So kann sie beispielsweise Vogelarten anhand ihrer Gesänge identifizieren.
Mit der Task Library AudioClassifier API können Sie Ihre benutzerdefinierten oder vortrainierten Audio-Klassifizierer in Ihrer mobilen App bereitstellen.
Wichtige Funktionen der AudioClassifier API
Verarbeitung von Audioeingaben, z.B. Konvertierung von PCM-16-Bit-Codierung in PCM-Float-Codierung und Bearbeitung des Audio-Ringpuffers.
Gebietsschema für Labelkarte.
Unterstützung von Multi-Head-Klassifizierungsmodellen.
Unterstützt die Klassifizierung mit einem einzelnen und mehreren Labels.
Schwellenwert für die Punktzahl zum Filtern von Ergebnissen.
Die k besten Klassifizierungsergebnisse.
Zulassungs- und Sperrliste für Labels.
Unterstützte Modelle für die Audio-Klassifizierung
Die folgenden Modelle sind garantiert mit der AudioClassifier API kompatibel.
Modelle, die mit TensorFlow Lite Model Maker for Audio Classification erstellt wurden.
Vortrainierte Modelle zur Klassifizierung von Audioereignissen in TensorFlow Hub
Benutzerdefinierte Modelle, die die Anforderungen an die Modellkompatibilität erfüllen.
Inferenz in Java ausführen
Ein Beispiel für die Verwendung von AudioClassifier in einer Android-App finden Sie in der Referenz-App zur Audio-Klassifizierung.
Schritt 1: Gradle-Abhängigkeit und andere Einstellungen importieren
Kopieren Sie die Modelldatei .tflite in das Assets-Verzeichnis des Android-Moduls, in dem das Modell ausgeführt wird. Geben Sie an, dass die Datei nicht komprimiert werden soll, und fügen Sie die TensorFlow Lite-Bibliothek der build.gradle-Datei des Moduls hinzu:
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'
}
Schritt 2: Modell verwenden
// 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);
Weitere Optionen zum Konfigurieren von AudioClassifier finden Sie im Quellcode und in der Javadoc.
Inferenz auf iOS-Geräten ausführen
Schritt 1: Abhängigkeiten installieren
Die Task Library unterstützt die Installation mit CocoaPods. Prüfen Sie, ob CocoaPods auf Ihrem System installiert ist. Eine Anleitung finden Sie im CocoaPods-Installationsleitfaden.
Weitere Informationen zum Hinzufügen von Pods zu einem Xcode-Projekt finden Sie im CocoaPods-Leitfaden.
Fügen Sie den TensorFlowLiteTaskAudio-Pod in die Podfile ein.
target 'MyAppWithTaskAPI' do
use_frameworks!
pod 'TensorFlowLiteTaskAudio'
end
Achten Sie darauf, dass das .tflite-Modell, das Sie für die Inferenz verwenden, in Ihrem App-Bundle enthalten ist.
Schritt 2: Modell verwenden
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];
});
}
}];
Weitere Optionen zum Konfigurieren von TFLAudioClassifier finden Sie im Quellcode.
Inferenz in Python ausführen
Schritt 1: pip-Paket installieren
pip install tflite-support
- Linux: Führen Sie
sudo apt-get update && apt-get install libportaudio2aus. - Mac und Windows: PortAudio wird automatisch installiert, wenn das
tflite-support-PIP-Paket installiert wird.
Schritt 2: Modell verwenden
# 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)
Weitere Optionen zum Konfigurieren von AudioClassifier finden Sie im Quellcode.
Inferenz in C++ ausführen
// 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();
Weitere Optionen zum Konfigurieren von AudioClassifier finden Sie im Quellcode.
Anforderungen an die Modellkompatibilität
Für die AudioClassifier API ist ein TFLite-Modell mit obligatorischen TFLite-Modellmetadaten erforderlich. Hier finden Sie Beispiele für das Erstellen von Metadaten für Audio-Klassifizierer mit der TensorFlow Lite Metadata Writer API.
Die kompatiblen Audio-Klassifizierungsmodelle sollten die folgenden Anforderungen erfüllen:
Eingabe-Audio-Tensor (kTfLiteFloat32)
- Audioclip mit einer Größe von
[batch x samples]. - Die Batch-Inferenz wird nicht unterstützt (
batchmuss 1 sein). - Bei Modellen mit mehreren Channels müssen die Channels verschachtelt sein.
- Audioclip mit einer Größe von
Tensor für Ausgabebereich (kTfLiteFloat32)
[1 x N]-Array mitNsteht für die Klassennummer.- Optionale (aber empfohlene) Labelzuordnung(en) als AssociatedFile-s mit dem Typ TENSOR_AXIS_LABELS, die ein Label pro Zeile enthalten. Die erste solche AssociatedFile (falls vorhanden) wird verwendet, um das Feld
label(in C++ alsclass_namebezeichnet) der Ergebnisse zu füllen. Das Felddisplay_namewird aus der AssociatedFile (falls vorhanden) gefüllt, deren Gebietsschema mit dem Felddisplay_names_localedes bei der Erstellung verwendetenAudioClassifierOptionsübereinstimmt (standardmäßig „en“, also Englisch). Wenn keine dieser Informationen verfügbar sind, wird nur das Feldindexder Ergebnisse ausgefüllt.