ওয়েবের জন্য অডিও শ্রেণীবিভাগ নির্দেশিকা

MediaPipe অডিও ক্লাসিফায়ার টাস্ক আপনাকে অডিও ডেটাতে শ্রেণীবিভাগ করতে দেয়। আপনি প্রশিক্ষিত বিভাগের একটি সেট থেকে শব্দ ইভেন্ট সনাক্ত করতে এই কাজটি ব্যবহার করতে পারেন। এই নির্দেশাবলী আপনাকে দেখায় কিভাবে নোড এবং ওয়েব অ্যাপের জন্য অডিও ক্লাসিফায়ার ব্যবহার করতে হয়।

আপনি ডেমো দেখে এই কাজটি কার্যকর দেখতে পারেন। এই কাজের ক্ষমতা, মডেল এবং কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।

কোড উদাহরণ

অডিও ক্লাসিফায়ারের উদাহরণ কোডটি আপনার রেফারেন্সের জন্য জাভাস্ক্রিপ্টে এই টাস্কটির সম্পূর্ণ বাস্তবায়ন প্রদান করে। এই কোডটি আপনাকে এই কাজটি পরীক্ষা করতে এবং আপনার নিজস্ব অডিও শ্রেণীবিভাগ অ্যাপ তৈরি করতে শুরু করতে সহায়তা করে। আপনি শুধুমাত্র আপনার ওয়েব ব্রাউজার ব্যবহার করে অডিও ক্লাসিফায়ার উদাহরণ কোড দেখতে, চালাতে এবং সম্পাদনা করতে পারেন।

সেটআপ

এই বিভাগে আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট এবং কোড প্রোজেক্ট সেট আপ করার জন্য বিশেষভাবে অডিও ক্লাসিফায়ার ব্যবহার করার জন্য মূল ধাপগুলি বর্ণনা করে। প্ল্যাটফর্ম সংস্করণ প্রয়োজনীয়তা সহ MediaPipe কার্যগুলি ব্যবহার করার জন্য আপনার বিকাশের পরিবেশ সেট আপ করার বিষয়ে সাধারণ তথ্যের জন্য, ওয়েবের জন্য সেটআপ নির্দেশিকা দেখুন৷

জাভাস্ক্রিপ্ট প্যাকেজ

অডিও ক্লাসিফায়ার কোড MediaPipe @mediapipe/tasks-audio NPM প্যাকেজের মাধ্যমে উপলব্ধ। আপনি প্ল্যাটফর্ম সেটআপ গাইডে দেওয়া লিঙ্কগুলি থেকে এই লাইব্রেরিগুলি খুঁজে পেতে এবং ডাউনলোড করতে পারেন৷

আপনি নিম্নলিখিত কমান্ড ব্যবহার করে স্থানীয় স্টেজিংয়ের জন্য নিম্নলিখিত কোড সহ প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করতে পারেন:

npm install @mediapipe/tasks-audio

আপনি যদি একটি বিষয়বস্তু বিতরণ নেটওয়ার্ক (CDN) পরিষেবার মাধ্যমে টাস্ক কোড আমদানি করতে চান তবে নিম্নলিখিত কোডটি যোগ করুন৷ আপনার 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>

মডেল

MediaPipe অডিও ক্লাসিফায়ার টাস্কের জন্য একটি প্রশিক্ষিত মডেল প্রয়োজন যা এই কাজের সাথে সামঞ্জস্যপূর্ণ। অডিও ক্লাসিফায়ারের জন্য উপলব্ধ প্রশিক্ষিত মডেল সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ মডেল বিভাগটি দেখুন।

একটি মডেল নির্বাচন করুন এবং ডাউনলোড করুন, এবং তারপর এটি আপনার প্রকল্প ডিরেক্টরির মধ্যে সংরক্ষণ করুন, উদাহরণস্বরূপ:

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

টাস্ক তৈরি করুন

অনুমান চালানোর জন্য টাস্ক প্রস্তুত করতে অডিও ক্লাসিফায়ার createFrom...() ফাংশনগুলির একটি ব্যবহার করুন। প্রশিক্ষিত মডেল ফাইলের আপেক্ষিক বা পরম পাথ সহ createFromModelPath() ফাংশনটি ব্যবহার করুন। যদি আপনার মডেল ইতিমধ্যেই মেমরিতে লোড হয়ে থাকে, তাহলে আপনি createFromModelBuffer() পদ্ধতি ব্যবহার করতে পারেন।

নিচের কোডের উদাহরণ টাস্ক সেট আপ করতে createFromOptions() ফাংশন ব্যবহার করে দেখায়। createFromOptions ফাংশন আপনাকে কনফিগারেশন বিকল্পগুলির সাথে অডিও ক্লাসিফায়ার কাস্টমাইজ করতে দেয়। কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন বিকল্পগুলি দেখুন।

নিম্নলিখিত কোডটি দেখায় কিভাবে কাস্টম বিকল্পগুলির সাথে টাস্কটি তৈরি এবং কনফিগার করতে হয়:

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"
    }
  });

অডিও ক্লাসিফায়ার উদাহরণ কোড বাস্তবায়ন ব্যবহারকারীকে প্রক্রিয়াকরণ মোডগুলির মধ্যে নির্বাচন করতে দেয়। পদ্ধতিটি টাস্ক তৈরির কোডটিকে আরও জটিল করে তোলে এবং আপনার ব্যবহারের ক্ষেত্রে উপযুক্ত নাও হতে পারে। আপনি example code runAudioClassification() এবং runStreamingAudioClassification() ফাংশনে বিভিন্ন মোড দেখতে পারেন।

