语音识别全攻略:从iOS框架到实战避坑指南 要想让语音识别在iOS设备上顺利运行,你得先了解SFSpeech这个“幕后英雄”。它能把你说的话实时转成文本,支持多语言,但同一时间只能处理一种语言;需要随时联网,因为离线和在线识别可以混着用。speech.jpg (需要iOS 10.0及以上版本) 打开SFSpeechRecognitionRequest类一看就懂它的核心属性,这是个继承自NSObject的类。 有个叫taskHint的属性,告诉系统你想让它干哪种活,好帮你分配资源。 还有shouldReportPartialResults开关,打开它就能让你一边听一边看中间结果。 contextualStrings属性让你给它一份提示清单,这样它能更好地认出专业术语。 最后是interactionIdentifier,给你一个字符串标记这次交互,方便日后追踪问题。 用这个框架发起请求有三种方法: 麦克风实时识别(麦克风模式),只要一行代码就能把音频流抓进来,适合现场喊话或连续打字。 文件转录(URL模式),你提前录好的音频可以通过网址直接传给系统,适合后台处理或者没网的情况。 本地文件转录(SFSpeechURLRecognitionRequest),把音频文件包在这个请求里就能读,不用麦克风权限,保护隐私更到位。 你通过代理回调就能知道识别进度了: 音频读完就会调用didFinishReadingAudio函数,告诉你这段音频里有多少数据。 任务结束会触发didFinishSuccessfully函数,传回成功还是失败的布尔值。 成功了就把最终结果填到界面上;失败了就提示用户再录一遍或者重试。 中间会不断触发didHypothesizeTranscription函数,把推测的文字实时显示出来。 有三个大坑要提前避开: 苹果给每个设备和App都设了每日请求次数的天花板,超了就会被暂时禁言。你得在本地做好缓存和去重。 每次录音的长度不能超过1分钟(60秒),太长系统会自动打断你。想要长录音得切成小段发过去再拼起来。 千万别把密码、健康数据或者财务信息当素材上传。一旦被识别并上传去了服务器,既可能触发配额惩罚还可能泄露隐私。最好在客户端就做好数据脱敏和加密检查。 搞定了这些限制后就可以开始调用了: 先把音频读出来并赋值给audioCount这个Int类型变量。 再看FinishSuccessfully这个布尔值判断任务是否成功。 如果成功了就把FinishReadingAudio这个结果设给UI组件比如textView;如果失败了就通过Hint提示用户重试。 在识别的过程中会不断HypothesizeTranscription推测的文字并把它显示出来。 最后别忘了通过Identifier记录下这次交互的唯一标识方便以后查找问题。 有了NSO基础再加上NSObject对象处理就能顺利实现整个流程了!