Robotica en intelligente systemen
Het implementeren van spraakherkenning functies in Ios met spraakkader
Table of Contents
Het integreren van spraakherkenning in iOS-apps transformeert hoe gebruikers communiceren, hands-free controle, snellere data-invoer en verbeterde toegankelijkheid. Apple's Speech framework levert robuuste, on-device spraak-tekst mogelijkheden die de privacy van de gebruiker respecteren en betrouwbare realtime transcriptie bieden. Dit artikel behandelt alles van basisopstelling tot geavanceerde implementatiepatronen, waaronder prestatieoptimalisatie, meertalige ondersteuning en foutverwerking van beste praktijken.
Begrijpen van het speechkader architectuur
Het Speech-kader (ingevoerd in iOS 10) werkt via drie kerncomponenten:
- SFSpeechRecognizer . . De primaire interface die de herkenning voor een specifieke taal en taalgebied coördineert. Het kan worden geconfigureerd om gebruik te maken van on-device of server-gebaseerde herkenning.
- SFSpeechRecongnitionRequest . . . De audio-invoer vertegenwoordigt twee hoofdsubklassen: voor vooraf opgenomen audiobestanden en voor live audiostreams.
- SFSpeechRecongnitionTask .Heeft het erkenningsproces, het verstrekken van vooruitgang updates en eindresultaten. Het ondersteunt annulering en pauzeren.
Het kader verwerkt audio via een automatische spraakherkenner (ASR) engine. Standaard gebruikt iOS 15+ on-device herkenning voor alle ondersteunde talen, wat de latency vermindert en ervoor zorgt dat gegevens nooit het apparaat verlaten. Server-gebaseerde herkenning is nog steeds beschikbaar voor oudere apparaten of specifieke talen, maar vereist een actieve internetverbinding en toestemming van de gebruiker.
Belangrijkste kenmerken en mogelijkheden
- Real-time streaming . . . De stem wordt getranscribeerd zoals de gebruiker spreekt, met periodieke gedeeltelijke resultaten.
- Alternate transcripties Elk resultaat omvat meerdere interpretaties met vertrouwensscores via en .
- Contextuele zinnen . . Ontwikkelaars kunnen aangepaste zinnen via bieden om de nauwkeurigheid van domeinspecifieke termen te verbeteren.
- Ondersteunde talen . . Meer dan 60 talen en regionale accenten. Gebruik om de huidige lijst op te halen.
Permissies en projectconfiguratie instellen
Altijd uitdrukkelijk toestemming vragen. Zonder de juiste toestemmingen zal het systeem erkenningsverzoeken weigeren. Volg deze stappen:
Info.plistvereisten
Voeg de sleutel (Privacy ..Preech Recognition Usage Description) toe met een duidelijke, gebruikersgerichte uitleg. Voorbeeld:
<key>NSSpeechRecognitionUsageDescription</key>
<string>This app uses speech recognition to transcribe your voice commands for hands-free navigation.</string>
Als uw app ook audio opneemt (gewoonlijk voor live herkenning), voeg dan toe.
Verzoek om een vergunning
Bel vroeg in de levenscyclus van de app, meestal op een weergave controller . . De terugroep geeft een van de vier statussen:
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
}
}
}
Opmerking: Het kader kan terugkeren als het apparaat wordt beheerd door een ouderlijk controleprofiel of als spraakherkenning via schermtijd wordt uitgeschakeld.
Uitvoering van de erkenning van levende spraak
Voor real-time voice capture heb je een nodig om audiobuffers in het herkenningsverzoek te streamen. De volgende code toont een productie-ready implementatie met een juiste opruiming.
Stap 1: Audiosessie instellen
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)")
}
}
De optie verlaagt het volume van de achtergrondmuziek, wat de transcriptienauwkeurigheid verbetert in lawaaierige omgevingen. Voor alleen-stemapps, overwegen om audio door de apparaatspreker te leiden in plaats van het oorstuk.
Stap 2: Maak de Herkenner en verzoek
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)")
}
}
Stap 3: Opruimen met plezier
func stopRecognition() {
recognitionTask?.cancel()
audioEngine.stop()
audioEngine.inputNode.removeTap(onBus: 0)
request.endAudio()
// Optionally deactivate audio session
try? AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
}
Annuleer altijd de herkenningstaak voordat u de audio-engine stopt. Vergeet de tik op de invoerknoop te verwijderen kan leiden tot het behouden van cycli en voorkomen dat de microfoon wordt vrijgegeven.
Meertalige en aangepaste lokalen
Het Speech-frame ondersteunt dynamische locale detectie. U kunt gebruikers toestaan om van taal te wisselen of zelfs meerdere talen te herkennen in één sessie door afzonderlijke -instances aan te maken.
let locales = ["en-US", "fr-FR", "zh-CN"]
let recognizers = locales.compactMap { SFSpeechRecognizer(locale: Locale(identifier: $0)) }
// Use recognizers[0] for English, etc.
Voor herkenning op het apparaat verbruikt elke herkenner geheugen evenredig met zijn taalmodel. Test prestaties op oudere apparaten bij het ondersteunen van meerdere talen.
Aangepaste woordenschat en domeinvoorwaarden
Verbeter de nauwkeurigheid van de bedrijfsspecifieke termen door gebruik te maken van de -eigendom op :
request.contextualStrings = ["Directus", "CMS", "headless", "REST API"]
Dit wijst de herkenner om deze zinnen te bevoordelen, waardoor verkeerde herkenning van ongewone termen wordt verminderd.
Fout bij het hanteren en terugvallen van strategieën
Spraakherkenning kan om vele redenen mislukken: netwerkproblemen (als gebruik wordt gemaakt van server-gebaseerde), audio-onderbrekingen, microfoon uitgeschakeld, of geheugendruk. Implementeer een robuuste handler:
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
}
}
De takenstatus van de monitor wordt gewijzigd via eigendom van om annuleringen of time-outs te detecteren.
Prestatieoptimalisatie en beste praktijken
- Prefrequent on-device recognition
- Verminderen van gedeeltelijke resultaten
- Beheren van de levensduur van de herkenning . . Annuleer lang lopende taken wanneer de gebruiker stopt met praten. Gebruik een timeout (bijv. 2 seconden stilte) om automatisch de sessie te beëindigen.
- Batterij en geheugen . .Audiomotor en herkenning taken verbruiken aanzienlijke middelen. Pauzeer of stop herkenning wanneer de app gaat naar de achtergrond.
- Testing met spotgegevens
Behandeling van onderbrekingen
Telefoongesprekken, alarmen of Siri kunnen een actieve herkenningssessie onderbreken. Schrijf je in op om te pauzeren en met eervollelijkheid te hervatten:
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
}
}
Toegankelijkheidsoverwegingen
Spraakherkenning verbetert de toegankelijkheid voor gebruikers met motorische of visuele stoornissen.
- Biedt duidelijke audio feedback bij het starten/stoppen van het luisteren.
- Ondersteunt VoiceOver door gebruik te maken van toegankelijkheidslabels op herkenningsknoppen.
- Biedt een alternatieve tekstgebaseerde inputmethode voor gevallen van een storing in de erkenning.
- Respecteert de privacy van de gebruiker door geen audiogegevens op te slaan zonder uitdrukkelijke toestemming.
Testen en debuggen
Simulatoren bevatten geen microfoon; test op fysieke apparaten. Gebruik Xcode.Tekstherkenning kenmerkend log[] onder en voeg toe met de waarde ] om het loggen van werkwoorden mogelijk te maken. Simuleer verschillende geluidsomgevingen en accenten tijdens QA.
Gebruiks cases voor de reële wereld
- Voice commando's in een CMS-app .Vertaald door: Tools en downloaden van de editors. Zo activeert een nieuw artikel een specifieke workflow.
- Afbeelding voor het maken van apps .Afbeelding in real time met interpunctieherkenning.
- Toegankelijkheid-gerichte navigatie . . Gebruikers kunnen zeggen . .Ga terug of . .Open instellingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- Medische of juridische transcriptie .Business strings gebruiken voor domeinspecifieke terminologie en combineren met on-device erkenning voor privacy.
Conclusie
Apple . Speech framework biedt een solide basis voor het toevoegen van spraakherkenning aan iOS-apps. Door het begrijpen van de architectuur, het correct hanteren van machtigingen, het beheren van audiosessies en het optimaliseren van prestaties, kunt u een naadloze spraakgestuurde ervaring creëren die de privacy van de gebruiker respecteert. Test altijd op echte apparaten, overwegen terugvalmechanismen, en houd de context van de gebruiker in gedachten om een functie te leveren die echt verbetert usability.
Voor nadere lezing, zie Apple