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.