Table of Contents
IOS-sovelluksiin integroitu äänentunnistus muuttaa käyttäjien vuorovaikutusta, tarjoaa handsfree-ohjausta, nopeampaa tietojen syöttämistä ja parantaa saavutettavuutta. Applen puhekehys tarjoaa vankat, on-device-puhe-to-text-ominaisuudet, jotka kunnioittavat käyttäjän yksityisyyttä ja tarjoavat luotettavan reaaliaikaisen transkription. Tämä artikkeli kattaa kaiken perustuksesta edistyneisiin toteutusmalleihin, kuten suorituskyvyn optimointiin, monikieliseen tukeen ja virheiden käsittelyyn parhaita käytäntöjä.
Puhekehysarkkitehtuurin ymmärtäminen
Puhekehys (iOS 10) toimii kolmen keskeisen osan kautta:
- SFSpeechRecognizer[ . Primaari käyttöliittymä, joka koordinoi tietyn kielen ja paikan tunnistamista. Se voidaan määrittää käyttämään laitteen tai palvelimen tunnistusta.
- SFSpeechRecognitionRequest . ... ................................................................................................................................................................................................................................
- SFSpeechRecognitionTask ...Hallitsee tunnustamisprosessia, tarjoaa edistymisprosessipäivityksiä ja lopullisia tuloksia.
Kehys käsittelee äänen automaattisen puheentunnistinmoottorin (ASR) kautta. Oletuksena iOS 15+ käyttää laitteentunnistusjärjestelmää kaikilla tuetuilla kielillä, mikä vähentää latenssia ja varmistaa, että tiedot eivät koskaan poistu laitteesta. Palvelimen tunnistus on edelleen saatavilla vanhemmille laitteille tai tietyille kielille, mutta edellyttää aktiivista internet-yhteyttä ja käyttäjän suostumusta.
Tärkeimmät ominaisuudet ja valmiudet
- Reaaliaikainen streaming[ ... Äänen kirjoitetaan käyttäjän puhuessa, ajoittain osittain.
- Vaihtoehtoiset transkriptiot[] .
- Contextual fraces[ . Kehittäjät voivat tarjota mukautettuja lauseita , jotta voidaan parantaa tarkkuutta verkkotunnuskohtaisia termejä.
- Tuetut kielet[ . Yli 60 kieltä ja aluekorostus. Käytä nykyisen luettelon hakemiseen.
Käyttölupien ja projektin asetusten asetukset
Pyydä aina lupaa nimenomaisesti.[ Ilman asianmukaisia oikeuksia järjestelmä hylkää tunnistuspyynnöt.
Info.plist vaatimukset
Lisää avain (yksityisyys ... puhetunnistus Käyttökuvaus) selkeällä, käyttäjälähtöisellä selityksellä. Esimerkki:
<key>NSSpeechRecognitionUsageDescription</key>
<string>This app uses speech recognition to transcribe your voice commands for hands-free navigation.</string>
Jos sovelluksesi tallentaa myös ääniä (yleistä elävän tunnistuksen vuoksi), lisää myös .
Pyydän lupaa
Soita sovelluksen elinkaaren alussa, tyypillisesti näkymäohjaimella. . Puhelu palauttaa yhden neljästä tilasta:
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
}
}
}
Huomautus: Kehys voi palata , jos laitetta hallinnoi vanhempien valvontaprofiili tai jos puhetunnistus on pois käytöstä näytön ajan kautta.
Live-puheentunnistuksen toteuttaminen
Reaaliaikaista äänikaappausta varten tarvitset -laitteen, jotta äänipuskurit voidaan syöttää tunnistuspyyntöön. Seuraava koodi osoittaa, että tuotanto on valmis ja että se on asianmukaisesti puhdistettu.
Vaihe 1: Muokkaa äänisessiota
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)")
}
}
-vaihtoehto alentaa taustamusiikkia, mikä parantaa transkriptiotarkkuutta meluisissa ympäristöissä. Ääni-ainoa sovellus kannattaa ) ohjata äänen äänentoistolaitteen sijaan kuulokkeen kautta.
Vaihe 2: Luo tunnistin ja pyyntö
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)")
}
}
Vaihe 3: Siivoa armollisesti
func stopRecognition() {
recognitionTask?.cancel()
audioEngine.stop()
audioEngine.inputNode.removeTap(onBus: 0)
request.endAudio()
// Optionally deactivate audio session
try? AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
}
Peru aina tunnistustehtävä ennen kuin pysäytät äänimoottorin. Kun poistat syötesolmun napan, voit pitää syklit ja estää mikrofonin julkaisun.
Monikielisten ja mukautettujen paikallisten käsittely
Puhekehys tukee dynaamista paikallista havaitsemista. Voit antaa käyttäjien vaihtaa kieliä tai jopa tunnistaa useita kieliä yhdessä istunnossa luomalla erillisiä tapauksia.
let locales = ["en-US", "fr-FR", "zh-CN"]
let recognizers = locales.compactMap { SFSpeechRecognizer(locale: Locale(identifier: $0)) }
// Use recognizers[0] for English, etc.
On-laitteen tunnistamiseen kukin tunnistin kuluttaa muistia suhteessa kielimalliinsa. Kokeile vanhempien laitteiden suorituskykyä, kun tuet useita kieliä.
Omat sanasto ja verkkotunnukset
Paranna teollisuuskohtaisten termien tarkkuutta -ominaisuudella :
request.contextualStrings = ["Directus", "CMS", "headless", "REST API"]
Tämä vihjaa tunnistaja suosia näitä lauseita, vähentää väärintunnistusta epätavallisia termejä.
Virheen käsittely ja kaatumisstrategiat
Äänentunnistus voi epäonnistua monista syistä: verkko-ongelmat (jos käytetään palvelinpohjaista), audiokatkokset, mikrofoni pois päältä tai muistipaine.
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
}
}
Seurataan tunnistamisen tehtävän tilan muutoksia -ominaisuuden kautta peruutusten tai aikakatkaisujen havaitsemiseksi.
Suorituskyvyn optimointi ja parhaat käytännöt
- Prefer on-laitteentunnistus[ . Koska iOS 15, on-laitteen tunnistus on oletus ja tarjoaa vähemmän latenssi. Vältä pakottaa palvelimeen-pohjainen, ellei tarvitse kieltä, jota ei vielä tueta offline. Tarkista .
- Limit osittainen tulokset[ ... ......................................................................................................................................................................................................................................
- Hallituksen tunnistaminen käyttöikä[ . ... Peruuta pitkäaikaiset tehtävät, kun käyttäjä lopettaa puhumisen. Käytä aikakatkaisua (esim. 2 sekuntia hiljaisuutta) istunnon automaattiseen päättämiseen.
- Akku ja muisti[[ . Äänimoottori- ja tunnistustehtävät kuluttavat merkittäviä resursseja. Keskeytä tai pysäytä tunnistus, kun sovellus menee taustalle.
- Testaaminen matkitiedoilla[ . Käytä esiäänitiedostoja ([]) kehityksen aikana mikrofoniriippuvuuden välttämiseksi.
Käsittely Keskeytykset
Puhelut, hälytykset tai Siri voi keskeyttää aktiivisen tunnistuksen. Tilaa tauko ja jatka armollisesti:
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
}
}
Esteettömyysnäkökohdat
Äänitunnistus parantaa motorisia tai näköhäiriöitä omaavien käyttäjien saavutettavuutta.
- Tarjoaa selkeää äänipalautteen, kun kuuntelet aloitus-/pysäytysten.
- Tukee VoiceOveria käyttämällä esteettömyysetikettejä tunnistuspainikkeilla.
- Tarjoaa vaihtoehtoisen tekstin perusteella syötemenetelmän, jos tunnustaminen epäonnistuu.
- Kunnioittaa käyttäjän yksityisyyttä, koska ei tallenna äänitietoja ilman nimenomaista suostumusta.
Testaus ja vianetsintä
Simulaattoreissa ei ole mikrofonia; fyysisten laitteiden testi. Käytä Xcode.Speech Recognition Diagnostic log[] kohdassa ja lisää arvolla , jotta verboosin kirjautuminen on mahdollista.
Reaalikäyttöön liittyvät tapaukset
- Äänenkomento CMS-sovelluksessa . Salli editoijien sanella sisältöä tai navigoida valikot käsin. Esimerkiksi ... Luo uusi artikkeli.............................................................................................................................................................................................................
- Dictation for note-takeing apps ... Reaaliaikainen transkriptio välimerkkitunnistuksen avulla.
- Esteettömyys-keskittynyt navigointi[ . Käyttäjät voivat sanoa ...Mene takaisin tai avaa asetukset... koskematta ruutuun.
- Lääketieteellinen tai oikeudellinen transkriptio[ .
Päätelmä
Apple.Speech-kehys tarjoaa vankan perustan lisätä äänentunnistus iOS-sovelluksiin. Ymmärtämällä arkkitehtuurin, käsittelemällä käyttölupia asianmukaisesti, hallitaan ääniistuntoja ja optimoimalla suorituskykyä, voit luoda saumattoman ääniohjatun kokemuksen, joka kunnioittaa käyttäjien yksityisyyttä. Aina testata todellisia laitteita, harkita varamekanismeja, ja pitää käyttäjän kontekstin mielessä tarjota ominaisuus, joka todella parantaa käytettävyyttä.
Ks. Apple . .Puheenhallintajärjestelmän dokumentaatio, AVAudioSession guide, ja SFSpeechRecognizer luokkaviite[.Lisätietoja saavutettavuuden parhaista käytännöistä on Apple Accessibility website.