Робототехніка та інтелектуальні системи
Реалізація функцій розпізнавання голосу в Ios з рамковою мовою
Table of Contents
Інтеграція голосового розпізнавання в додатки iOS трансформує як користувачі взаємодіють, пропонуючи без руки контроль, швидкий запис даних та покращену доступність. Основа Apple забезпечує надійні, на основі мовної функції, які поважають конфіденційність користувачів та забезпечують надійний транскрипція реального часу. Ця стаття охоплює все від базової настройки для розширених моделей реалізації, включаючи оптимізації продуктивності, багатомовну підтримку та обробку помилок.
Розуміння архітектури в рамках виступу
В рамках виступу (збільшений в iOS 10) діє три основні компоненти:
- SFSpeechRecognizer – Початковий інтерфейс, який координує розпізнавання для конкретної мови та локалізації. Він може бути налаштований для використання на пристрої або розпізнавання сервера.
- SFSpeechRecognitionRequest – Представлений аудіовхід. Два основних підкласів: для зашифрованих аудіо файлів і ] для живих аудіо потоків.
- SFSpeechRecognitionTask – Управління процесом розпізнавання, забезпечення оновлення та кінцевих результатів. Він підтримує скасування та паускування.
В рамках обробляє аудіо через автоматичний визначальник (ASR) двигуна. За замовчуванням, iOS 15+ використовує розпізнавання на основі розроблених для всіх підтримуваних мов, що знижує затримки і забезпечує дані, ніколи не залишає пристрою. Серверне розпізнавання все ще доступний для старих пристроїв або конкретних мов, але вимагає активного підключення до Інтернету і згоди користувача.
Особливості та можливості
- Real-time потокове – Голос переводиться як користувач говорить, з періодичними частковими частковими результатами.
- Alternate transcriptions – Кожен результат включає в себе декілька інтерпретацій з впевненістю, що забиваються через і .
- Contextual фраз – Розробники можуть надати спеціальні фрази через для поліпшення точності для умов використання доменів.
- Підтримувані мови – Над 60 мов та регіональних акцентів. Використовуйте для отримання поточного списку.
Налаштування протоколів та конфігурації проекту
Заява про те, що авторизація запитів на клацання прямо Без належних дозволів система відхиляє запити про визнання. Виконайте такі дії:
Вимоги до специфікації
Додати ключ (Приватизація – Опис використання мови) з чітким, зрозумілим поясненням користувача. Приклад:
<key>NSSpeechRecognitionUsageDescription</key>
<string>This app uses speech recognition to transcribe your voice commands for hands-free navigation.</string>
Якщо ваш додаток також записує аудіо (компонент для розпізнавання в прямому ефірі), додайте і.
Заява на авторизації
рано в життєвому циклі програми, як правило, на перегляді контролера . Зворотній дзвінок повертає один з чотирьох статусів:
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
}
}
}
Примітка: В рамках може повернутися , якщо пристрій керується профілю батьківського контролю або якщо визнання мови вимкнено через екран.
Реалізація розпізнавання мови
Для реального часу голосового захоплення вам потрібно для потокового аудіо-бросівки в запит про визнання. Наступним кодом демонструє виконання виробництва з належним очищенням.
Крок 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)")
}
}
опція знижує фоновий музичний об'єм, який покращує точність транскрипту в нозі середовищах. Для голосових додатків розглянемо для маршруту аудіо через пристрій динамік замість вушної частини.
Крок 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)
}
Завжди скасуйте завдання розпізнавання перед зупинкою аудіодвигуна. Забудьте, щоб видалити кран на вході вузол може викликати цикли збереження і запобігти мікрофону, що вивільняється.
Обробка багатомовних і нестандартних місць
Програма «Дієздатне визначення локальних мов» дозволяє користувачам переключати мови або навіть розпізнати декілька мов на одному сеансі, створюючи окремі екземпляри.
let locales = ["en-US", "fr-FR", "zh-CN"]
let recognizers = locales.compactMap { SFSpeechRecognizer(locale: Locale(identifier: $0)) }
// Use recognizers[0] for English, etc.
Для розпізнавання ‐device кожен розпізнавач споживає пропорційну пам'яті до її мовної моделі. Тестування продуктивності на старих пристроях при підтримці декількох мов.
Умови використання в Vocabulary
Покращити точність для галузевих специфікацій за допомогою :
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
}
}
Контроль за визначенням стану завдань через власність для виявлення скасування або часу.
Оптимізація продуктивності та кращі практики
- Prefer on‐device розпізнавання – З iOS 15, розпізнавання на ‐device є типовим і пропонує меншу затримку. Уникайте закріплення сервера, якщо вам потрібна мова ще не підтримується в автономному режимі. Перевірте для перевірки наявності.
- => – Налаштування зменшує наклад, якщо вам потрібно тільки кінцевий транскрипція.
- Управління термінами визнання – Скасувати довгострокові завдання, коли користувач перестає говорити. Використовуйте час (наприклад, 2 секунд тиші) для автоматичного завершення сеансу.
- Баттері та пам'яті – Аудіорежис та завдання розпізнавання споживають значні ресурси. Пауза або припинення розпізнавання, коли додаток йде на фон.
- Testing with mock data – Використовуйте попередньо записані аудіо файли (]) під час розробки, щоб уникнути залежності мікрофона.
ручні перерізи
Телефонні дзвінки, сигналізації або Сірі можуть перерву на сеанс активного розпізнавання. Підписатись на для паузи та резюме витончено:
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
}
}
Розгляд доступності
Голосове визнання посилює доступність для користувачів з моторами або порушеннями зору. Забезпечити вашу реалізацію:
- Забезпечує чіткий аудіо зворотний зв'язок при слуханні стартів/стопок.
- Підтримує голосові роботи за допомогою етикеток доступності на кнопках розпізнавання.
- Пропонує альтернативний метод введення тексту в разі невиконання.
- Відповідає конфіденційність користувачів, не зберігаючи аудіо дані без явної згоди.
Тестування та дебулінг
Симулятори не включають мікрофон; тест на фізичні пристрої. Використовуйте , щоб визначити діагностичний журнал Xcode і додати з значенням для включення журнальної залоги. Симулятори різних шумових середовищ і акцентів під час QA.
Реальні кейси використання світу
- Войце команди в додатку CMS – Дозволити редактори диктувати контент або навігувати меню рукоят. Наприклад, «Створити нову статтю» викликає специфічний робочий процес.
- Dictation для замітки-концепцій – Режим реального часу з розпізнаванням пунктуацій.
- Accessibility-focused навігація – Користувачі можуть сказати “Повернути назад” або “Відкрити налаштування” без сенсорного екрана.
- Медична або правова транскрипція] – Використовуйте контекстні рядки для термінології доменного ‐специфічного та об’єднання з розпізнаванням на рівні конфіденційності.
Висновок
Яблуневий навчальний модуль забезпечує надійний фундамент для додавання розпізнавання голосу на додатки iOS. Розуміючи архітектуру, керування дозволами на аудіо сеанси та оптимізації продуктивності, ви можете створити безшовний досвід голосового керування, який поважає конфіденційність користувачів. Завжди перевірте на реальних пристроях, розгляньте механізми повернення коштів та зберігайте контекст користувача, щоб забезпечити функцію, яка дійсно підвищує зручність у використанні.
Для подальшого читання див. у розділі «ФЛТ:3» , AVAudioSession Manual, а SFSpeechRecognizer class link]. Додаткові практики доступності можна знайти в Apple Accessibility website.