ML Kit-এর GenAI স্পিচ রিকগনিশন API-এর মধ্যে, আপনি অডিও কন্টেন্টকে টেক্সটে ট্রান্সক্রাইব করতে পারবেন। এই API নিম্নলিখিত মোডগুলি সাপোর্ট করে:
- উন্নত: স্পিচ রিকগনিশন API, GenAI মডেল ব্যবহার করে, যা আরও বেশি ভাষা কভার করে এবং সামগ্রিকভাবে আরও ভালো কোয়ালিটি প্রদান করে। আপনাকে প্রতিটি ভাষার জন্য আলাদা ভাষা সংক্রান্ত প্যাক ডাউনলোড করতে হবে না, যার ফলে স্টোরেজ সাশ্রয় হয়।
- বেসিক: স্পিচ রিকগনিশন API, SpeechRecognizer API-এর মতো, প্রথাগত অন-ডিভাইস স্পিচ রিকগনিশন মডেল ব্যবহার করে।
স্পিচ রিকগনিশন API অডিও কন্টেন্টকে একই ভাষায় টেক্সটে ট্রান্সক্রাইব করে। অন্য ভাষায় অডিও থেকে টেক্সটে ট্রান্সক্রাইব করতে, Speech Translation API ব্যবহার করুন।
মূল ক্ষমতা
- মাইক্রোফোন বা অডিও ফাইল থেকে স্ট্রিমিং ইনপুট ক্যাপচার করে।
AudioSource.fromFile()বাAudioSource.fromUri()পদ্ধতি ব্যবহার করে আগে থেকে রেকর্ড করা সম্পূর্ণ ফাইল ট্রান্সক্রাইব করে। আরও জানতে, অডিও ইনপুট সংক্রান্ত প্রয়োজনীয়তা দেখুন।- স্ট্রিমিং ইনপুটের জন্য, প্রতিটি শনাক্ত করা শব্দের সঠিক শুরুর সময় প্রদান করে যাতে আপনাকে UI অ্যানিমেশন সিঙ্ক্রোনাইজ করতে, ক্যাপশন তৈরি করতে বা শব্দগুলি উচ্চারিত হওয়ার সাথে সাথে হাইলাইট করতে সাহায্য করে। শনাক্ত করা প্রতিটি শব্দের শুরুর সময় (মিলিসেকেন্ডে) হল ইভেন্ট শুরুর সময় থেকে অফসেট, যা টাইমস্ট্যাম্প ০।
- ট্রান্সক্রাইব করা টেক্সট একটানা স্ট্রিম হিসেবে প্রদান করা হয়, যা প্রাথমিকভাবে আংশিক (এবং পরিবর্তন সাপেক্ষ) হতে পারে এবং পরে চূড়ান্ত স্বীকৃত টেক্সট হিসেবে দেখানো হয়।
ফলাফলের উদাহরণ
| অডিও | মোড | লোকেল | ট্রান্সক্রিপশন |
|---|---|---|---|
| audio_2 | উন্নত | es-ES | "Este es un mensaje corto." |
| audio_1 | সাধারণ | en-US | "এটি একটি ছোট মেসেজ" |
প্ল্যাটফর্ম স্পিচ শনাক্তকরণ API-এর সাথে তুলনা
ML Kit স্পিচ রিকগনিশন API, বেসিক মোড ব্যবহার করার সময় প্ল্যাটফর্ম
SpeechRecognizer API-এর প্রাথমিক কার্যকারিতা কভার করে। ML Kit-এর একটি মূল সুবিধা হল যে
এটি কোনও নির্দিষ্ট প্ল্যাটফর্ম ভার্সনের সাথে সীমাবদ্ধ নয়।
এছাড়াও, ML Kit স্পিচ রিকগনিশন API, উন্নত মোড ব্যবহার করার সময় অন-ডিভাইস Gemini মডেল ব্যবহার করে স্পিচ রিকগনিশনকে সমর্থন করে, যা বর্ধিত ভাষা কভারেজ প্রদান করে।
শুরু করুন
আপনার build.gradle কনফিগারেশনে
ডিপেন্ডেন্সি হিসেবে ML Kit স্পিচ রিকগনিশন API যোগ করুন:
implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")
আপনার অ্যাপে স্পিচ রিকগনিশন API ইন্টিগ্রেট করতে, একটি
SpeechRecognizer ক্লায়েন্ট তৈরি করুন। প্রয়োজনীয় অন-ডিভাইস মডেল ফিচারের স্ট্যাটাস চেক করুন
এবং ডিভাইসে আগে থেকে না থাকলে মডেলটি ডাউনলোড করুন। SpeechRecognizerRequest-এ
আপনার অডিও ইনপুট প্রস্তুত করার পরে, Kotlin ফ্লো থেকে স্ট্রিমিং আউটপুট পেতে
ক্লায়েন্ট ব্যবহার করে ইনফারেন্স রান করুন। সবশেষে,
রিসোর্স রিলিজ করার জন্য ক্লায়েন্ট বন্ধ করতে ভুলবেন না।
// 1. Create a SpeechRecognizer with desired options.
val options: SpeechRecognizerOptions =
speechRecognizerOptions {
locale = Locale.US
preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
}
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(options)
// 2. Check if the recognition model is available or needs downloading.
launch {
val status: Int = speechRecognizer.checkStatus()
if (status == FeatureStatus.DOWNLOADABLE) {
// 3. If needed, download the model and monitor progress.
speechRecognizer.download.collect { downloadStatus ->
when (downloadStatus) {
is DownloadStatus.DownloadCompleted -> {
// Model is ready, start recognition.
startMyRecognition(speechRecognizer)
}
is DownloadStatus.DownloadFailed -> {
// Handle download failure (e.g., inform the user).
}
is DownloadStatus.DownloadProgress -> {
// Handle download progress (e.g., update a progress bar).
}
}
}
} else if (status == FeatureStatus.AVAILABLE) {
// Model is already ready, start recognition immediately.
startMyRecognition(speechRecognizer)
} else {
// Handle other statuses (e.g., DOWNLOADING, UNAVAILABLE).
}
}
// 4. Define your recognition logic using a suspend function.
suspend fun startMyRecognition(recognizer: SpeechRecognizer) {
// Create a request (e.g., specifying audio source).
val request: SpeechRecognizerRequest
= speechRecognizerRequest { audioSource = AudioSource.fromMic() }
// Start recognition and process the continuous stream of responses.
recognizer.startRecognition(request).collect {
// Process the SpeechRecognitionResponse data here.
}
}
// 5. Stop recognition and clean up resources when the session is complete.
launch {
recognizer.stopRecognition()
recognizer.close()
}
অডিও ইনপুট সংক্রান্ত প্রয়োজনীয়তা
GenAI স্পিচ রিকগনিশন API, মাইক্রোফোন বা ফাইল ডেসক্রিপটরের মাধ্যমে কাস্টম সোর্স থেকে ইনপুট সাপোর্ট করে।
আপনি AudioSource.fromPfd(parcelFileDescriptor) ব্যবহার করলে, ইনপুট অডিওকে অবশ্যই
নিম্নলিখিত কঠোর প্রয়োজনীয়তা পূরণ করতে হবে:
- ফর্ম্যাট: Raw, হেডারলেস ১৬-বিট PCM.
- চ্যানেল: মোনো (সিঙ্গেল চ্যানেল)।
- স্যাম্পেল রেট: ১৬ kHz.
বেশিরভাগ ক্ষেত্রে AudioSource.fromMic() ব্যবহার করার সাজেশন দেওয়া হয় কারণ এটি অটোমেটিক এইসব সীমাবদ্ধতা
ম্যানেজ করে।
কাজ করে এমন অডিও ইনপুট ফর্ম্যাট
স্পিচ রিকগনিশন API-তে নিম্নলিখিত অডিও ইনপুট ফর্ম্যাট কাজ করে:
- MP3, WAV, FLAC, M4A এবং OGG ফাইল ডিভাইসে অটোমেটিক ডিকোড করা হয়।
- র, হেডারলেস অডিও (
.rawবা.pcm) অবশ্যই ১৬-বিট PCM, ১৬ kHz, মোনো ফর্ম্যাটে হতে হবে।
ফর্ম্যাটটি ভুল বা কাজ না করলে, শনাক্তকরণ শুরু হওয়ার সময়
ErrorResponse ভ্যালু দেখানো হয়।
স্পিচ শনাক্তকরণ API প্রয়োগ করা
অডিও ট্রান্সক্রাইব করতে এবং শব্দ টাইমিং ব্যবহার করতে কীভাবে স্পিচ রিকগনিশন API ব্যবহার করবেন তা এখানে দেওয়া হল।
অডিও ট্রান্সক্রাইব করুন
স্পিচ রিকগনিশন API ডিভাইসের মাইক্রোফোন, আগে থেকে রেকর্ড করা ফাইল বা ParcelFileDescriptor অবজেক্ট ব্যবহার করে কাস্টম পাইপলাইন থেকে অডিও ইনপুট সাপোর্ট করে।
আপনার অডিও ডেটা প্রস্তুত করতে, নিম্নলিখিত টেবিলে তালিকাভুক্ত ফ্যাক্টরি পদ্ধতিগুলির মধ্যে একটি ব্যবহার করে একটি AudioSource অবজেক্ট তৈরি করুন:
| পদ্ধতি | অডিও মোড | সাজেস্ট করা ব্যবহারের উদাহরণ |
|---|---|---|
AudioSource.fromMic() |
STREAMING |
ব্যবহারকারীর থেকে লাইভ ভয়েস ইনপুট ক্যাপচার করুন।RECORD_AUDIO অনুমতি প্রয়োজন।
|
AudioSource.fromFile(file)AudioSource.fromUri(context, uri)
|
ONE_SHOT |
আগে থেকে রেকর্ড করা অডিও ফাইল ট্রান্সক্রাইব করুন। ডিভাইসে সরাসরি স্ট্যান্ডার্ড ফাইল ফরম্যাট অটোমেটিক ডিকোড করে। |
AudioSource.fromPfd(pfd, mode)AudioSource.fromPfd(pfd, mode, audioFormat)
|
STREAMING বা ONE_SHOT |
কাস্টম অডিও পাইপলাইন (যেমন, আপনার অ্যাপের অন্য কোথাও প্রসেস করা অডিও ডেটা)। |
AudioSource.Mode কনস্ট্যান্ট, API কীভাবে ইনকামিং অডিও প্রসেস করে তা নিয়ন্ত্রণ করে:
AudioSource.Mode.STREAMINGকনস্ট্যান্ট, রিকগনাইজারকে এমনভাবে কনফিগার করে যাতে অডিও ডেটা আসার সাথে সাথে এটি ক্রমাগত আংশিক এবং চূড়ান্ত ট্রান্সক্রিপশন ফলাফল ফেরত দেয়। আপনি কাস্টমParcelFileDescriptorঅবজেক্ট প্রদান করলে, আপনাকে অবশ্যই রিয়েল-টাইম গতিতে স্ট্রিমে ডেটা লিখতে হবে (স্ট্যান্ডার্ড ১৬ kHz,১৬-বিট, মোনো PCM অডিওর জন্য প্রতি সেকেন্ডে আনুমানিক ৩২, ০০০ বাইট)। খুব দ্রুত ডেটা লিখলে বাফার ওভারফ্লো হতে পারে।AudioSource.Mode.ONE_SHOTকনস্ট্যান্ট, ইনফারেন্স পারফর্ম করা এবং চূড়ান্ত ট্রান্সক্রিপশন ডেলিভার করার আগে, ট্রান্সফার করার জন্য সম্পূর্ণ অডিও সোর্সের অপেক্ষা করতে রিকগনাইজারকে কনফিগার করে। আপনি যত দ্রুত সম্ভব অডিও ডেটা লিখতে পারেন, তবে ফাইল শেষ হওয়ার সিগন্যাল দিতে আপনার ফাইল ডেসক্রিপটরের রাইট এন্ড বন্ধ করতে হবে। এই এন্ড-অফ-ফাইল সিগন্যাল না পাওয়া পর্যন্ত চূড়ান্ত ট্রান্সক্রিপশন ফলাফল ডেলিভার করা হয় না।
নিম্নলিখিত উদাহরণে আগে থেকে রেকর্ড করা অডিও ফাইল ট্রান্সক্রাইব করা হয়েছে:
suspend fun recognizeFromFile(recognizer: SpeechRecognizer, audioFile: File) {
val audioSource = AudioSource.fromFile(audioFile)
val request = speechRecognizerRequest { this.audioSource = audioSource }
try {
recognizer.startRecognition(request).collect { response ->
when (response) {
is SpeechRecognizerResponse.FinalTextResponse -> {
// Process the transcription of the whole file.
}
is SpeechRecognizerResponse.ErrorResponse -> {
// Handle the error, for example an unsupported audio format.
}
else -> {}
}
}
} finally {
audioSource.close()
}
}
শব্দের টাইমিং ব্যবহার করুন
আপনার অনুরোধের recognitionOptions কনফিগারেশন ব্লকে enableWordTiming প্যারামিটারকে true-এ সেট করে আপনি প্রতিটি শনাক্ত করা শব্দের শুরুর সময় অনুরোধ করতে পারেন।
শব্দের টাইমিং চালু করা থাকলে, প্রতিটি SpeechRecognizerResponse.FinalTextResponse
অবজেক্টে একটি wordTimings প্রপার্টি থাকে যাতে
SpeechRecognizerResponse.WordTiming অবজেক্টের তালিকা থাকে। প্রতিটি অবজেক্ট স্পিচ রিকগনিশন সেশনের শুরু থেকে
শনাক্ত করা শব্দ স্ট্রিং (text) এবং এর মিলিসেকেন্ড অফসেট (timestampMs)
প্রদান করে। শব্দের টাইমিং
বন্ধ থাকলে (ডিফল্ট সেটিং), wordTimings তালিকা খালি থাকে।
শব্দের সময়সীমা কীভাবে কনফিগার ও চালু করতে হয় তা নিম্নলিখিত কোডের উদাহরণ থেকে জানতে পারবেন:
suspend fun recognizeWithWordTiming(recognizer: SpeechRecognizer) {
val request = speechRecognizerRequest {
audioSource = AudioSource.fromMic()
recognitionOptions { enableWordTiming = true }
}
recognizer.startRecognition(request).collect { response ->
if (response is SpeechRecognizerResponse.FinalTextResponse) {
for (wordTiming in response.wordTimings) {
val word: String = wordTiming.text
val timestamp: Long = wordTiming.timestampMs
}
}
}
}
যেসব ভাষায় এটি ব্যবহার করা যায়
| মোড | লোকেল |
| উন্নত | ar-SA (বিটা), cmn-Hans-CN, cmn-Hant-TW, da-DK (বিটা), de-DE, en-US, es-ES, fr-FR, hi-IN (বিটা), id-ID (বিটা), it-IT, ja-JP, ko-KR, nl-NL (বিটা), pl-PL (বিটা), pt-PT, ru-RU, sv-SE (বিটা), th-TH, tr-TR (বিটা), vi-VN (বিটা) |
| সাধারণ | cmn-Hans-CN (বিটা), cmn-Hant-TW (বিটা), de-DE (বিটা), en-US, es-ES (বিটা), fr-FR (বিটা), hi-IN (বিটা), it-IT (বিটা), ja-JP (বিটা), ko-KR (বিটা), pl-PL (বিটা), pt-BR (বিটা), ru-RU (বিটা), tr-TR (বিটা), vi-VN (বিটা) |
যেসব ডিভাইসে এটি দেখা যাবে
| মোড | যেসব ডিভাইসে চালানো যাবে |
| সাধারণ | API লেভেল ৩১ ও তার পরবর্তী যেকোনও ভার্সন ব্যবহার করা Android ডিভাইস। |
| উন্নত |
Pixel 10 ও Pixel 11 সিরিজ, সাথে নিম্নলিখিত চিপসেটে Gemini Nano সহ ডিভাইস (Samsung Galaxy S26, Z Flip8 ও Z Fold8 সিরিজ সহ অন্যান্য):
|
সেট-আপ সংক্রান্ত সাধারণ সমস্যা
ML Kit GenAI API, Gemini Nano অ্যাক্সেস করার জন্য Android AICore অ্যাপের উপর নির্ভর করে। কোনও ডিভাইস সেট-আপ (রিসেট সহ) বা AICore অ্যাপ রিসেট (যেমন, ডেটা মুছে ফেলা, আনইনস্টল করে আবার ইনস্টল করা) করার ঠিক পরেই, AICore অ্যাপের কাছে ইনিশিয়ালাইজেশন (সার্ভার থেকে লেটেস্ট কনফিগারেশন ডাউনলোড করা সহ) সম্পূর্ণ করার জন্য পর্যাপ্ত সময় নাও থাকতে পারে। এর ফলে, ML Kit GenAI API প্রত্যাশা অনুযায়ী কাজ নাও করতে পারে। সেট-আপ করার সময় আপনি যেসব সাধারণ সমস্যার মেসেজ দেখতে পেতে পারেন এবং সেগুলি কীভাবে সমাধান করবেন তা এখানে দেওয়া হল:
| সমস্যার মেসেজের উদাহরণ | কীভাবে সামলাবেন |
| AICore-এ সমস্যা হয়েছে, সমস্যার ধরন 4-CONNECTION_ERROR এবং সমস্যার কোড 601-BINDING_FAILURE: AICore পরিষেবা বাইন্ড করা যায়নি। | ডিভাইস সেট-আপ করার সাথে সাথেই ML Kit GenAI API ব্যবহার করে অ্যাপ ইনস্টল করলে অথবা আপনার অ্যাপ ইনস্টল করার পরে AICore আনইনস্টল করা হলে এটি হতে পারে। AICore অ্যাপ আপডেট করে আপনার অ্যাপ আবার ইনস্টল করলে সমস্যার সমাধান হয়ে যাবে। |
| AICore-এ সমস্যা হয়েছে, সমস্যার ধরন 3-PREPARATION_ERROR এবং সমস্যার কোড 606-FEATURE_NOT_FOUND: ফিচার ... উপলভ্য নেই। |
AICore লেটেস্ট কনফিগারেশন ডাউনলোড করা শেষ না করলে এটি হতে পারে। ডিভাইস ইন্টারনেটের সাথে কানেক্ট করা থাকলে, আপডেট হতে সাধারণত কয়েক মিনিট থেকে কয়েক ঘণ্টা সময় লাগে। ডিভাইস রিস্টার্ট করলে আপডেট দ্রুত হতে পারে।
মনে রাখবেন, ডিভাইসের বুটলোডার আনলক করা থাকলে, আপনি এই সমস্যাও দেখতে পাবেন—এই API আনলক করা বুটলোডার সহ ডিভাইসে কাজ করে না। |
| AICore-এ সমস্যা হয়েছে, সমস্যার ধরন 1-DOWNLOAD_ERROR এবং সমস্যার কোড 0-UNKNOWN: ফিচার ... কাজ করেনি, স্ট্যাটাস 0 এবং সমস্যা esz: UNAVAILABLE: হোস্ট ... সমাধান করা যায়নি | নেটওয়ার্ক কানেকশন চালু রাখুন, কয়েক মিনিট অপেক্ষা করে আবার চেষ্টা করুন। |
নমুনা কোড
- GitHub-এ ML Kit স্পিচ রিকগনিশন API কোড স্যাম্পেল এক্সপ্লোর করুন