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

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

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

কোডের উদাহরণ

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

সেটআপ

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

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

অডিও ক্লাসিফায়ার কোড 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 Audio Classifier টাস্কটির জন্য এমন একটি প্রশিক্ষিত মডেল প্রয়োজন যা এই টাস্কের সাথে সামঞ্জস্যপূর্ণ। Audio Classifier-এর জন্য উপলব্ধ প্রশিক্ষিত মডেলগুলো সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ-এর Models বিভাগটি দেখুন।

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

<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 এ একটি সম্পূর্ণ উদাহরণ দেখতে পারেন।

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

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

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

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

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

টাস্কটি চালান

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

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

নিম্নলিখিত কোডটি টাস্ক মডেল ব্যবহার করে প্রসেসিং সম্পাদন করার পদ্ধতি প্রদর্শন করে:

অডিও ক্লিপ

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

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