Table of Contents
Bộ nhận diện giọng nói tích hợp thành ứng dụng iOS biến đổi như thế nào, cung cấp khả năng tự động điều khiển, mục nhập dữ liệu nhanh hơn và cải thiện khả năng truy cập giọng nói của Apple cung cấp khả năng mạnh mẽ, có khả năng thay đổi ngữ cảnh để tôn trọng sự riêng tư của người dùng và cung cấp sự chuyển đổi thời gian thực. Bài này bao gồm mọi thứ từ thiết lập nền tảng để thực hiện các mẫu thực hiện tiên tiến, bao gồm tối ưu hóa hiệu suất, hỗ trợ đa ngôn ngữ, và xử lý các việc xử lý lỗi tốt nhất.
Hiểu kiến trúc về khung văn
Khung phát biểu (được giới thiệu trong IOS 10) hoạt động thông qua ba thành phần chính:
- Trình duyệt giọng nói [FLT: 1] – Giao diện chính mà nhận diện tọa độ cho ngôn ngữ và địa phương. Nó có thể được cấu hình để sử dụng trên- màn hình hoặc trên máy chủ.
- Cho tập tin âm thanh đã được ghi đè [FLT: 1] – Phục hồi thông tin âm thanh. Hai lớp phụ chính: [FLT: 0] cho tập tin âm thanh sẵn và cho luồng âm thanh sống.
- Trình nói tiếng Đức [FLT: 1] – quản lý tiến trình nhận dạng, cung cấp cập nhật tiến trình và kết quả cuối cùng. Nó hỗ trợ việc hủy bỏ và tạm dừng.
Khung lề xử lý âm thanh thông qua bộ nhận diện giọng nói tự động (ASAR) cơ chế. Mặc định là iOS 15+ sử dụng sự nhận diện trên các ngôn ngữ được hỗ trợ, mà giảm độ nhạy và đảm bảo dữ liệu không bao giờ rời khỏi thiết bị đó. Sự nhận diện dựa trên máy phục vụ vẫn còn sẵn sàng cho thiết bị cũ hoặc ngôn ngữ cụ thể, nhưng yêu cầu sự kết nối mạng và sự chấp thuận của người dùng.
Đặc điểm chính và khả năng
- Truyền ) – Giọng nói được sao chép khi người dùng nói, với kết quả tuần hoàn một phần.
- Các bản sao ) – mỗi kết quả bao gồm nhiều cách giải thích với sự tự tin ghi đè và .
- Các cụm từ ngữ ngữ ngữ phụ ) – Các nhà phát triển có thể cung cấp các cụm từ tuỳ chỉnh qua để cải thiện chính xác về các điều khoản miền cụ thể.
- Ngôn ngữ được cấp phép – Hơn 60 ngôn ngữ và giọng điệu vùng. Hãy dùng để lấy danh sách hiện thời.
Thiết lập quyền hạn và cấu hình dự án
Luôn luôn yêu cầu quyền xác nhận dứt khoát. ) Không có quyền thích hợp, hệ thống sẽ từ chối yêu cầu nhận diện. Hãy theo những bước sau:
Yêu cầu danh sách thông tin
Thêm chìa khóa [FLT: 6) (Privacy – procry pháp dụng giọng nói) với một lời giải thích rõ ràng, dễ hiểu của người dùng. Ví dụ:
<key>NSSpeechRecognitionUsageDescription</key>
<string>This app uses speech recognition to transcribe your voice commands for hands-free navigation.</string>
Nếu ứng dụng của bạn cũng ghi âm (máy tính để nhận diện trực tiếp), cũng thêm .
Yêu cầu quyền hạn
Gọi sớm hơn trong ứng dụng, thường trên một bộ điều khiển xem .
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
}
}
}
Ghi chú: khung có thể trở lại nếu thiết bị này được quản lý bởi hồ sơ kiểm soát của cha mẹ hoặc nếu khả năng nhận diện giọng nói bị tắt qua thời gian màn hình.
Nhận biết lời nói trực tiếp
Để thu giọng nói thời gian thực, bạn cần một để lưu các bộ đệm âm thanh vào yêu cầu nhận diện. Các mã sau cho thấy một việc thực hiện sẵn sàng với việc dọn dẹp thích hợp.
Bước 1: Cấu hình phiên chạy âm thanh
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)")
}
}
Tùy chọn hạ âm lượng âm thanh nền xuống, giúp cải thiện độ chính xác bản sao trong môi trường nhiễu. Để giọng nói chỉ có ứng dụng , hãy xem để chuyển âm thanh qua loa thay cho tai nghe.
Bước 2: Tạo người nhận diện và yêu cầu
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)")
}
}
Bước 3: Rửa sạch sẽ
func stopRecognition() {
recognitionTask?.cancel()
audioEngine.stop()
audioEngine.inputNode.removeTap(onBus: 0)
request.endAudio()
// Optionally deactivate audio session
try? AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
}
Luôn luôn hủy bỏ công việc nhận diện trước khi dừng động cơ âm thanh. Việc quên bỏ cách gõ vào nút đầu vào có thể gây ra vòng lặp ghi nhớ và ngăn cản micro được phát hành.
Dân địa phương đa ngôn ngữ và tập quán
Khung lề giọng nói hỗ trợ phát hiện động vùng. Bạn có thể cho phép người dùng chuyển đổi ngôn ngữ hoặc thậm chí nhận ra nhiều ngôn ngữ trong một phiên chạy bằng cách tạo ra những trường hợp riêng .
let locales = ["en-US", "fr-FR", "zh-CN"]
let recognizers = locales.compactMap { SFSpeechRecognizer(locale: Locale(identifier: $0)) }
// Use recognizers[0] for English, etc.
Về sự công nhận về ngôn ngữ, mỗi người nhận diện tiêu thụ trí nhớ tùy thuộc vào mô hình ngôn ngữ của mình.
Các thuật ngữ từ vựng và miền tự chọn
cải thiện độ chính xác cho các thuật ngữ đặc trưng của ngành công nghiệp bằng cách sử dụng
request.contextualStrings = ["Directus", "CMS", "headless", "REST API"]
Điều này gợi ý người nhận diện ưu tiên các cụm từ này, giảm sự nhận thức sai về các thuật ngữ hiếm.
Lỗi khi xử lý và giảm cân
Nhận diện giọng nói có thể thất bại vì nhiều lý do: vấn đề mạng (nếu dựa trên máy phục vụ « %s », sự ngắt quãng âm thanh, tắt micro, hoặc áp lực bộ nhớ. Nhấn mạnh một bộ quản lý mạnh:
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
}
}
Theo dõi tình trạng nhận diện nhiệm vụ thay đổi qua thuộc tính để phát hiện sự hủy bỏ hoặc thời hạn.
Cách làm báp têm và thực hành tốt nhất
- Hãy bật/ tắt sự nhận diện [FLDEvice [FLT: 1] – Vì việc nhận diện 15, trên iOS 15, trên tính chất ghi nhận là mặc định và cung cấp tính năng thấp hơn. Tránh dùng máy phục vụ khi chưa hỗ trợ khả năng truy cập. Hãy kiểm tra để kiểm tra khả năng xác thực.
- Kết quả một phần ) – Thiết lập giảm chi phí nếu bạn chỉ cần ghi lại cuối cùng.
- Người đàn ông nhận dạng tuổi thọ – Hủy bỏ tác vụ chạy dài khi người dùng ngừng nói. Hãy dùng thời hạn (v. d., 2 giây im lặng) để tự động kết thúc phiên chạy.
- Bộ nhớ và b) – động cơ âm thanh và tác vụ nhận diện tiêu thụ tài nguyên quan trọng. Tạm dừng hoặc dừng nhận diện khi ứng dụng đi xuống nền.
- Đang tìm kiếm dữ liệu giả – Dùng tập tin âm thanh prefLT:29] trong quá trình phát triển để tránh quan hệ phụ thuộc micro.
Ngắt kết nối
Gọi điện thoại, báo động, hoặc Siri có thể ngắt một phiên họp nhận dạng hoạt động. Gửi thông báo để tạm dừng và tiếp tục duyên dáng:
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
}
}
Xem xét khả năng truy cập
Nhận diện giọng nói tăng cường khả năng truy cập cho người dùng với động cơ hoặc ảnh hiện bị lỗi. Bảo đảm thực hiện của bạn:
- Cung cấp thông tin phản hồi rõ ràng khi lắng nghe bắt đầu/ngừng.
- Hỗ trợ Giọng nói bên trên bằng cách sử dụng nhãn có khả năng truy cập trên nút nhận diện.
- Cung cấp phương pháp nhập dựa trên văn bản thay thế trong trường hợp việc nhận dạng bị lỗi.
- Tôn trọng sự riêng tư của người dùng bằng cách không lưu trữ dữ liệu âm thanh mà không có sự đồng ý rõ ràng.
Thử và gỡ lỗi
Trình mô phỏng không bao gồm micro; thử nghiệm trên thiết bị vật lý. Hãy dùng [FLT: 0] bản chẩn đoán củaX code dưới và thêm giá trị [FLT: 34] để bật khả năng ghi động từ .
Các vụ án thế giới thật
- Lệnh của chăng tắt trong ứng dụng CMS [FLT: 1] – Cho phép các biên tập viên có thể tự do đọc nội dung hoặc định hướng.
- Từ điển ghi chú ) - Bản ghi chú thời gian thực với sự ghi nhận chấm.
- Người dùng có thể nói: “Hãy trở lại với nhóm người này hoặc“ Mở cửa ra mà không đụng vào màn hình.
- Bản sao hợp pháp ) – Dùng chuỗi ngữ cảnh cho từ ngữ đặc trưng miền và kết hợp với sự nhận diện tiện ích của tập đoàn điện tử.
Kết luận
Qua việc hiểu kiến trúc, xử lý quyền hạn, quản lý các buổi học âm thanh và tối ưu hóa cho hiệu suất, bạn có thể tạo ra một kinh nghiệm không thể thay đổi để tôn trọng sự riêng tư của người dùng.
Để đọc thêm, hãy nhắc đến tài liệu cơ sở tư liệu [FLT: 0] của Apple [FLT:] [FLT: 1], ) ) [FLT: 2] hướng dẫn khả năng truy cập , và [FLT: T] tham chiếu lớp phát âm [FLT: t].