מערכות רובוטיות וחכם
יישום תכונות זיהוי קולי ב Ios עם מסגרת דיבור
Table of Contents
הכרה קולית באפליקציות iOS הופכת את האופן שבו משתמשים מתקשרים, מציעים שליטה ללא ידיים, כניסה מהירה יותר של נתונים, ושיפור נגישות.מסגרת הדיבור של אפל מספקת יכולות דיבור חזקות, על-ידי קידוד דיבור המכבדות את פרטיות המשתמשים ולספק תזמון בזמן אמת אמין. מאמר זה מכסה הכל מהגדרה בסיסית ועד לתבניות יישום מתקדמות, כולל ביצועים, תמיכה רב-לשונית, וטיפול בשיטות הטובות ביותר.
הבנת ארכיטקטורת המסגרת
מסגרת הדיבור (התקבלה ב-iOS 10) פועלת באמצעות שלושה מרכיבים עיקריים:
- (FLT:0)SFSpeechRecognizerFreaLT:1) - הממשק העיקרי שמאמת את ההכרה בשפה מסוימת ובמקומית. ניתן להגדיר אותו לשימוש ב-device או בזיהוי מבוסס השרת.
- (ב) [17] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (FLT:0)SFSpeechRecognitionTaskveofLT:1) - מנהל את תהליך ההכרה, מתן עדכונים מתקדמים ותוצאות סופיות.
תהליכי המסגרת אודיו באמצעות מנוע זיהוי דיבור אוטומטי (ASR) כברירת מחדל, iOS 15+ משתמש בזיהוי על הניתוק עבור כל השפות הנתמכות, אשר מפחיתה את הגמישות ומבטיחה שהנתונים לעולם לא יעזבו את המכשיר.
תכונות מפתח ו Capabilities
- (ב) ,0) סטרימינג בזמן אמת (Real-TimeסטרימינגFLT:1) - קול מתואר כמשתמש מדבר, עם תוצאות חלקית תקופתיות.
- (ב) כל תוצאה כוללת מספר פרשות עם נבואות של כפל (ב"ב) ו[[1924]]
- (ב) ,0) ביטויים קונטקסטואליים (FLT:1) - מפתחים יכולים לספק ביטויים מותאמים אישית באמצעות ההרחבה (FLT:4) לשיפור הדיוק של תנאים ספציפיים לתחום.
- (ב) ,0) שפות מפורטות (ב) 1 - מעל 60 שפות ומדגישים אזוריים.
קביעת הרשאות ופרויקט Configuration
(ב) ,0) לבקש אישור מפורשות (ב) 1:1 ללא אישורים נאותים, המערכת תדחה בקשות הכרה.
דרישות מידע.plist
הוסף את המפתח (FLT:6) (פרטיות - דיבור הכרה תיאור גיל) עם הסבר ברור, הפונה למשתמש.
<key>NSSpeechRecognitionUsageDescription</key>
<string>This app uses speech recognition to transcribe your voice commands for hands-free navigation.</string>
אם האפליקציה שלך גם מתעדת את אודיו (הופנה מהדף הכרה חיה), הוסף גם את ה-FLT:8.
מבקש אישור
קרא ל-FLT:9 מוקדם במחזור חיי היישום, בדרך כלל על השקפה של בקר (FLT:10), ה-Callback מחזיר אחד מארבעת הסטטוסים:
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 אם המכשיר מנוהל על ידי פרופיל בקרת הורים או אם זיהוי דיבור הוא מוגבל באמצעות זמן מסך.
המונחים: Live Speech Recognition
עבור לכידת קול בזמן אמת, אתה צריך קונסולת: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)")
}
}
האפשרות של LT:15 מורידה נפח מוזיקת רקע, אשר משפר את דיוק הסקירת בסביבות רועשות. עבור יישומים קול בלבד, לשקול FLT:16 כדי לנתב אודיו באמצעות דובר המכשיר במקום האוזן.
שלב 2: יצירת המוכר ובקשה
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)
}
תמיד לבטל את משימת ההכרה לפני עצירת מנוע השמע.שכחה להסיר את הברז על צומת קלט יכול לגרום לשמור מחזורים ולמנוע את המיקרופון משוחרר.
יד ביד מול המקומיים וה Custom Locals
מסגרת הדיבור תומכת בזיהוי מקומי דינמי, באפשרותך לאפשר למשתמשים לעבור שפות או אפילו לזהות שפות מרובות בפגישה אחת על ידי יצירת דוגמאות נפרדות של 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.
עבור הכרה על-ידי ה-device, כל מזהה צורב את הזיכרון ביחס למודל השפה שלו.מבחן ביצועים על מכשירים ישנים יותר כאשר תומך במספר שפות.
תנאי VOCLL AND MOLM
שיפור הדיוק של התנאים הספציפיים לתעשייה באמצעות הנכס ב-FLT:21:
request.contextualStrings = ["Directus", "CMS", "headless", "REST API"]
זה מרמז על ההכרה לטובת ביטויים אלה, צמצום ההכרה הלא נכונה של מונחים נדירים.
טעויות אסטרטגיות ו Fallback
זיהוי קולי יכול להיכשל מסיבות רבות: בעיות ברשת (אם משתמשים מבוסס שרת), הפרעות אודיו, מיקרופון נכה או לחץ זיכרון.
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
}
}
שינוי במצב המשימה של קונסולת 25 (FLT:25) ברכישת נכסים של FLT:26 כדי לזהות ביטולים או זמנם.
אופטימיזציה ביצועים ופרקטיקה הטובה ביותר
- (הופנה מהדף deviceהכרה:0) , שכן iOS 15, על זיהוי הדלפק הוא ברירת המחדל ומציע שקיפות נמוכה יותר.הימנעות מלכפות על בסיס השרת, אלא אם כן אתה צריך שפה עדיין לא נתמך באופן לא מקוון.
- (ב) ,0) תוצאות חלקית של הוראת סעיף 1 (הדגשה על ידי הוראת סעיף 7) - הפחתה של ה-FLT:28 אם רק צריך את הסידור הסופי.
- (FLT:0) הכרה בחיים אורך החיים של LT:1 - ביטול משימות ארוכות טווח כאשר המשתמש מפסיק לדבר. השתמש בזמן (למשל, 2 שניות של שתיקה) כדי לסיים את הפגישה באופן אוטומטי.
- (ב) ,0)חומרי זיכרון וזיכרון (צילום: 1) - מנוע אודיו ומשימות הכרה צורכים משאבים משמעותיים.
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
המונחים:
שיחות טלפון, אזעקה או Siri יכולים להפריע לפגישת הכרה פעילה.
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 (הנאום של אקסקוד) קידוד זיהוי לוג'רטוט 1FLT:1 תחת FLT:32 ולהוסיף FLT:33 עם הערך (FLT 34) כדי לאפשר למילוי של סביבות רעש שונות ומבטאים במהלך QA.
מקרים אמיתיים לשימוש
- (FLT:0) פקודות באפליקציית CMSFLT:1 - מאפשרות לעורךים להכתיב תוכן או לנווט תפריטים ללא ידיים.
- (ב) ,0) ,הקדשה לאפליקציות של קידוד 1 (בתרגום חופשי: ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ).
- (FLT:0) ניווט ממוקד גישה (FLT): משתמשים יכולים לומר "לך אחורה" או "הגדרות פתוחות" מבלי לגעת במסך.
- (FLT:0Medical או משפטי תמליל 1FLT) - השתמש בחוזים קונטקסטואליים עבור המינוח הספציפי של התחום ומשלב עם הכרה על-ידי הפרט.
מסקנה
מסגרת הדיבור של אפל מספקת בסיס מוצק להוספת הכרה קולית לאפליקציות iOS.על ידי הבנת האדריכלות, ניהול הרשאות כראוי, ניהול הפעלות אודיו וקידוד לביצועים, אתה יכול ליצור חוויה מבוקרת קול חלקה המכבדת את הפרטיות של המשתמש תמיד במבחן על מכשירים אמיתיים, לשקול מנגנוני נפילה, ולשמור על ההקשר של המשתמש בראש כדי לספק תכונה שבאמת משפרת את יכולת השימוש.
(ב) ב[[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]