版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.02.04 |
前言
Speech框架,在用户允许的情况下,获得对现场和预先录制的语音的识别,并获得转录,替代解释和置信度。接下来几篇我们就一起看一下这个框架。
Overview
下面我们就看一下该框架的基本信息。
iOS用户习惯于使用Siri与应用进行交互,并在键盘可见时使用听写来捕捉他们的语音。 Speech API允许您在应用程序中扩展和增强语音识别体验,而不需要键盘。
下面看一下该框架的基本结构。
Getting Started with Speech Recognition - 开始语音识别
Speech API通过与Apple服务器通信或使用设备上的语音识别器(如果可用)来执行语音识别。 要找出语音识别器是否可用于特定语言,请使用SFSpeechRecognizerDelegate协议。
由于您的应用可能需要连接到服务器才能执行识别,因此尊重用户的隐私并将其话语视为敏感数据是非常重要的。 因此,在启动语音识别之前,您必须获得用户的明确许可。
注意:如果用户授予权限,则不必再次请求。
要开始在您的应用程序中使用语音识别:
- 写一个句子,告诉用户他们如何在你的应用程序中使用语音识别。
例如,如果您的待办事项列表应用程序在用户说完“done”时将项目的状态更改为完成,则可以编写“Lets you mark an item as finished by saying Done”
。
- 将NSSpeechRecognitionUsageDescription关键字添加到
Info.plist
文件中,并将您所写的句子作为字符串值提供。
- 将NSSpeechRecognitionUsageDescription关键字添加到
- 使用requestAuthorization:通过显示您在警报中编写的句子来请求用户的权限。
如果用户拒绝许可(或者语音识别不可用),请妥善处理。例如,您可能会禁用指示语音识别可用性的用户界面项目。
- 在用户授予您的应用程序执行语音识别权限后,创建一个SFSpeechRecognizer对象并创建一个语音识别请求。
使用SFSpeechURLRecognitionRequest类对预先记录的磁盘上的音频文件执行识别,并使用SFSpeechAudioBufferRecognitionRequest类识别实时音频或内存中的内容。
- 将请求传递给
SFSpeechRecognizer
对象以开始识别。
- 将请求传递给
语音是逐渐识别的,所以你的识别器的处理程序可能会被多次调用。 (检查识别完成时final属性的值。)如果您正在使用实时音频,则在识别过程中使用SFSpeechAudioBufferRecognitionRequest并将音频缓冲区附加到请求。
- 录制完成后,向识别器发出信号,指示没有更多音频,以便识别可以完成。请注意,在前一个完成之前启动新的识别任务会中断正在进行的任务。
Creating a Speech Recognizer - 创建一个语音识别器
这是创建一个简单的识别器的方法,默认为用户当前的语言环境并启动语音识别。
// Listing 1 Getting a speech recognizer and making a recognition request
func recognizeFile(url:NSURL) {
guard let myRecognizer = SFSpeechRecognizer() else {
// A recognizer is not supported for the current locale
return
} if !recognizer.isAvailable() {
// The recognizer is not available right now
return
} let request = SFSpeechURLRecognitionRequest(url: url)
recognizer.recognitionTask(with: request) { (result, error) in
guard let result = result else {
// Recognition failed, so check error for details and handle it
return
}
if result.isFinal {
// Print the speech that has been recognized so far
print("Speech in the file is \(result.bestTranscription.formattedString)")
}
}}
Best Practices for a Great User Experience - 良好用户体验的最佳实践
Be prepared to handle the failures that can be caused by reaching speech recognition limits.准备好处理可能由于达到语音识别限制而导致的故障。由于语音识别是一种基于网络的服务,所以强制执行限制,以便服务可以免费供所有应用程序使用。单个设备可能会受限于每天可以执行的识别次数,并且可能会根据每天请求的数量在全局范围内对单个应用程序进行限制。例如,如果识别请求快速失败(在开始的一两秒钟内),则识别服务可能暂时不可用于您的应用程序,并且您可能要求用户稍后再试。
Plan for a one-minute limit on audio duration.规划音频持续时间的一分钟限制。语音识别会给电池寿命和网络使用带来相对较高的负担。在iOS 10中,话语音频持续时间被限制在一分钟左右,这与键盘相关听写的限制相似。
Remind the user when your app is recording.在应用程序正在录制时提醒用户。例如,您可以播放“正在录制”的声音,并显示可帮助用户了解他们正在被主动录制的视觉指示器。您还可以在识别时显示语音,以便用户了解您的应用正在做什么以及发生识别错误的时间。
Do not perform speech recognition on private or sensitive information.不要对私人或敏感信息进行语音识别。有些言论根本不适合识别。避免发送密码,健康或财务数据,以及其他敏感的言论进行识别。
Topics
1. Getting a Speech Recognizer
-
SFSpeechRecognizer
- 支持的语音识别器
2. Requesting Recognition and Monitoring Progress
-
SFSpeechAudioBufferRecognitionRequest
- 识别音频缓冲区中提供的语音的请求。
-
- 从音频源中识别语音的请求。
-
- 在录制的音频文件中识别语音的请求。
-
- 语音识别任务,让您监视识别进度。
3. Working with Recognition Results and Transcriptions
-
- 被识别的话语,对应于一段录制的语音,并包含一个或多个转录言语。
-
- 被识别的言语的虚拟文本表示。
-
- 整个言语的转录的一部分。
-
SFSpeechRecognitionTaskDelegate
- 支持复杂或多个话语语音识别请求的协议。
-
- 协议可以帮助您跟踪语音识别器的可用性。
4. Constants
-
Speech Enumerations
- 指定语音识别类型的常量,识别任务的状态以及授权请求的状态。
后记
本篇已结束,后面更精彩~~~