Udhëzues për klasifikimin e audios për Python

Detyra MediaPipe Audio Classifier ju lejon të kryeni klasifikimin e të dhënave audio. Ju mund ta përdorni këtë detyrë për të identifikuar ngjarjet zanore nga një grup kategorish të trajnuara. Këto udhëzime ju tregojnë se si të përdorni Klasifikuesin Audio me Python.

Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .

Shembull kodi

Shembulli i kodit për Klasifikuesin Audio ofron një zbatim të plotë të kësaj detyre në Python për referencën tuaj. Ky kod ju ndihmon të testoni këtë detyrë dhe të filloni ndërtimin e klasifikuesit tuaj audio. Mund të shikoni, ekzekutoni dhe modifikoni kodin e shembullit të Klasifikuesit Audio duke përdorur vetëm shfletuesin tuaj të internetit me Google Colab. Mund ta shikoni kodin burimor për këtë shembull në GitHub .

Nëse po zbatoni Klasifikuesin Audio për Raspberry Pi, referojuni shembullit të aplikacionit Raspberry Pi .

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit në mënyrë specifike për të përdorur Klasifikuesin Audio. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit për përdorimin e detyrave të MediaPipe, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për Python .

Paketat

Detyra e Klasifikuesit të audios në paketën pip mediapipe. Mund ta instaloni varësinë me sa vijon:

$ python -m pip install mediapipe

Importet

Importoni klasat e mëposhtme për të hyrë në funksionet e detyrave të Klasifikuesit të audios:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio

Model

Detyra MediaPipe Audio Classifier kërkon një model të trajnuar që është në përputhje me këtë detyrë. Për më shumë informacion mbi modelet e disponueshme të trajnuara për Klasifikuesin Audio, shihni seksionin Modelet e përmbledhjes së detyrave.

Zgjidhni dhe shkarkoni një model dhe më pas ruajeni në një direktori lokale. Ju mund të përdorni modelin e rekomanduar Yamnet .

model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'

Specifikoni rrugën e modelit brenda parametrit Emri i modelit, siç tregohet më poshtë:

base_options = BaseOptions(model_asset_path=model_path)

Krijo detyrën

Përdorni funksionin create_from_options për të krijuar detyrën. Funksioni create_from_options pranon opsionet e konfigurimit duke përfshirë modalitetin e ekzekutimit, vendndodhjen e emrave të shfaqur, numrin maksimal të rezultateve, pragun e besimit, listën e lejimit të kategorive dhe listën e mohimit. Për më shumë informacion mbi opsionet e konfigurimit, shihni Përmbledhjen e konfigurimit .

Detyra "Klasifikuesi i audios" mbështet klipet audio dhe transmetimet audio si hyrje. Duhet të specifikoni mënyrën e ekzekutimit që korrespondon me llojin tuaj të të dhënave hyrëse kur krijoni detyrën. Zgjidhni skedën që korrespondon me llojin tuaj të të dhënave hyrëse për të parë se si të krijoni detyrën dhe të ekzekutoni konkluzionet.

Klipe audio

AudioClassifier = mp.tasks.audio.AudioClassifier
AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions
AudioRunningMode = mp.tasks.audio.RunningMode
BaseOptions = mp.tasks.BaseOptions

options = AudioClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=AudioRunningMode.AUDIO_CLIPS)

with AudioClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

Transmetimi i audios

AudioClassifier = mp.tasks.audio.AudioClassifier
AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions
AudioClassifierResult = mp.tasks.audio.AudioClassifierResult
AudioRunningMode = mp.tasks.audio.RunningMode
BaseOptions = mp.tasks.BaseOptions

def print_result(result: AudioClassifierResult, timestamp_ms: int):
    print(AudioClassifierResult result: {}.format(result))

options = AudioClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=AudioRunningMode.AUDIO_STREAM,
    max_results=5,
    result_callback=print_result)

with AudioClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
  

Për një shembull të plotë të krijimit të një Klasifikuesi Audio për përdorim me audio, shihni shembullin e kodit .

Opsionet e konfigurimit

Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Python:

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
running_mode Vendos modalitetin e ekzekutimit për detyrën. Klasifikuesi i audios ka dy mënyra:

AUDIO_CLIPS: Mënyra për ekzekutimin e detyrës audio në klipe audio të pavarura.