কনফিগারেশন বিকল্প

এই কাজটিতে ওয়েব এবং জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনগুলির জন্য নিম্নলিখিত কনফিগারেশন বিকল্প রয়েছে:

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
displayNamesLocale টাস্কের মডেলের মেটাডেটাতে প্রদত্ত প্রদর্শন নামের জন্য ব্যবহার করার জন্য লেবেলের ভাষা সেট করে, যদি উপলব্ধ থাকে। ইংরেজির জন্য ডিফল্ট হল en । আপনি TensorFlow Lite Metadata Writer API ব্যবহার করে একটি কাস্টম মডেলের মেটাডেটাতে স্থানীয় লেবেল যোগ করতে পারেন স্থানীয় কোড en
maxResults ফিরতে সর্বোচ্চ স্কোর করা শ্রেণীবিভাগ ফলাফলের ঐচ্ছিক সর্বোচ্চ সংখ্যা সেট করে। <0 হলে, সমস্ত উপলব্ধ ফলাফল ফেরত দেওয়া হবে। যেকোনো ইতিবাচক সংখ্যা -1
scoreThreshold ভবিষ্যদ্বাণী স্কোর থ্রেশহোল্ড সেট করে যা মডেল মেটাডেটাতে প্রদত্ত একটিকে ওভাররাইড করে (যদি থাকে)। এই মানের নিচের ফলাফল প্রত্যাখ্যান করা হয়। [০.০, ১.০] সেট করা হয়নি
categoryAllowlist অনুমোদিত বিভাগের নামের ঐচ্ছিক তালিকা সেট করে। যদি খালি না থাকে, শ্রেণীবিভাগের ফলাফল যাদের বিভাগের নাম এই সেটে নেই সেগুলি ফিল্টার আউট করা হবে৷ সদৃশ বা অজানা বিভাগের নাম উপেক্ষা করা হয়। এই বিকল্পটি categoryDenylist সাথে পারস্পরিকভাবে একচেটিয়া এবং একটি ত্রুটিতে উভয় ফলাফল ব্যবহার করে। কোনো স্ট্রিং সেট করা হয়নি
categoryDenylist অনুমোদিত নয় এমন বিভাগের নামের ঐচ্ছিক তালিকা সেট করে। যদি খালি না থাকে, শ্রেণীবিভাগের ফলাফল যার বিভাগের নাম এই সেটে আছে তা ফিল্টার আউট করা হবে। সদৃশ বা অজানা বিভাগের নাম উপেক্ষা করা হয়। এই বিকল্পটি categoryAllowlist সাথে পারস্পরিকভাবে একচেটিয়া এবং একটি ত্রুটিতে উভয় ফলাফল ব্যবহার করে। কোনো স্ট্রিং সেট করা হয়নি

ডেটা প্রস্তুত করুন

অডিও ক্লাসিফায়ার অডিও ক্লিপ এবং অডিও স্ট্রিমগুলির সাথে কাজ করে এবং হোস্ট ব্রাউজার দ্বারা সমর্থিত যে কোনও ফর্ম্যাটে অডিও ফাইলগুলির সাথে কাজ করতে পারে৷ টাস্কটি রিস্যাম্পলিং, বাফারিং এবং ফ্রেমিং সহ ডেটা ইনপুট প্রিপ্রসেসিং পরিচালনা করে।

টাস্ক চালান

অডিও ক্লাসিফায়ার অডিও ক্লিপ ফাইল বা অডিও স্ট্রিমগুলির জন্য অনুমান চালানোর জন্য classify() পদ্ধতি ব্যবহার করে। অডিও ক্লাসিফায়ার API ইনপুট অডিওতে স্বীকৃত অডিও ইভেন্টগুলির জন্য সম্ভাব্য বিভাগগুলি প্রদান করে৷

অডিও ক্লাসিফায়ার classify() পদ্ধতিতে কলগুলি সিঙ্ক্রোনাসভাবে চলে এবং ব্যবহারকারী ইন্টারফেস থ্রেড ব্লক করে। যদি আপনি একটি ডিভাইসের মাইক্রোফোন থেকে অডিও শ্রেণীবদ্ধ করেন, প্রতিটি শ্রেণীবিভাগ মূল থ্রেড ব্লক করবে। আপনি অন্য থ্রেডে classify() চালানোর জন্য ওয়েব কর্মীদের প্রয়োগ করে এটি প্রতিরোধ করতে পারেন।

নিম্নলিখিত কোডটি প্রদর্শন করে কিভাবে টাস্ক মডেলের সাথে প্রক্রিয়াকরণ চালানো যায়:

অডিও ক্লিপ

// 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
);
  

অডিও স্ট্রিম

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;
};
  

একটি অডিও ক্লাসিফায়ার টাস্ক চালানোর আরও সম্পূর্ণ বাস্তবায়নের জন্য, কোড উদাহরণ দেখুন।

হ্যান্ডেল এবং প্রদর্শন ফলাফল

একবার আপনি একটি অনুমান রান সম্পূর্ণ করলে, অডিও ক্লাসিফায়ার টাস্কটি একটি AudioClassifierResult অবজেক্ট ফেরত দেয় যা ইনপুট অডিওর মধ্যে থাকা বস্তুর সম্ভাব্য বিভাগের তালিকা ধারণ করে।

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

অডিও ক্লাসিফায়ার উদাহরণ কোড প্রদর্শন করে কিভাবে টাস্ক থেকে ফিরে আসা শ্রেণীবিভাগ ফলাফল প্রদর্শন করতে হয়, বিস্তারিত জানার জন্য কোড উদাহরণ দেখুন।