SFSpeechRecognizer হলো iOS ইকোসিস্টেমে Apple-এর প্রধান স্পিচ রিকগনিশন API। ফ্রেমওয়ার্কটি Speech.framework-এর মাধ্যমে ডিভাইসের ASR ইঞ্জিনে অ্যাক্সেস প্রদান করে, রিয়েল-টাইম স্ট্রিমিং ট্রান্সক্রিপশন এবং একবারের অডিও ফাইল রিকগনিশন সমর্থন করে। SFSpeechRecognizer iOS 10+, macOS 10.15+, watchOS 6+ এবং tvOS 17+-এ উপলব্ধ। iOS 17-এর সাথে, Apple একটি সম্পূর্ণ অন-ডিভাইস মোড যুক্ত করেছে যা ইন্টারনেট সংযোগ ছাড়াই স্পিচ রিকগনিশনের অনুমতি দেয়। Apple Speech Documentation, 2025 অনুযায়ী, SFSpeechRecognizer 200,000-এরও বেশি App Store অ্যাপ্লিকেশনে ব্যবহৃত হয় এবং ইংরেজিতে 7% WER-সহ প্রতিদিন লক্ষ লক্ষ অনুরোধ প্রক্রিয়া করে।
মূল বিষয়
SFSpeechRecognizer হলো Speech.framework-এর একটি ক্লাস যা একটি নির্দিষ্ট ভাষার জন্য স্পিচ রিকগনাইজার উপস্থাপন করে। এটি Locale (ru_RU, en_US, zh_CN)-এর মাধ্যমে আরম্ভ করা হয়। SFSpeechRecognizer একটি রিকগনিশন অনুরোধ (SFSpeechRecognitionRequest) পরিচালনা করে এবং ট্রান্সক্রিপশন ও মেটাডেটা-সহ ফলাফল (SFSpeechRecognitionResult) ফেরত দেয়। এটি দুই ধরনের অনুরোধ সমর্থন করে: SFSpeechAudioBufferRecognitionRequest (লাইভ অডিও স্ট্রিম) এবং SFSpeechURLRecognitionRequest (অডিও ফাইল)। উভয়ই SFTranscription ফেরত দেয় — বিকল্প রিকগনিশন হাইপোথিসিসের একটি অ্যারে।
SFSpeechRecognitionResult-এ রয়েছে: bestTranscription (সেরা হাইপোথিসিস, SFTranscription), transcriptions (সকল বিকল্প), isFinal (চূড়ান্ত/মধ্যবর্তী)। SFTranscription-এ রয়েছে: formattedString (টেক্সট), segments (টাইমস্ট্যাম্প, কনফিডেন্স, substringRange, alternativeSubstrings-সহ SFTranscriptionSegment-এর অ্যারে)। প্রতিটি সেগমেন্টের জন্য কনফিডেন্স (0..1) — অবিশ্বস্ত অংশ ফিল্টার করার অনুমতি দেয়। সেগমেন্টগুলি Speech.framework-এর একটি মূল বৈশিষ্ট্য: এগুলি কনফিডেন্স স্কোর-সহ প্রতি-শব্দ মার্কআপ প্রদান করে।
SFSpeechRecognizer আর্কিটেকচার: AVFoundation (অডিও ক্যাপচার) → Audio Buffer → SFSpeechAudioBufferRecognitionRequest → SFSpeechRecognizer (ASR ইঞ্জিন) → SFSpeechRecognitionResult → SFSpeechRecognitionTask (নিয়ন্ত্রণ: cancel, finish, pause)। Apple-এর ASR ইঞ্জিন একটি হাইব্রিড আর্কিটেকচার ব্যবহার করে: অন-ডিভাইসের জন্য Conformer (এনকোডার) + RNNT (ডিকোডার), ক্লাউডের জন্য Transducer। মডেলগুলি Apple Neural Engine (ANE)-এর জন্য অপ্টিমাইজ করা। A17 Pro-তে, অন-ডিভাইস ASR RTF 0.3–0.6 (রিয়েল টাইমের চেয়ে দ্রুত)-এ চলে।
| উপাদান | উদ্দেশ্য | iOS সংস্করণ |
|---|---|---|
| SFSpeechRecognizer | প্রধান রিকগনিশন ক্লাস | iOS 10+ |
| SFSpeechAudioBufferRecognitionRequest | লাইভ অডিও স্ট্রিম | iOS 10+ |
| SFSpeechURLRecognitionRequest | অডিও ফাইল (.wav, .m4a) | iOS 10+ |
| SFSpeechRecognitionTask | অনুরোধ ব্যবস্থাপনা (cancel, finish) | iOS 10+ |
| অন-ডিভাইস রিকগনিশন | অফলাইন ASR | iOS 17+ |
| সম্মিলিত রিকগনিশন | হাইব্রিড অন-ডিভাইস + ক্লাউড | iOS 17+ |
অডিও প্রয়োজনীয়তা: SFSpeechRecognizer LPCM (16 kHz, 16 bit, mono) বা Opus (iOS 17+) গ্রহণ করে। AVFoundation যেকোনো ফরম্যাটের বাফার ক্যাপচার করতে পারে, অনুরোধ স্বয়ংক্রিয়ভাবে রূপান্তর করে। ন্যূনতম দৈর্ঘ্য: 0.5 সেকেন্ড (নীরবতা শনাক্তকরণ)। সর্বোচ্চ: 1 মিনিট (ক্লাউড) / 2 মিনিট (অন-ডিভাইস) প্রতি অনুরোধ। দীর্ঘ ট্রান্সক্রিপশনের জন্য, 2–5 সেকেন্ড ওভারল্যাপ-সহ 30–60 সেকেন্ডের খণ্ডে অডিও বিভক্ত করুন।
ব্যবহারকারীর অনুমতি: SFSpeechRecognizer-এর দুটি স্পষ্ট অনুমতি প্রয়োজন। NSMicrophoneUsageDescription (Privacy — Microphone Usage Description) — মাইক্রোফোন অ্যাক্সেসের জন্য। NSSpeechRecognitionUsageDescription (Privacy — Speech Recognition Usage Description) — স্পিচ রিকগনিশন অ্যাক্সেসের জন্য। উভয়ই ব্যবহারকারীকে কারণ ব্যাখ্যা করে স্ট্রিং। SFSpeechRecognizer.requestAuthorization — অনুমতি ডায়ালগ প্রদর্শন করে। অবস্থা: notDetermined, denied, restricted, authorized। authorized অবস্থা ছাড়া, recognizer কল করলে ত্রুটি 216 (Speech framework error) ফেরত আসে।
উপলব্ধতা পরীক্ষা: SFSpeechRecognizer.isAvailable — বর্তমান ভাষার জন্য ASR উপলব্ধ কিনা তা পরীক্ষা করে। iOS 16-তে, isAvailable = false ইন্টারনেট ছাড়া। iOS 17+-এ, isAvailable = true অন-ডিভাইস ভাষার জন্য অফলাইনেও। SFSpeechRecognizer.supportedLocales — ডিভাইস দ্বারা সমর্থিত ভাষার তালিকা পাওয়ার জন্য একটি স্ট্যাটিক মেথড। প্রতিটি লঞ্চের আগে isAvailable পরীক্ষা করার পরামর্শ দেওয়া হয় (ব্যবহারকারী সেটিংসে Siri/ডিক্টেশন নিষ্ক্রিয় করতে পারে)। উপলব্ধতা অঞ্চলের উপর নির্ভর করে: চীনা — শুধুমাত্র চীনে, আরবি — UAE-তে।
// SFSpeechRecognizer সেটআপ
import Speech
SFSpeechRecognizer.requestAuthorization { status in
guard status == .authorized else { return }
}
let recognizer = SFSpeechRecognizer(locale: Locale(identifier: "ru_RU"))!
guard recognizer.isAvailable else {
print("ASR উপলব্ধ নয়। সেটিংসে Siri এবং ডিক্টেশন সক্ষম করুন")
return
}
let request = SFSpeechAudioBufferRecognitionRequest()
request.requiresOnDeviceRecognition = true
ত্রুটি ব্যবস্থাপনা: SFSpeechRecognizer একটি completion handler-সহ কল করা হয় যা Error ফেরত দিতে পারে। প্রধান ত্রুটিগুলি: 203 — কোনো ইন্টারনেট নেই (ক্লাউড, iOS 16-); 216 — অনুমোদিত নয় (কোনো অনুমতি নেই); 301 — অডিও ত্রুটি (মাইক্রোফোন/ফরম্যাট সমস্যা); 401 — পরিষেবা অনুপলব্ধ (পরিষেবা ওভারলোড); 601 — ভাষা অনুপলব্ধ (ডিভাইসে ভাষা সমর্থিত নয়)। অন-ডিভাইস iOS 17+-এর জন্য, প্রধান ত্রুটিগুলি: 301 (অডিও), 601 (ভাষা)। সর্বদা completion handler পরিচালনা করুন — রেকর্ডিংয়ের সময় যেকোনো মুহূর্তে ত্রুটি ঘটতে পারে।
লাইভ ASR পাইপলাইন: AVAudioEngine (মাইক্রোফোন ক্যাপচার) → installTap (অডিও বাফার) → request.append(buffer) → SFSpeechRecognizer → recognitionTask → delegate/resultHandler। AVAudioEngine কম লেটেন্সি (মাইক থেকে বাফারে 5–10 ms) প্রদান করে। SFSpeechRecognitionDelegate: didHypothesizeTranscription (প্রতি 200–500 ms — আংশিক টেক্সট), didFinishRecognition (চূড়ান্ত ফলাফল)। Task.isFinishing — রিকগনিশন সম্পূর্ণ হলে বাতিল করতে পারেন। ধারাবাহিক রিকগনিশনের (অন্তহীন ডিক্টেশন) জন্য, isFinal-এর পরে একটি নতুন টাস্ক তৈরি করুন।
SFSpeechRecognitionTaskDelegate: ঐচ্ছিক মেথড। speechRecognitionDidDetectSpeech (বক্তব্য শুরু) — UI ইঙ্গিতের জন্য। didHypothesizeTranscription (মধ্যবর্তী টেক্সট) — বলার সময় প্রদর্শনের জন্য। didFinishRecognition (চূড়ান্ত ফলাফল) — টেক্সট চূড়ান্ত করার জন্য। didFinishSuccessfully (সফলতা/ত্রুটি) — সমাপ্তির জন্য। didProcessAudio (অডিও বাফার প্রক্রিয়াকৃত) — RMS মিটারের জন্য। didHypothesizeTranscription বাস্তবায়নের পরামর্শ দেওয়া হয় — ব্যবহারকারী বিলম্ব ছাড়াই সাথে সাথে টেক্সট দেখতে পায়। চূড়ান্ত ট্রান্সক্রিপশন সংরক্ষণের জন্য।
// লাইভ স্পিচ রিকগনিশন
let audioEngine = AVAudioEngine()
let request = SFSpeechAudioBufferRecognitionRequest()
request.shouldReportPartialResults = true
recognitionTask = recognizer.recognitionTask(with: request) { result, error in
if let result = result {
textView.text = result.bestTranscription.formattedString
}
if error != nil || result?.isFinal == true {
audioEngine.stop()
request.endAudio()
}
}
let inputNode = audioEngine.inputNode
let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024,
format: recordingFormat) { buffer, _ in
request.append(buffer)
}
audioEngine.prepare()
try audioEngine.start()
ধারাবাহিক রিকগনিশন: “সর্বদা শোনা” মোডের (ভয়েস ইনপুট, সহায়ক) জন্য, isFinal-এর পরে টাস্ক পুনরায় শুরু করা প্রয়োজন। একটি লুপ তৈরি করুন: finishTask → request = SFSpeechAudioBufferRecognitionRequest() → recognitionTask = recognizer.recognitionTask(with: request)। ফাঁক এড়াতে, একটি টাস্কের শেষকে পরবর্তীটির শুরুর সাথে ওভারল্যাপ করুন (পূর্ববর্তীটি শেষ হওয়ার 1–2 সেকেন্ড আগে একটি নতুন অনুরোধ শুরু করুন)। AVFoundation AVAudioSession — একসঙ্গে প্লেব্যাক এবং রেকর্ডিংয়ের জন্য .playAndRecord কনফিগার করুন। iOS 17+-এ, অন-ডিভাইস-সহ ধারাবাহিক ASR প্রতি ঘন্টায় 2–5% ব্যাটারি খরচ করে (A15+).
SFSpeechURLRecognitionRequest — URL-এর মাধ্যমে অডিও ফাইল শনাক্ত করার জন্য একটি অনুরোধ। ফরম্যাট সমর্থন করে: .wav (16 kHz, 16 bit, mono), .m4a (AAC), .mp4, .mov। সর্বোচ্চ দৈর্ঘ্য: ~1 মিনিট ক্লাউডের জন্য, ~2 মিনিট অন-ডিভাইসের জন্য। দীর্ঘ ফাইলের জন্য, খণ্ডে বিভক্ত করুন (AVAssetExportSession + trim)। SFSpeechURLRecognitionRequest স্ট্রিমিং সমর্থন করে না (কোনো আংশিক ফলাফল নেই) — শুধুমাত্র চূড়ান্ত ফলাফল। ফাইলের সাথে আংশিক ফলাফলের জন্য, Audio Buffer Request-এ রূপান্তর করুন।
অডিও ফাইল ট্রান্সক্রিপশন পাওয়া: SFSpeechRecognizer.recognitionTask(with: request) resultHandler। bestTranscription.formattedString বের করুন। শব্দ-স্তরের টাইমস্ট্যাম্পের জন্য — bestTranscription.segments থেকে segments (segment.duration, segment.timestamp, segment.substring)। প্রতি সেগমেন্ট কনফিডেন্স — প্রতিটি শব্দের জন্য ASR কনফিডেন্স (ফিল্টারিংয়ের জন্য ব্যবহার করুন)। বিকল্প হাইপোথিসিস — কম কনফিডেন্সের শব্দের জন্য transcriptionFormatter বিকল্প। একাধিক বক্তার ফাইলের জন্য, SFSpeechRecognitionRequest একাধিক অনুরোধ ফেরত দিতে পারে (প্রতি বক্তায় একটি, iOS 17+).
// অডিও ফাইল ট্রান্সক্রিপশন
let audioURL = Bundle.main.url(forResource: "recording", withExtension: "m4a")!
let request = SFSpeechURLRecognitionRequest(url: audioURL)
request.requiresOnDeviceRecognition = true
recognizer.recognitionTask(with: request) { result, error in
guard let result = result, error == nil else {
print("ত্রুটি: \(error?.localizedDescription ?? "unknown")")
return
}
let transcription = result.bestTranscription
let text = transcription.formattedString
let words = transcription.segments.map { segment in
Word(text: segment.substring,
start: segment.timestamp,
duration: segment.duration,
confidence: segment.confidence)
}
}
দীর্ঘ অডিও ফাইল বিভক্ত করা: 1 মিনিটের বেশি ফাইলের জন্য, 2–3 সেকেন্ড ওভারল্যাপ (সেলাই)-সহ 30–60 সেকেন্ডের খণ্ডে বিভক্ত করুন। AVAssetExportSession + CMTimeRange — খণ্ড রপ্তানি করুন। বিকল্প: UISelectionView (ব্যবহারকারী একটি খণ্ড নির্বাচন করে)। ট্রান্সক্রিপশন সেলাই: টেক্সট একত্রিত করুন, ওভারল্যাপ দ্বারা সেলাই করুন (পূর্ববর্তী খণ্ডের শেষ 2–3 শব্দের সাথে পরবর্তী খণ্ডের প্রথম 2–3 শব্দের তুলনা করুন — ডুপ্লিকেট সরান)। Vosk এবং Whisper দীর্ঘ অডিও নেটিভভাবে সমর্থন করে, SFSpeechRecognizer সমর্থন করে না। দীর্ঘ ট্রান্সক্রিপশনের জন্য, আমি Whisper (Core ML) সুপারিশ করছি — কোনো দৈর্ঘ্য সীমা নেই।
অন-ডিভাইস মোড (iOS 17+): request.requiresOnDeviceRecognition = true। ASR Apple Neural Engine (ANE)-তে স্থানীয়ভাবে চলে। সুবিধা: ইন্টারনেটের প্রয়োজন নেই, গোপনীয়তা (অডিও ডিভাইস ছেড়ে যায় না), শূন্য খরচ (বিনামূল্যে), কম লেটেন্সি (RTF 0.3–0.6)। অসুবিধা: কম নির্ভুলতা (WER 12–14% বনাম 7–12%), প্রতি অনুরোধে 2 মিনিটের সীমা, সীমিত ভাষা সেট (সকল 60 ভাষা অন-ডিভাইসে উপলব্ধ নয়)। অন-ডিভাইস মডেল ডিভাইসে ~50–100 MB জায়গা নেয় এবং প্রথম অনুরোধে ডাউনলোড হয়।
ক্লাউড (iOS 16-): request.requiresOnDeviceRecognition = false (বা প্যারামিটার অনুপস্থিত)। Apple সার্ভারে ASR — আরও নির্ভুল (WER 7% EN, 12% RU), আরও ভাষা, প্রতি অনুরোধে 1 মিনিট পর্যন্ত। ইন্টারনেট (WiFi বা সেলুলার) প্রয়োজন। Apple ডেভেলপারদের কাছ থেকে ক্লাউড ASR-এর জন্য চার্জ নেয় না (বিনামূল্যে)। সীমা: প্রতি অ্যাপ্লিকেশনে প্রতি মিনিটে 1 অনুরোধ (অনির্দিষ্ট), কিন্তু Apple উৎপাদন স্কেলে সীমিত করতে পারে। ক্লাউড ASR SLA ছাড়াই সর্বোত্তম-প্রচেষ্টা গুণমান প্রদান করে। এন্টারপ্রাইজ অ্যাপের জন্য, Google Cloud ASR বা Whisper (Core ML) ব্যবহার করুন।
| প্যারামিটার | অন-ডিভাইস (iOS 17+) | ক্লাউড (iOS 10+) |
|---|---|---|
| ইন্টারনেট প্রয়োজন | না | হ্যাঁ |
| WER (EN) | 10–12% | 7% |
| WER (RU) | 12–14% | 12% |
| লেটেন্সি (RTF) | 0.3–0.6 | 0.3–0.8 (+নেটওয়ার্ক) |
| সর্বোচ্চ দৈর্ঘ্য | 2 মিনিট | 1 মিনিট |
| গোপনীয়তা | পূর্ণ | অডিও ডিভাইস ছেড়ে যায় |
| বিনামূল্যে | হ্যাঁ | হ্যাঁ |
সম্মিলিত রিকগনিশন (iOS 17+): request.requiresOnDeviceRecognition = false ইন্টারনেট থাকলে (ক্লাউড), = true অফলাইনে (ফলব্যাক)। Apple স্বয়ংক্রিয়ভাবে মোড নির্বাচন করে। নির্ভুলতা-গুরুত্বপূর্ণ অ্যাপের জন্য: NetworkMonitor (NWPathMonitor) পরীক্ষা করুন — ইন্টারনেট থাকলে ক্লাউড, না থাকলে অন-ডিভাইস ব্যবহার করুন। গোপনীয়তা-গুরুত্বপূর্ণ অ্যাপের জন্য: সর্বদা অন-ডিভাইস। ট্রান্সক্রিপশনের জন্য: ক্লাউড (আরও নির্ভুল)। ভয়েস ইনপুটের জন্য: অন-ডিভাইস (দ্রুত)। সম্মিলিত সুপারিশ করা হয়: 80% ক্লাউড, 20% অন-ডিভাইস ফলব্যাক।
কাস্টম কিবোর্ডে ভয়েস ইনপুট — SFSpeechRecognizer কিবোর্ড এক্সটেনশনে (iOS 10+) একীভূত। ব্যবহারকারী মাইক্রোফোন বাটন টিপে, ASR বক্তব্যকে টেক্সটে ট্রান্সক্রাইব করে এবং টেক্সট ফিল্ডে সন্নিবেশ করে। প্রয়োজনীয়তা: আংশিক ফলাফল (রিয়েল টাইমে টেক্সট দেখা), অন-ডিভাইস (কিবোর্ডকে ইন্টারনেট ছাড়া কাজ করতে হবে)। SFSpeechRecognizer + AVSpeechSynthesizer — ভয়েস ইনপুট + ভয়েস আউটপুট। iOS 17+-এ কাস্টম কিবোর্ডের জন্য, অন-ডিভাইস ব্যবহার করুন। কিবোর্ড এক্সটেনশনের সীমাবদ্ধতা: AVAudioEngine উপলব্ধ কিন্তু সময়ের সীমাবদ্ধতা-সহ (ব্যাকগ্রাউন্ড এক্সিকিউশন সীমিত)।
মিটিং এবং লেকচার ট্রান্সক্রিপশন — অডিও রেকর্ড এবং ট্রান্সক্রাইব করার অ্যাপ (Otter.ai, Rev, Apple Voice Memos)। SFSpeechURLRecognitionRequest .m4a ফাইল প্রক্রিয়া করে। দীর্ঘ রেকর্ডিংয়ের (30–60 মিনিট) জন্য — Whisper Core ML (কোনো দৈর্ঘ্য সীমা নেই)। টাইমস্ট্যাম্প-সহ SFSpeechRecognizer segments — অডিওর সাথে টেক্সট সিঙ্ক করার জন্য (প্লেব্যাকের সময় টেক্সট হাইলাইটিং)। প্রতি সেগমেন্ট কনফিডেন্স — অবিশ্বস্ত অংশ প্রদর্শনের জন্য (হলুদ হাইলাইট)। স্পিকার ডায়ারাইজেশনের (কে কথা বলেছে) জন্য — Apple API প্রদান করে না, সার্ভারে pyannote-audio + Whisper ব্যবহার করুন।
iOS অ্যাপে ভয়েস কমান্ড — SFSpeechRecognizer + VGS ফ্রেমওয়ার্ক (Voice Grammar Services) কমান্ড কার্যকর করার জন্য: “সেটিংস খুলুন”, “বার্তা পাঠান”, “লাইট চালু করুন”। ব্যাকরণ-ভিত্তিক রিকগনিশন: SFSpeechRecognitionRequest contextualStrings = কমান্ডের অ্যারে। এটি কমান্ড রিকগনিশন নির্ভুলতা 95% পর্যন্ত উন্নত করে (বনাম 85% মুক্ত-রূপ)। SFSpeechRecognitionTask.cancel — কমান্ড কার্যকর করার পরে বাধা দেওয়ার জন্য। VGS + SFSpeechRecognizer + Shortcuts — UI না লিখে কাস্টম ভয়েস কমান্ড। অ্যাক্সেসযোগ্যতার জন্য: Voice Control (অন্তর্নির্মিত) + SFSpeechRecognizer (কাস্টম কমান্ড)।
// প্রাসঙ্গিক স্ট্রিং-সহ ভয়েস কমান্ড
let request = SFSpeechAudioBufferRecognitionRequest()
request.requiresOnDeviceRecognition = true
request.shouldReportPartialResults = true
request.contextualStrings = ["open contacts", "send message",
"show notifications", "লাইট চালু করুন"]
recognitionTask = recognizer.recognitionTask(with: request) { result, _ in
guard let text = result?.bestTranscription.formattedString.lowercased() else { return }
voiceCommands.first { text.contains($0) }.map { command in
DispatchQueue.main.async { self.executeCommand(command) }
recognitionTask?.cancel()
}
}
চিকিৎসা এবং আইনি অ্যাপে ডিক্টেশন — SFSpeechRecognizer ভয়েসের মাধ্যমে কাঠামোবদ্ধ ডকুমেন্ট তৈরি করার জন্য। ডোমেন অভিযোজন: চিকিৎসা/আইনি শর্তাবলী-সহ contextualStrings (500+ বাক্যাংশ)। SFSpeechRecognitionRequest.customLmProbability — contextualStrings-এর প্রভাব (0.1–1.0)। চিকিৎসা ডিক্টেশনের জন্য, অন-ডিভাইস ব্যবহার করুন (রোগীর ডেটা গোপনীয়তা)। চিকিৎসা ডেটায় ফাইন-টিউন করা Whisper — বেস SFSpeechRecognizer-এর 12% এর পরিবর্তে WER 5%-সহ বিকল্প। HIPAA সম্মতি: অন-ডিভাইস মোড (ডেটা ডিভাইস ছেড়ে যায় না)। অ্যাপয়েন্টমেন্ট ট্রান্সক্রিপশনের জন্য — SFSpeechURLRecognitionRequest + স্পিকার টাইমস্ট্যাম্প-সহ segments।
সচরাচর জিজ্ঞাসিত প্রশ্ন
SFSpeechRecognizer iOS 10, macOS 10.15, watchOS 6 এবং tvOS 17 থেকে উপলব্ধ। অন-ডিভাইস মোড iOS 17 থেকে (requiresOnDeviceRecognition)। iOS 10–16-এ, SFSpeechRecognizer শুধুমাত্র Apple-এর ক্লাউড সার্ভারের মাধ্যমে কাজ করে (ইন্টারনেট প্রয়োজন)। সকল সংস্করণে স্পষ্ট ব্যবহারকারীর অনুমতি প্রয়োজন (NSMicrophoneUsageDescription + NSSpeechRecognitionUsageDescription)। SFSpeechRecognizer.supportedLocales — গতিশীল তালিকা, অঞ্চল এবং ডিভাইস মডেলের উপর নির্ভর করে।
হ্যাঁ, isFinal-এর পরে নতুন recognitionTask তৈরি করে। ধারাবাহিক রিকগনিশনের জন্য পূর্ববর্তী টাস্ক শেষ হওয়ার পরে টাস্ক পুনরায় শুরু করুন। iOS 17-এ, অন-ডিভাইস ধারাবাহিক ASR প্রতি ঘন্টায় 2–5% ব্যাটারি খরচ করে (A15+). iOS 16-এ, ধারাবাহিক ASR-এর জন্য ইন্টারনেট প্রয়োজন (ট্রাফিক ~1 MB/মিনিট)। সত্যিই ধারাবাহিক রিকগনিশনের (সর্বদা শোনা) জন্য, Vosk (অফলাইন) বা Whisper Core ML ব্যবহার করুন। SFSpeechRecognizer iOS 16-এ সর্বদা-চালু মোড সমর্থন করে না।
result.bestTranscription.segments ব্যবহার করুন — প্রতিটি SFTranscriptionSegment-এ শব্দের জন্য confidence (Float 0..1) থাকে। segments[i].substring — শব্দের টেক্সট। segments[i].confidence — সেই শব্দের জন্য ASR কনফিডেন্স। confidence < 0.5-যুক্ত শব্দগুলি অবিশ্বস্ত — সেগুলি UI-তে হাইলাইট করুন। segments[i].timestamp — শুরু করার সময় (TimeInterval)। segments[i].duration — সময়কাল। segments[i].alternativeSubstrings — শব্দের জন্য বিকল্প রিকগনিশন হাইপোথিসিস। দীর্ঘ ফাইলের জন্য, segments-এর উপর পুনরাবৃত্তি ম্যানুয়াল পার্সিং ছাড়াই প্রতি-শব্দ কনফিডেন্স প্রদান করে।
203 হলো SFSpeechError.ErrorCode.opportunistic (ক্লাউড ASR-এর জন্য কোনো ইন্টারনেট নেই)। iOS 16-তে বা request.requiresOnDeviceRecognition = false ইন্টারনেট ছাড়া হলে ঘটে। সমাধান: অফলাইন অপারেশনের জন্য requiresOnDeviceRecognition = true (iOS 17+) সেট করুন। iOS 16-তে, NWPathMonitor ব্যবহার করুন — যখন ইন্টারনেট না থাকে, তখন “স্পিচ রিকগনিশনের জন্য ইন্টারনেট সংযোগ প্রয়োজন” বার্তা প্রদর্শন করুন। বিকল্প: যখন কোনো নেটওয়ার্ক উপলব্ধ না থাকে তখন ফলব্যাক হিসাবে Vosk (অফলাইন, iOS 12+) ব্যবহার করুন।
SFSpeechRecognizer — Apple-এর অন্তর্নির্মিত API, বিনামূল্যে, একীভূত করা সহজ, কিন্তু দৈর্ঘ্য সীমা (1–2 মিনিট), WER নির্ভুলতা 7–14% এবং শুধুমাত্র iOS ইকোসিস্টেমের জন্য। Whisper Core ML — ওপেন-সোর্স (MIT), 99টি ভাষা সমর্থন করে, WER 6–10%, কোনো দৈর্ঘ্য সীমা নেই, কিন্তু ম্যানুয়াল ইন্টিগ্রেশন, Core ML মডেল (39M–769M প্যারামিটার), RTF 0.5–6 (SFSpeechRecognizer-এর চেয়ে ধীর) প্রয়োজন। SFSpeechRecognizer — স্ট্যান্ডার্ড ভয়েস ইনপুটের জন্য। Whisper — উচ্চ-নির্ভুলতা দীর্ঘ অডিও ট্রান্সক্রিপশনের জন্য।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন