iOS uygulamaları ile ilgili ses tanıma, kullanıcıların nasıl etkileşime girdiğini, el serbest kontrol, daha hızlı veri girişi sunup erişilebilirliği artırdığını dönüştürür. Apple'ın Konuşma çerçevesi, kullanıcı gizliliğine saygı duyan sağlam, on-device konuşma-to-text yetenekleri sunar ve güvenilir gerçek zamanlı transkriptiyon sağlar. Bu makale, performans optimizasyonu, dilsel destek dahil olmak üzere her şeyi temelsel kurulumdan ileri uygulama kalıplarına kapsar.

Konuşma Çerçeve Mimarisini Anlamak

Konuşma çerçevesi ( iOS 10'da tanıtıldı) üç temel bileşenle çalışır:

  • [FONT:0]SFSpeechRecognizer[Dönetici: 1) Belirli bir dil ve yerel için tanımayı sağlayan birincil arayüz.In-device veya sunucu bazlı tanımayı kullanmak için yapılandırılabilir.
  • [FONT:0]SFSpeechRecognitionRequest[Dönetici:0)[[FONT:0))) - Proformasyon (Dönetici) - İki ana alt sınıf: 03:0) önceden belirlenmiş ses dosyaları ve [[Dönlendirilmiş ses akışları için.
  • [FONT:0]SFSpeechRecognitionTask[DÜT:1) – Kabul sürecini yönetin, ilerleme güncellemelerini ve son sonuçları sağlar.

Sistem, otomatik bir konuşma tanıma (ASR) motoru aracılığıyla ses işleme süreçleri. varsayılan olarak, iOS 15+ tüm desteklenen diller için kabul edilebilirliği azaltır ve verileri asla cihazı terk etmez. Server tabanlı tanıma hala aktif bir internet bağlantısı ve kullanıcı onayı gerektirir.

Anahtar Özellikler ve Yetenekler

  • [FONT:0]Real-time streaming[[Dönemli: 1) – Ses, kullanıcı olarak konuştuğu gibi, periyodik kısmi sonuçlarla yazılır.
  • [FONT:0)Alternate transkriptleri[[Dönemli 1) - Her sonuç, [[Döneticileri ile güvenilir puanlamalarla çok sayıda yorum içerir:2). ve [[Döneticileri]].
  • [[Dönemli ifadeler[[[Dönemli:0)[[[Dönemli ifadeler[[Dönemli ifadeler[[Dönemli ifadeler) - Geliştiriciler, alan özel terimler için doğruluk geliştirmek için özel ifadeler sağlayabilir.
  • [FONT:0)Depresilen diller[[Dönemli diller[Dönemli 1) - 60 dil ve bölgesel aksanlar.Mevcut listeyi almak için [[GÖRT:5] kullanın.

Up Permissions and Project Construct

[FONT:0)Always, doğru izinler olmadan, sistem bu adımları takip edecek:

Info.plist Gereksinimler

Anahtarı ekleyin (Privacy – Konuşma Tanımlama Açıklama) açık, kullanıcı odaklı bir açıklama ile. Örnek:

<key>NSSpeechRecognitionUsageDescription</key>
<string>This app uses speech recognition to transcribe your voice commands for hands-free navigation.</string>

Uygulamanız ayrıca ses kayıtlarını kaydeder ( canlı tanıma için komon), aynı zamanda [[DeltD|3| eklemek.

Yazarlaşma

CallFLT:9 Uygulama hayatta erkenden, genellikle bir görüntü kontrolörünün [[Döneticileri:)) .

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
 }
 }
}

Not: Çerçeve geri dönebilir (gösterme) Cihazın bir ebeveyn kontrol profili tarafından yönetiliyorsa veya konuşma tanıması Ekran Zamanı ile devre dışı bırakılırsa.

Canlı Konuşma Tanımlama

Gerçek zamanlı ses yakalama için, algılama isteğine ses tamponları göndermek için bir [[Dönderlik yakalamanız gerekir. Aşağıdaki kod uygun temizlik ile bir üretim hazırlığını gösterir.

Adım 1: Configure Audio Session

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)")
 }
}

[FONTD: 15) seçeneği, gürültülü ortamlarda transkript doğruluğunu artıran arka plan müziği hacmini azaltır. For voice-only apps, considerETHFLT:16), kulak parçası yerine cihaz konuşmacısı aracılığıyla seslendirmeyi düşünün.

2. Adım: Tanık ve İstek Oluşturun

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)")
 }
}

Adım 3: Temiz Büyülü

func stopRecognition() {
 recognitionTask?.cancel()
 audioEngine.stop()
 audioEngine.inputNode.removeTap(onBus: 0)
 request.endAudio()
 // Optionally deactivate audio session
 try? AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
}

Her zaman ses motoru durdurmaktan önce tanıma görevini iptal edin. Giriş node'deki dokunuşu kaldırmak için unutmak döngüleri korumak ve mikrofonun serbest bırakılmasını engelleyebilir.

İşyerleri ve Özel Yerelleri

Konuşma çerçevesi dinamik yerel algılamayı destekler. Kullanıcıların dilleri değiştirmesine veya hatta ayrı bir seansta birden çok dili ayrı olarak tanımasına izin verebilirsiniz.

let locales = ["en-US", "fr-FR", "zh-CN"]
let recognizers = locales.compactMap { SFSpeechRecognizer(locale: Locale(identifier: $0)) }

// Use recognizers[0] for English, etc.

For ondevice tanıması için, her bir tanıma dili modeline göre hafıza oranını orantılı olarak kullanır. Birden fazla dili destekleyen eski cihazlarda test performansı.

Özel Vocabulary ve Domain Şartları

Endüstriye özgü şartların doğruluğunu, [[Dönetici: ► Emlak: [[GÖRÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜK:

request.contextualStrings = ["Directus", "CMS", "headless", "REST API"]

Bu, bu cümleleri lehine kabul etmek, nadir terimlerin yanlışlığını azaltmak için ipuçları verir.

Hata işleme ve Fallback Strategies

Ses tanıma birçok nedenden dolayı başarısız olabilir: ağ sorunları ( sunucu tabanlı olarak), ses kesintileri, mikrofonu devre dışı bırakabilir veya hafıza basıncı. Sağlam bir eller uygulama:

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
 }
}

Kayıt durumunu belirlemek, iptalleri veya zamanlarını tespit etmek için [[Üye Tarihi Değiştirir.

Performans Optimizasyonu ve En İyi Uygulamaları

  • [FONT=0)Sunum on-device tanıma[[Dönetici:0)[[Dönetici:0))Sunum, iOS 15'ten bu yana, en düşük gecikmeli olan varsayılandır.Henüz bir dil desteklenmezken sunucu tabanlı olmayandan kaçının. CheckurFLT:27) kullanılabilirliği doğrulamak için.
  • [FONT=0)Limit kısmi sonuçları [Dönemli: 1) SeturFLT:28), sadece son transkript ihtiyacınız varsa, yüksek çözünürlükte bir miktar azaltılır.
  • [FONT:0]Manage tanıma süresi[Dönetici:0)[Dönetici:0)[Döneticileri) otomatik olarak oturum bitirmek için bir süre boyunca (örneğin, 2 saniye) kullanın.
  • [FONT:0]Battery ve hafıza[[Dönetici: 1) - Ses motoru ve tanıma görevleri önemli kaynaklar tüketmektedir. Pause veya uygulama arka plana gittiğinde tanımayı bırakın.
  • [FONT:0) Taklit verileri ile test etmek[[[Dönetici: 1 ) – Önceden kaydedilmiş ses dosyaları kullanın ([DÜŞÜNÜDÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜDÜŞÜN) mikrofon bağımlılıklarından kaçınmak için gelişim sırasında.

İtlalı

Telefon aramaları, alarmlar veya Siri aktif bir tanıma seansını kesebilir. duraklama ve meditasyon yapmak için abone olun:

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
 }
}

Accessability considerations

Ses tanıma, kullanıcıların motor veya görsel bozukluklarla erişilebilirliğini artırır. Uygulamanızı sağlayın:

  • Din başladığında / duraklamalar başladığında açık ses geri bildirimlerini sağlayın.
  • Anahtarları tanıma düğmeleri üzerinde erişilebilir etiketler kullanarak sesinizi destekler.
  • Vaka tanımasında alternatif bir metin tabanlı giriş yöntemi sunar.
  • Açık onay olmadan ses verilerini depolamak için kullanıcı gizliliğine saygı gösterin.

Test ve Debugging

Simülatörler bir mikrofonu içermiyor; fiziksel cihazlar üzerinde test edin.UseETHFLT:0)Xcode'un Konuşma tanı log[DÜT:1) altFLT:32 ve [[DÜcretsiz: 0:34|3|bent|siyonel geçişler için test edin.QA sırasında farklı gürültü ortamları ve aksanlar.

Gerçek Dünya Vakaları Kullanıyor

  • [FONT:0]Bir CMS uygulamasındaki komutlar[Döneticiler içerik dikme veya menüler eller ücretsiz olarak yönlendirmelerine izin verir. Örneğin, “Yeni bir makale oluşturun” belirli bir iş akışı tetikler.
  • [FONT:0) Not alma uygulamaları için bir aradaki fark[Dönlendirmeler:0)[Dönlendirme uygulamaları için bir anlam ifade eder.
  • [[Kategori- odaklı navigasyon[[[Dönetici:0)[[Döneticiler:<<<<<>>>)
  • [FONT=0]Medical veya yasal transkript[[Dönemli)[[Dönemli)[[Dönemli))[[[[Dönemli terminoloji için bağlamsal dizeler kullanın ve mahremiyet için on-device tanıma ile bir araya getirin.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Apple'ın Konuşma çerçevesi, iOS uygulamaları için ses tanımayı sağlam bir temel sağlar. Mimarlık anlayışıyla, izinleri doğru bir şekilde yöneterek ses seanslarını yönetin ve performans için optimize edin, kullanıcı gizliliğine saygı duyan kesintisiz bir ses kontrollü bir deneyim oluşturabilirsiniz.Her zaman gerçek cihazlarda test edin, geri dönüşüm mekanizmaları göz önünde bulundurun ve kullanıcının bağlamını gerçekten kullanılabilirliğimizi artıran bir özellik sunmak için aklınızda bulundurun.

Daha fazla okuma için Apple'ın [[0)Speech framework Belgeleri[Dönetici:0)[Dönetici:2)AVSession rehberi). ve [[Dördüncü sınıf referansı[Dönetici:0)[Dönetici:0))[Döneticileri için ek olarak erişilebilirlik web sitesi).