AUDIO_STREAM: Modaliteti për ekzekutimin e detyrës audio në një transmetim audio, si p.sh. nga mikrofoni. Në këtë modalitet, resultListener duhet të thirret për të vendosur një dëgjues për të marrë rezultatet e klasifikimit në mënyrë asinkrone.
{ AUDIO_CLIPS, AUDIO_STREAM } AUDIO_CLIPS
display_names_locale Vendos gjuhën e etiketave për t'u përdorur për emrat e shfaqur të dhëna në meta të dhënat e modelit të detyrës, nëse disponohet. Parazgjedhja është en për anglisht. Ju mund të shtoni etiketa të lokalizuara në meta të dhënat e një modeli të personalizuar duke përdorur API-në e shkrimtarit metadata TensorFlow Lite Kodi lokal sq
max_results Vendos numrin maksimal opsional të rezultateve të klasifikimit me pikët më të mira për t'u kthyer. Nëse < 0, të gjitha rezultatet e disponueshme do të kthehen. Çdo numër pozitiv -1
score_threshold Vendos pragun e rezultatit të parashikimit që tejkalon atë të dhënë në meta të dhënat e modelit (nëse ka). Rezultatet nën këtë vlerë refuzohen. [0.0, 1.0] Nuk është vendosur
category_allowlist Vendos listën opsionale të emrave të kategorive të lejuara. Nëse nuk janë bosh, rezultatet e klasifikimit emri i kategorisë së të cilave nuk është në këtë grup do të filtrohen. Emrat e kopjuar ose të panjohur të kategorive shpërfillen. Ky opsion është reciprokisht ekskluziv me category_denylist dhe duke përdorur të dyja rezultatet në një gabim. Çdo varg Nuk është vendosur
category_denylist Vendos listën opsionale të emrave të kategorive që nuk lejohen. Nëse nuk janë bosh, rezultatet e klasifikimit emri i kategorisë së të cilave është në këtë grup do të filtrohen. Emrat e kopjuar ose të panjohur të kategorive shpërfillen. Ky opsion është reciprokisht ekskluziv me category_allowlist dhe duke përdorur të dyja rezultatet në një gabim. Çdo varg Nuk është vendosur
result_callback Vendos dëgjuesin e rezultateve që të marrë rezultatet e klasifikimit në mënyrë asinkrone kur Klasifikuesi i audios është në modalitetin e transmetimit audio. Mund të përdoret vetëm kur modaliteti i ekzekutimit është caktuar në AUDIO_STREAM N/A Nuk është vendosur

Përgatitni të dhënat

Klasifikimi i audios funksionon me klipe audio dhe transmetime audio. Detyra trajton parapërpunimin e hyrjes së të dhënave, duke përfshirë rimarrjen e mostrave, buferimin dhe kornizën.

Përgatitni hyrjen tuaj si një skedar audio ose një grup numpy, më pas konvertojeni atë në një objekt MediaPipe AudioData . Ju mund të përdorni një bibliotekë të jashtme si SciPy për të ngarkuar audiot tuaja të hyrjes si grupe numpy.

Shembujt e mëposhtëm shpjegojnë dhe tregojnë se si të përgatiten të dhënat për përpunim për secilin nga llojet e të dhënave të disponueshme:

Klipe audio

import numpy as np
from scipy.io import wavfile

AudioData = mp.tasks.components.containers.AudioData

sample_rate, buffer = wavfile.read('/path/to/audio.wav')
audio_data = AudioData.create_from_array(
    buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
    

Transmetimi i audios

import numpy as np

AudioData = mp.tasks.components.containers.AudioData

# Read microphone data as np arrays, then call

audio_data = AudioData.create_from_array(
    buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
    

Drejtoni detyrën

Ju thërrisni funksionin e klasifikimit që korrespondon me modalitetin tuaj të drejtimit për të shkaktuar përfundime. Audio Classifier API kthen kategoritë e mundshme për ngjarjet audio brenda buferit audio të hyrjes.

Klipe audio

# Perform audio classification on the provided audio clip.
audio_classifier_result_list = classifier.classify(audio_data)
    

Transmetimi i audios

# Send live audio data to perform audio classification.
# Results are sent to the `result_callback` provided in the `AudioClassifierOptions`
classifier.classify_async(audio_data, timestamp_ms)
    

Vini re sa vijon:

  • Kur ekzekutoni në modalitetin e transmetimit audio, duhet t'i jepni gjithashtu detyrës Klasifikuesi i audios vulën kohore të të dhënave audio hyrëse.
  • Kur ekzekutohet në modelin e klipeve audio, detyra Klasifikuesi i audios do të bllokojë lidhjen aktuale derisa të përfundojë përpunimin e audios hyrëse.

Për një shembull më të plotë të ekzekutimit të Audio Classifier me klipe audio, shihni shembullin e kodit .

Trajtoni dhe shfaqni rezultatet

Pas ekzekutimit të përfundimit, detyra Audio Classifier kthen një objekt AudioClassifierResult i cili përmban listën e kategorive të mundshme për ngjarjet audio brenda audios hyrëse.

Më poshtë tregon një shembull të të dhënave dalëse nga kjo detyrë:

AudioClassifierResult:
  Timestamp in microseconds: 100
  ClassificationResult #0:
    Timestamp in microseconds: 100  
    Classifications #0 (single classification head):
      head index: 0
      category #0:
        category name: "Speech"
        score: 0.6
        index: 0
      category #1:
        category name: "Music"
        score: 0.2
        index: 1

Shembulli i kodit të klasifikuesit audio tregon se si të shfaqen rezultatet e klasifikimit të kthyera nga kjo detyrë, shikoni shembullin e kodit për detaje.