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

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 për aplikacionet Node dhe ueb.

Ju 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

Shembulli i kodit për Klasifikuesin Audio ofron një zbatim 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 audio. Mund të shikoni, ekzekutoni dhe modifikoni kodin e shembullit të Klasifikuesit Audio 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 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 ueb .

Paketat JavaScript

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

Ju mund të instaloni paketat e kërkuara me kodin e mëposhtëm për vendosjen lokale duke përdorur komandën e mëposhtme:

npm install @mediapipe/tasks-audio

Nëse dëshironi 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ë etiketa 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 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 atë në drejtorinë e projektit tuaj, për shembull:

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

Krijo detyrën

Përdorni një nga funksionet Audio Classifier createFrom...() për të përgatitur detyrën për ekzekutimin e konkluzioneve. Përdorni funksionin createFromModelPath() me një shteg relative ose absolute drejt skedarit të modelit të trajnuar. Nëse modeli juaj tashmë është i ngarkuar në memorie, mund të përdorni metodën createFromModelBuffer() .

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

Kodi i mëposhtëm tregon se si të ndërtoni dhe konfiguroni detyrën 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"
    }
  });

Zbatimi i kodit të shembullit të Klasifikuesit Audio lejon përdoruesin të zgjedhë midis mënyrave të përpunimit. Qasja e bën kodin e krijimit të detyrës më të komplikuar dhe mund të mos jetë i përshtatshëm për rastin tuaj të përdorimit. Ju mund të shihni mënyra të ndryshme në funksionet runAudioClassification() dhe runStreamingAudioClassification()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 Gama e vlerave Vlera e paracaktuar
displayNamesLocale 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
maxResults 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
scoreThreshold 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
categoryAllowlist 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 categoryDenylist dhe duke përdorur të dyja rezulton në një gabim. Çdo varg Nuk është vendosur
categoryDenylist 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 categoryAllowlist dhe duke përdorur të dyja rezultatet në një gabim. Çdo varg Nuk është vendosur

Përgatitni të dhënat

Klasifikimi i audios funksionon 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 parapërpunimin e hyrjes së të dhënave, duke përfshirë rimarrjen e mostrave, buferimin dhe kornizën.

Drejtoni detyrën

Klasifikuesi i audios përdor metodën classify() për të ekzekutuar konkluzionet për skedarët e klipit audio ose transmetimet audio. Audio Classifier API 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ë sinkronike dhe bllokojnë fillin e ndërfaqes së përdoruesit. Nëse klasifikoni audion nga mikrofoni i një pajisjeje, çdo klasifikim do të bllokojë lidhjen kryesore. Ju mund ta parandaloni këtë duke zbatuar punëtorët e uebit për të ekzekutuar classify() në një thread 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
);
  

Transmetimi i audios

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ë zbatim më të plotë të ekzekutimit të një detyre të Klasifikuesit Audio, shihni shembullin e kodit .

Trajtoni dhe shfaqni rezultatet

Pasi të keni përfunduar një ekzekutim konkluzion, detyra Audio Classifier 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

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