Table of Contents
ادغام شناخت صدا در برنامه های iOS تبدیل می کند که چگونه کاربران تعامل می کنند، کنترل بدون دست، ورود سریع داده ها، و بهبود دسترسی به چارچوب گفتار اپل ارائه می دهد قوی، قابلیت های گفتار به متن است که به حریم خصوصی کاربر احترام می گذارد و رونویسی قابل اعتماد در زمان واقعی را ارائه می دهد. این مقاله همه چیز را از تنظیمات بنیادی به الگوهای پیشرفته پیاده سازی، از جمله بهینه سازی عملکرد، پشتیبانی چند زبانه و بهترین شیوه های مدیریت خطا پوشش می دهد.
درک معماری چارچوب گفتار
چارچوب گفتار (در iOS 10) از طریق سه جزء اصلی عمل می کند:
- SFSpeechRecognizer - رابط اصلی که هماهنگ تشخیص برای یک زبان خاص و محلی است، می تواند پیکربندی شده برای استفاده در دستگاه یا شناخت مبتنی بر سرور.
- درخواست تشخیص هویت [FLT1] - دو زیرکلاس اصلی را نشان می دهد: برای فایل های صوتی پیش ضبط شده و برای جریان های صوتی زنده.
- SFSpeechRecognitiontask - مدیریت فرایند تشخیص، ارائه به روز رسانی های پیشرفت و نتایج نهایی است.
چارچوب صدا را از طریق یک موتور تشخیص گفتار خودکار (ASR) پردازش می کند.به طور پیش فرض، iOS 15+ برای تمام زبان های پشتیبانی شده استفاده می کند که تأخیر را کاهش می دهد و داده ها را تضمین می کند که شناسایی مبتنی بر سرور هنوز برای دستگاه های قدیمی یا زبان های خاص در دسترس است، اما نیاز به اتصال فعال اینترنت و رضایت کاربر دارد.
ویژگی های کلیدی و قابلیت های
- جریان زمان واقعی - صدا به عنوان کاربر صحبت می کند، با نتایج دوره ای جزئی.
- [[۱] [۱۰] [۱] [۱۰] [۱]] [۱۰]] [۱۰]] [۱] [۱۰] [۱]] [۱۰]] [۱]] [۱] [۱۰] [۱]]] [۵] [۱]] [۱۰] [۱]] [۱] [۱] [۳] و [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [
- عبارات مفهومی - توسعه دهندگان می توانند عبارات سفارشی را از طریق برای بهبود دقت برای شرایط خاص دامنه ارائه دهند.
- زبان های پشتیبانی شده – بیش از 60 زبان و لهجه های منطقه ای استفاده کنید.
تنظیم مجوز های بالا و Project Configuration
همیشه مجوز درخواست صریح بدون اجازه مناسب، سیستم درخواست های تشخیص را رد می کند:
اطلاعات.plist الزامات
به عنوان مثال، کلید (FLT:6) (Privacy – تشخیص گفتار) را با توضیح روشن و کاربر به صورت مثال اضافه کنید:
<key>NSSpeechRecognitionUsageDescription</key>
<string>This app uses speech recognition to transcribe your voice commands for hands-free navigation.</string>
اگر برنامه شما همچنین دارای صدا (معمولا برای تشخیص زنده) است، اضافه کنید
درخواست مجوز
در ابتدای دوره ی آموزشی، به طور معمول در یک دوره ی آزمایشی، به نام «FLT:10» (FLT10)، فراخوانی یکی از چهار وضعیت را باز می گرداند:
import Speech
SFSpeechRecognizer.requestAuthorization { authStatus in
DispatchQueue.main.async {
switch authStatus {
case .authorized:
// Enable microphone and recognition UI
case .denied, .restricted:
// Show error and disable features
print("Speech recognition not available")
case .notDetermined:
// Handle if the user hasn't seen the dialog (rare)
@unknown default:
break
}
}
}
توجه: چارچوب ممکن است (FLT:12) بازگردد اگر دستگاه توسط یک نمایه کنترل والدین مدیریت شود یا اگر تشخیص گفتار از طریق زمان صفحه نمایش غیرفعال شود.
اجرای زنده گفتار تشخیص
برای ضبط صدا در زمان واقعی، شما نیاز به یک [FLT 13] برای انتقال بافرهای صوتی به درخواست شناسایی دارید.کد زیر نشان دهنده اجرای آماده تولید با تمیز کردن مناسب است.
مرحله 1: جلسه صوتی
let audioEngine = AVAudioEngine()
let request = SFSpeechAudioBufferRecognitionRequest()
var recognitionTask: SFSpeechRecognitionTask?
func configureAudioSession() {
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(.record, mode: .measurement, options: .duckOthers)
try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
} catch {
print("Audio session config failed: \(error.localizedDescription)")
}
}
گزینه کاهش حجم موسیقی پس زمینه، که بهبود دقت رونویسی در محیط های پر سر و صدا، برای برنامه های صوتی تنها، در نظر بگیرید برای هدایت صدا از طریق بلندگو دستگاه به جای گوش.
مرحله دوم: شناخت و درخواست را ایجاد کنید
func startRecognition() {
guard let recognizer = SFSpeechRecognizer(locale: Locale(identifier: "en-US")),
recognizer.isAvailable else {
handleError("Recognizer unavailable or not supported")
return
}
configureAudioSession()
request.shouldReportPartialResults = true
let inputNode = audioEngine.inputNode
let recordingFormat = inputNode.outputFormat(forBus: 0)
recognitionTask = recognizer.recognitionTask(with: request) { result, error in
if let result = result {
let transcribedText = result.bestTranscription.formattedString
// Update UI or process command
print("Partial: \(transcribedText)")
if result.isFinal {
self.stopRecognition()
// Handle final transcription
}
}
if let error = error {
self.stopRecognition()
self.handleError(error.localizedDescription)
}
}
inputNode.installTap(onBus: 0, bufferSize: 1024,
format: recordingFormat) { buffer, _ in
self.request.append(buffer)
}
audioEngine.prepare()
do {
try audioEngine.start()
} catch {
handleError("Audio engine start failed: \(error.localizedDescription)")
}
}
مرحله 3: تمیز کردن گریس
func stopRecognition() {
recognitionTask?.cancel()
audioEngine.stop()
audioEngine.inputNode.removeTap(onBus: 0)
request.endAudio()
// Optionally deactivate audio session
try? AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
}
همیشه قبل از متوقف کردن موتور صوتی، وظیفه تشخیص را لغو کنید.برای حذف ضربه بر روی گره ورودی می تواند چرخه ها را حفظ کند و از آزاد شدن میکروفون جلوگیری کند.
مدیریت چند زبانه و محلی سفارشی
چارچوب گفتار از تشخیص محلی پویا پشتیبانی می کند، شما می توانید به کاربران اجازه دهید زبان را تغییر دهند یا حتی چندین زبان را در یک جلسه با ایجاد موارد جداگانه (FLT 19) تشخیص دهند.
let locales = ["en-US", "fr-FR", "zh-CN"]
let recognizers = locales.compactMap { SFSpeechRecognizer(locale: Locale(identifier: $0)) }
// Use recognizers[0] for English, etc.
برای تشخیص دستگاه، هر تشخیص دهنده حافظه را متناسب با مدل زبان خود مصرف می کند. عملکرد تست در دستگاه های قدیمی تر هنگام پشتیبانی از زبان های متعدد.
شرایط سفارشی Vocabulary و Domain Condition
بهبود دقت در زمینه های خاص صنعت با استفاده از اموال در [FLT 22]
request.contextualStrings = ["Directus", "CMS", "headless", "REST API"]
این به تشخیص دهنده این است که به این عبارات احترام بگذارد، و تشخیص نادرست از شرایط غیر معمول را کاهش دهد.
مدیریت خطا و استراتژی های شکست
تشخیص صدا می تواند به دلایل زیادی شکست بخورد: مسائل شبکه (در صورت استفاده از سرور)، وقفه های صوتی، غیرفعال کننده میکروفون یا فشار حافظه قوی را پیاده سازی می کنند:
enum RecognitionError: LocalizedError {
case noPermission
case unavailable
case audioSessionFailure
case internalError(Error)
var errorDescription: String? {
switch self {
case .noPermission:
return "Speech recognition permission denied"
case .unavailable:
return "Recognizer is busy or not available"
case .audioSessionFailure:
return "Could not start audio capture"
case .internalError(let error):
return error.localizedDescription
}
}
}
func handleError(_ message: String) {
// Show alert, retry button, or fallback to text input
DispatchQueue.main.async {
// Show toast or log
}
}
تغییرات وضعیت شناسایی مانیتور از طریق [FLT 25] اموال [FLT 26] برای تشخیص لغو و یا زمان.
بهینه سازی عملکرد و بهترین روش ها
- پیش فرض بر شناخت دستگاه - از زمان iOS 15، تشخیص دستگاه پیش فرض است و تأخیر کمتری را ارائه می دهد.
- نتایج جزئی را محدود می کند، و تنظیم اگر شما فقط به رونویسی نهایی نیاز دارید، هزینه های اضافی را کاهش می دهد.
- طول عمر شناخت انسان (FLT:1) - وظایف طولانی مدت را لغو کنید زمانی که کاربر متوقف می شود صحبت کردن (به عنوان مثال، 2 ثانیه سکوت) برای پایان دادن به طور خودکار جلسه.
- [FLT 1] و حافظه [FLT 1] - موتور صوتی و وظایف تشخیص منابع قابل توجهی مصرف می کنند. Pause یا متوقف کردن تشخیص زمانی که برنامه به پس زمینه می رود.
- تست با داده های مسخره - استفاده از فایل های صوتی پیش ضبط شده ( [FLT 29] در طول توسعه برای جلوگیری از وابستگی های میکروفون.
مدیریت Interruptions
تماس های تلفنی، زنگ هشدارها یا سیری می توانند یک جلسه تشخیص فعال را به قطع و از سرگیری با شکوه قطع کنند:
NotificationCenter.default.addObserver(
self,
selector: #selector(handleInterruption),
name: AVAudioSession.interruptionNotification,
object: nil
)
@objc func handleInterruption(_ notification: Notification) {
guard let userInfo = notification.userInfo,
let type = userInfo[AVAudioSessionInterruptionTypeKey] as? UInt else { return }
if type == AVAudioSession.InterruptionType.began.rawValue {
stopRecognition()
} else if type == AVAudioSession.InterruptionType.ended.rawValue {
// Optionally restart recognition
}
}
نظرات دسترسی
تشخیص صدا دسترسی کاربران را با اختلال حرکتی یا بصری افزایش می دهد.
- ارائه بازخورد صوتی روشن در هنگام گوش دادن شروع / توقف.
- پشتیبانی از VoiceOver با استفاده از برچسب های دسترسی در دکمه های تشخیص.
- ارائه یک روش ورودی متن جایگزین در تشخیص پرونده شکست می خورد.
- به حریم خصوصی کاربر احترام می گذارد، نه ذخیره اطلاعات صوتی بدون رضایت صریح.
تست و دبوش
این مدل ها شامل یک میکروفون نیستند؛ تست روی دستگاه های فیزیکی (FLT:0) برای تشخیص تشخیص گفتار کد تحت و اضافه کردن با ارزش برای فعال کردن ورود به سیستم.
استفاده از پرونده های واقعی
- دستورات در یک برنامه CMS - اجازه می دهد ویراستاران به دیکته محتوا یا حرکت منو بدون دست، به عنوان مثال، "ایجاد یک مقاله جدید" باعث جریان کار خاص.
- برای برنامه های یادداشت برداری [FLT 1] - متن زمان واقعی با تشخیص نقطه عطف.
- [FLT 1] ناوبری متمرکز بر دسترسی [FLT 1] - کاربران می توانند بدون لمس صفحه نمایش "برو" یا "باز کردن تنظیمات" بگویند.
- ] پزشکی یا رونویسی قانونی - از رشته های متنی برای اصطلاحات خاص دامنه استفاده کنید و با شناخت دستگاه برای حریم خصوصی ترکیب کنید.
نتیجه گیری
چارچوب سخنرانی اپل یک پایه محکم برای اضافه کردن شناخت صدا به برنامه های iOS فراهم می کند.با درک معماری، مدیریت مجوز ها به درستی، مدیریت جلسات صوتی و بهینه سازی برای عملکرد، شما می توانید یک تجربه کنترل صدا یکپارچه ایجاد کنید که به حریم خصوصی کاربر احترام می گذارد، همیشه در دستگاه های واقعی آزمایش کنید، مکانیسم های شکست را در نظر بگیرید و زمینه کاربر را در ذهن نگه دارید تا ویژگی ای را ارائه دهید که واقعا قابلیت استفاده را افزایش می دهد.
برای خواندن بیشتر، به راهنمای اپل (FLT:0) و مستندات چارچوب رجوع کنید، راهنمای و SFSpeRecogncognizer کلاس مرجع بهترین شیوه های اضافی برای دسترسی به وب سایت [F6]