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

Detyra e Klasifikuesit Audio të MediaPipe ju lejon të kryeni klasifikimin e të dhënave audio. 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 për aplikacionet Node dhe web.

Mund ta shihni këtë detyrë në veprim duke parë demonstrimin . Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .

Shembull kodi

Kodi shembull për Klasifikuesin e Audios ofron një implementim të plotë të kësaj detyre në JavaScript për referencën tuaj. Ky kod ju ndihmon të testoni këtë detyrë dhe të filloni ndërtimin e aplikacionit tuaj të klasifikimit të audios. Mund ta shikoni, ekzekutoni dhe modifikoni shembullin e Klasifikuesit të Audios duke përdorur vetëm shfletuesin tuaj të internetit.

Konfigurimi

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

Paketat JavaScript

Kodi i Klasifikuesit të Audios është i disponueshëm përmes paketës MediaPipe @mediapipe/tasks-audio NPM . Mund t'i gjeni dhe shkarkoni këto biblioteka nga lidhjet e dhëna në udhëzuesin e Konfigurimit të platformës.

Mund të instaloni paketat e kërkuara me kodin e mëposhtëm për konfigurimin lokal duke përdorur komandën e mëposhtme:

npm install @mediapipe/tasks-audio

Nëse doni të importoni kodin e detyrës përmes një shërbimi të rrjetit të shpërndarjes së përmbajtjes (CDN), shtoni kodin e mëposhtëm në etiketë në skedarin tuaj HTML:

<!-- Replace "my-cdn-service.com" with your CDN -->
<head>
  <script src="https://my-cdn-service.com/npm/@mediapipe/tasks-audio/audio_bundle.js"
    crossorigin="anonymous"></script>
</head>

Model

Detyra e Klasifikuesit Audio të MediaPipe kërkon një model të trajnuar që është i pajtueshëm me këtë detyrë. Për më shumë informacion mbi modelet e trajnuara të disponueshme për Klasifikuesin Audio, shihni seksionin Modele të përmbledhjes së detyrës.

Zgjidhni dhe shkarkoni një model dhe më pas ruajeni atë brenda direktorisë së projektit tuaj, për shembull:

<dev-project-root>/app/shared/models/

Krijo detyrën

Përdorni një nga funksionet createFrom...() të Klasifikuesit Audio për të përgatitur detyrën për ekzekutimin e inferencave. Përdorni funksionin createFromModelPath() me një shteg relativ ose absolut për në skedarin e modelit të trajnuar. Nëse modeli juaj është ngarkuar tashmë në memorie, mund të përdorni metodën createFromModelBuffer() .

Shembulli i kodit më poshtë demonstron përdorimin e funksionit createFromOptions() për të konfiguruar detyrën. Funksioni createFromOptions ju lejon të personalizoni Klasifikuesin Audio me opsione konfigurimi. Për më shumë informacion mbi opsionet e konfigurimit, shihni Opsionet e konfigurimit .

Kodi i mëposhtëm tregon se si të ndërtohet dhe konfigurohet detyra me opsione të personalizuara:

const audio = await FilesetResolver.forAudioTasks(
    "https://my-cdn-service.com/npm/@mediapipe/tasks-audio/wasm"
  );

const audioClassifier = await AudioClassifier.createFromOptions(audio, {
    baseOptions: {
      modelAssetPath:
        "https://tfhub.dev/google/lite-model/yamnet/classification/tflite/1?lite-format=tflite"
    }
  });

Do të shihni një shembull të plotë në example code .

Opsionet e konfigurimit

Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Web dhe JavaScript:

Emri i opsionit Përshkrimi Diapazoni i Vlerave Vlera e parazgjedhur
displayNamesLocale Cakton gjuhën e etiketave që do të përdoren për emrat e shfaqur të dhënë në metadatat e modelit të detyrës, nëse është e disponueshme. Vlera e parazgjedhur është en për anglishten. Mund të shtoni etiketa të lokalizuara në metadatat e një modeli të personalizuar duke përdorur API-në e Shkruesit të Metadatave TensorFlow Lite. Kodi lokal en
maxResults Cakton numrin maksimal opsional të rezultateve të klasifikimit me rezultatet më të larta që duhen kthyer. Nëse < 0, do të kthehen të gjitha rezultatet e disponueshme. Çdo numër pozitiv -1
scoreThreshold Cakton pragun e rezultatit të parashikimit që mbivendos 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
categoryAllowlist Cakton listën opsionale të emrave të lejuar të kategorive. Nëse nuk është bosh, rezultatet e klasifikimit emri i kategorisë së të cilave nuk është në këtë grup do të filtrohen. Emrat e kategorive të dyfishta ose të panjohura injorohen. Ky opsion është reciprokisht ekskluziv me categoryDenylist dhe përdorimin e të dy rezultateve në një gabim. Çdo varg Nuk është vendosur
categoryDenylist Cakton listën opsionale të emrave të kategorive që nuk lejohen. Nëse nuk është bosh, rezultatet e klasifikimit emri i kategorisë së të cilave është në këtë grup do të filtrohen. Emrat e kategorive të dyfishta ose të panjohura injorohen. Ky opsion është reciprokisht ekskluziv me categoryAllowlist dhe përdorimin e të dy rezultateve në një gabim. Çdo varg Nuk është vendosur

Përgatitni të dhënat

Klasifikuesi i Audios punon me klipe audio dhe transmetime audio, dhe mund të punojë me skedarë audio në çdo format të mbështetur nga shfletuesi pritës. Detyra trajton përpunimin paraprak të të dhënave të futura, duke përfshirë ri-modelimin, ruajtjen në memorje dhe kuadrimin.

Ekzekuto detyrën

Klasifikuesi i Audios përdor metodën classify() për të ekzekutuar përfundime për skedarët e klipeve audio ose transmetimet audio. API-ja e Klasifikuesit të Audios kthen kategoritë e mundshme për ngjarjet audio të njohura në audion hyrëse.

Thirrjet në metodën Audio Classifier classify() ekzekutohen në mënyrë sinkrone dhe bllokojnë fijen e ndërfaqes së përdoruesit. Nëse klasifikoni audion nga mikrofoni i një pajisjeje, çdo klasifikim do të bllokojë fijen kryesore. Mund ta parandaloni këtë duke zbatuar punëtorët e uebit për të ekzekutuar classify() në një fije tjetër.

Kodi i mëposhtëm tregon se si të ekzekutohet përpunimi me modelin e detyrës:

Klipe audio

// Create audio buffer
const sample = await response.arrayBuffer();
const audioBuffer = await audioCtx.decodeAudioData(sample);

// Use AudioClassifier to run classification
const results = audioClassifier.classify(
  audioBuffer.getChannelData(0),
  audioBuffer.sampleRate
);
  

Transmetim audio

stream = await navigator.mediaDevices.getUserMedia(constraints);
audioCtx = new AudioContext({ sampleRate: 16000 });

const source = audioCtx.createMediaStreamSource(stream);
const scriptNode = audioCtx.createScriptProcessor(16384, 1, 1);

scriptNode.onaudioprocess = function (audioProcessingEvent) {
  const inputBuffer = audioProcessingEvent.inputBuffer;
  let inputData = inputBuffer.getChannelData(0);

  // Classify the audio
  const result = audioClassifier.classify(inputData);
  const categories = result[0].classifications[0].categories;
};
  

Për një implementim më të plotë të ekzekutimit të një detyre të Klasifikuesit Audio, shihni shembullin .

Trajtoni dhe shfaqni rezultatet

Pasi të keni përfunduar një ekzekutim të inferencës, detyra e Klasifikuesit të Audios kthen një objekt AudioClassifierResult i cili përmban listën e kategorive të mundshme për objektet brenda audios hyrëse.

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

Kodi shembullor i Klasifikuesit Audio tregon se si të shfaqen rezultatet e klasifikimit të kthyera nga detyra, shihni shembullin për detaje.