iOS语音识别

文章目录

      • iOS语音识别步骤
        • 本地音频文件识别
        • 实时语音识别

  • 在 2016 年的 WWDC 上,Apple 终于开放了语音识别 Speech Recognition API,那就是 Speech 框架。事实上,Siri 的语音识别正是由 Speech Kit 提供支持。超过50种语言获得支持、任何运行iOS10的设备都可用、加入用户授权使其更安全、可以转化音频文件和实时语音 。
  • 现在阿里、腾讯、科大讯飞都有相关的语音识别框架、超过时长都会收费的、集成相关框架、调用相关api还是非常简单的,这里主要讲的是iOS自带语音识别框架Speech的使用。

iOS语音识别步骤

  • 录音和语音识别都是用户的隐私权限,所以需要用户授权打开麦克风(实时语音)和音频识别权限,所以要在info.plist文件中添加相关key:(Privacy - Microphone Usage Description、Privacy - Speech Recognition Usage Description)
	<key>NSMicrophoneUsageDescription</key><string>App需要您的同意,才能访问麦克风</string><key>NSSpeechRecognitionUsageDescription</key><string>App需要您的同意,才能使用语音识别技术</string>

设置用户授权

  • 只有用户授权了,才能访问麦克风和音频识别
  override func viewDidLoad() {super.viewDidLoad()//获取用户权限SFSpeechRecognizer.requestAuthorization { (authStatus : SFSpeechRecognizerAuthorizationStatus) inDispatchQueue.main.async(execute: {switch authStatus {case .notDetermined:self.titleL.text = "语音识别未授权"breakcase .denied:self.titleL.text = "用户未授权使用语音识别"breakcase .restricted:self.titleL.text = "语音识别在这台设备上受到限制"breakcase .authorized:self.titleL.text = "可以开始录音了"self.btnClickEnabled = truebreak}})}}

本地音频文件识别

  • 比如像微信支付宝一些搜索框中就是先录音,然后再识别音频文件转为文字进行搜索,这个相对用的比较多。关于录音上篇文章已经写过了,这里不再赘述。这里主要讲录音后的音频文件如何识别。
  • 本地语音文件识别还是很简单的,获取音频文件路径url,通过这个url录音创建识别请求对象,音频识别对象通过该请求去执行识别任务后即可获得识别后的文字。
  • 具体相关代码:
  //本地语音文件识别(录音后,识别录音文件)@IBAction func leftBtnClick(_ sender: UIButton) {let local = NSLocale(localeIdentifier: "zh_CN")//获取本地录音文件路劲let url = Bundle.main.url(forResource: "recordAudio.wav", withExtension: nil)if url == nil {return}let localRecognizer = SFSpeechRecognizer(locale: local as Locale)!let rqs = SFSpeechURLRecognitionRequest(url: url!)
//        recordUrl = [NSURL URLWithString:[NSTemporaryDirectory() stringByAppendingString:@"selfRecord.pcm"]]localRecognizer.recognitionTask(with: rqs) { (result, error) inif (error != nil) {print("语音识别解析失败,%@",error!);}else{self.titleL.text = result!.bestTranscription.formattedString}}}

实时语音识别

  • 实时语音识别就像Siri一样可以变说话边转文字,类似于语言同步翻译,虽然一遍的开发中用到的很少,但还是有必要了解一下。实时语音需要开启麦克风,所以需要不能用模拟器测试。
  • 实时语音识别需要用到音频引擎这个关键类AVAudioEngine,用于生成和处理音频信号并执行音频输入和输出,功能十分强大。
  • 具体相关代码:
//初始化一些成员变量
class ViewController: UIViewController {var btnClickEnabled = false//按钮是否可以点击var speechRecognizer : SFSpeechRecognizer?//音频识别器var recognitionRequest : SFSpeechAudioBufferRecognitionRequest?//对象用于处理语音识别请求,为语音识别提供音频输入var recognitionTask : SFSpeechRecognitionTask? //可以将识别请求的结果返回给你,它带来了极大的便利,必要时,可以取消或停止任务。lazy var audioEngine = AVAudioEngine()// 音频引擎 用于进行音频输入}//初始化语音识别对象
override func viewDidLoad() {super.viewDidLoad()//用于apple语言识别的变量speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "zh-CN"))speechRecognizer?.delegate = (self as SFSpeechRecognizerDelegate);}//开始录音func startRecording(){//如果识别任务还在进行中就取消if recognitionTask != nil {recognitionTask?.cancel()
//            recognitionTask = nil}//创建音频会话对象let audioSession = AVAudioSession.sharedInstance()do {//设置音频类别try audioSession.setCategory(AVAudioSessionCategoryRecord)//设置音频模式try audioSession.setMode(AVAudioSessionModeMeasurement)//激活音频会话try audioSession.setActive(true, with: .notifyOthersOnDeactivation)}catch{fatalError("会话创建失败")}//创建音频识别请求对象recognitionRequest = SFSpeechAudioBufferRecognitionRequest()guard let inputNode : AVAudioInputNode = audioEngine.inputNode else {fatalError("音频引擎 没有输入节点")}guard let recognitionRequest = recognitionRequest else {fatalError("创建音频缓存失败")}//结果报告recognitionRequest.shouldReportPartialResults = true//开启授权任务recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) invar isFinal = falseguard result == nil else {self.titleL.text = result?.bestTranscription.formattedString//判断语言是否处理完成isFinal = (result?.isFinal)!return}guard error == nil && isFinal == false else{// 停止声音处理器引擎self.audioEngine.stop()inputNode.removeTap(onBus: 0)//停止语音识别请求进程self.recognitionRequest?.endAudio()self.recognitionRequest = nilself.recognitionTask?.cancel()self.recognitionTask = nil//按钮可以点击self.btnClickEnabled = truereturn}})// 初始化语音处理器的输入模式let recordingFormat = inputNode.outputFormat(forBus: 0)inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in// 为语音识别请求对象添加一个AudioPCMBuffer,来获取声音数据self.recognitionRequest?.append(buffer)}// 语音处理器准备就绪(会为一些audioEngine启动时所必须的资源开辟内存)audioEngine.prepare()do {//启动识别try audioEngine.start()} catch {print("audioEngine couldn't start because of an error.")}}//停止录音func endRecording(){audioEngine.stop()recognitionRequest?.endAudio()}//语音实时识别
extension UIViewController : SFSpeechRecognizerDelegate{//当语音识别器的可用性发生更改时通知代理。如果语音识别可用,录音按钮也将被启用。public func speechRecognizer(_ speechRecognizer: SFSpeechRecognizer, availabilityDidChange available: Bool) {if available {btnClickEnabled = true} else {btnClickEnabled = false}}
}//按钮点击事件控制@IBAction func rightBtnClick(_ sender: UIButton) {if btnClickEnabled {if audioEngine.isRunning {//结束语言识别endRecording()sender.setTitle("开始语言识别", for: .normal)} else {self.titleL.text = ""startRecording()sender.setTitle("结束语言识别", for: .normal)}}}
  • Apple忠告:
    1. 确保使用语音之别之前,通过UI界面告知用户
    2. 在涉及密码或者敏感信息时,请勿使用
    3. 在你操作识别结果之前,请先把结果展示给用户
    4. Apple 对每台设备的识别有限制。详情未知,不过你可以尝试联系 Apple 获得更多信息
    5. Apple 对每个应用的识别也有限制
    6. 如果你总是遭遇限制,务必联系 Apple,他们或许可以解决这个问题
    7. 语音识别会消耗不少电量和流量
    8. 语音识别每次只能持续大概一分钟

  • 相关demo : iOS语音识别
  • 参考:wwdc2016/Speech Recognition API

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35031.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ACL'21 | 多模态数值推理新挑战,让 AI 学解几何题

文 | 陈嘉奇编 | 小轶 从小到大&#xff0c;数学都是一门令人头秃充满魅力的学科。从基本的代数、几何&#xff0c;到高数微积分&#xff0c;各类数学问题都对答题者的逻辑推理能力都有着不同程度的挑战。 而逻辑推理能力一直以来都是 AI 发展的核心目标之一。学术界对于 AI 自…

【复盘与分享】第十一届泰迪杯B题:产品订单的数据分析与需求预测

文章目录 题目第一问第二问2.1 数据预处理2.2 数据集分析2.2.1 训练集2.2.2 预测集 2.3 特征工程2.4 模型建立2.4.1 模型框架和评价指标2.4.2 模型建立2.4.3 误差分析和特征筛选2.4.4 新品模型 2.5 模型融合2.6 预测方法2.7 总结 结尾 距离比赛结束已经过去两个多月了。 整个过…

不用ChatGPT,使用Notion AI辅助写代码真方便

Notion中使用AI辅助编程的操作步骤&#xff1a; 打开Notion&#xff0c;在一个页面中创建一个新的Code块。在Code块中输入你要编写的代码。不要担心代码是否正确&#xff0c;因为Notion AI会在后续的步骤中帮助你进行纠正和完善。点击Code块右上角的“•••”按钮&#xff0c…

AI 又进阶!除了鉴别 PS 图片,还能一键卸妆!

作者 | 马超 责编 | 伍杏玲 封图 | 视觉中国 出品 | CSDN&#xff08;ID:CSDNnews&#xff09; 最近CVPR2020的论文集合在GitHub火了&#xff0c;CVPR2020-Paper- Code 的项目&#xff08;https://github.com/extreme-assistant/CVPR2020-Paper-Code-Interpretation&#xff09…

探索检测 AI 生成文本(包括 ChatGPT)的 4 种神奇方法

介绍: OpenAI 的 GPT-3 和 ChatGPT 最近的推出引发了人工智能和自然语言处理领域的一场革命。凭借其生成类人文本的能力,GPT-3 为企业和个人等开辟了许多新的可能性。GPT-4 指日可待。然而,这一进步也引起了人们对人工智能生成文本可能被滥用的担忧,特别是在错误信息、假新…

一款免费开源的 AI 修复神器,可以帮助我们去掉图片中任何不想要的东西

一款免费开源的 AI 修复神器,可以帮助我们去掉图片中任何不想要的东西。 比如想去个图片的水印,自拍照背景有个人想去掉,都可以用这类算法。 也有一些相似算法,不过目前这个 Lama Cleaner 属于 SOTA,也就是效果最好。 先看下效果。 去掉不想要的气球: 去掉自拍中背景…

iPhone 4 问世 | 历史上的今天

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 6 月 8 日&#xff0c;在 1978 年的今天&#xff0c;英特尔&#xff08;Intel&#xff09;发布了自己的 8086 处理器&#xff0c;从而开始 X86 处理器的传奇。但…

中国移动九天毕昇部署fastchat Ubuntu18.04+torch1.13.1+cuda11.6+python3.9

8核CPU,RAM32G 时间&#xff1a;2023年7月 项目地址:GitHub - lm-sys/FastChat: An open platform for training, serving, and evaluating large language models. Release repo for Vicuna and FastChat-T5. 体验地址:https://chat.lmsys.org/ 时间20230703&#xff0c;fas…

聚观早报 | 通信行程卡正式宣布下线;《三体》首日播放量破1亿

今日要闻&#xff1a;通信行程卡正式宣布下线&#xff1b;《三体》首日播放量破1亿&#xff1b;全国影院营业率恢复至6成&#xff1b;SpaceX将日本登月舱送入太空&#xff1b;iPhone 15全系涨价突破万元 通信行程卡正式宣布下线 12 月 12 日凌晨 0 点&#xff0c;“通信行程卡…

三体中的思想实验一:地球往事

阅读本文大概需要 8 分钟。 最近在的得到听书上听完了怀沙解读刘慈欣的科幻巨著三部曲《三体》&#xff0c;非常震撼&#xff0c;不仅对作者的脑洞之大震惊之外&#xff0c;也对作者对科学的严谨态度叹服。 整个文章故事情节跌宕起伏&#xff0c;扣人心弦。主要内容讲的是&…

《三体》读后思考-泰勒展开/维度打击/黑暗森林

前言 两个月前&#xff0c;老婆不知道吃错了什么药&#xff0c;心血来潮买了几本书&#xff0c;全是什么给孩子讲数学&#xff0c;量子物理之类的&#xff0c;小小才六岁啊…还有一部小说《三体》&#xff0c;当然&#xff0c;这肯定是她自己想看的了&#xff0c;也许是看到了…

sns一些图在乳腺癌上的数据可视化和特征选择

可以具体看一下 #数据量纲不一样&#xff0c;是否需要统一量纲进行标准化 #小提琴图是箱线图与核密度图的结合&#xff0c;箱线图展示了分位数的位置&#xff0c;核密度图则展示了任意位置的密度&#xff0c; #通过小提琴图可以知道哪些位置的数据点聚集的较多&#xff0c;因其…

带临床数据的热图 -- 给样品添加TNM分期、年龄、性别、riskscore等信息

聚类热图是生物医学论文中最常见的一类图。通常&#xff0c;一篇研究癌症预后、突变等类型的文章最终都会聚焦到几个或者十几个基因&#xff0c;然后利用这些基因的表达量绘制热图&#xff0c;并尽可能多地在图中展示样品的临床信息&#xff0c;例如TNM&#xff08;Tumor Node …

全球及中国婴儿痤疮药行业专项调研及竞争策略分析报告2021-2027年版

2020年,全球婴儿痤疮药市场规模达到了 百万美元,预计2027年可以达到 百万美元,年复合增长率(CAGR)为 % (2021-2027)。中国市场规模增长快速,预计将由2020年的 百万美元增长到2027年的 百万美元,年复合增长率为 % (2021-2027)。 本报告研究“十三五”期间全球及中国市场婴儿…

ubuntu经常断网、掉线、上不去网的原因

ubuntu经常断网、掉线、上不去网的原因 weixin_30697239 2019-01-26 01:47:00 608 收藏 1 文章标签&#xff1a; 运维 版权 9月11日&#xff0c;腾讯Techo Hub技术沙龙&#xff0c;相约腾讯北京总部&#xff0c;深入音视频技术解析 鹅厂技术大佬带飞&#xff0c;现场分享…

关于打游戏ping值不稳定问题的解决经历(疑难篇)

首先&#xff0c;大概几天之前&#xff0c;笔者发现自己的电脑在打游戏&#xff08;lol&#xff09;的时候ping值忽高忽低&#xff0c;就是突然从20跳到10000&#xff0c;没有丝毫夸张&#xff0c;就是这样吓人&#xff0c;然后慢慢降下来&#xff0c;又突然窜上去&#xff0c;…

网络ping不通,试试这8招

摘要&#xff1a;网络ping不通&#xff0c;该怎么办&#xff1f;本文教你8个大招&#xff0c;轻松找到问题根源。 本文分享自华为云社区《网络ping不通&#xff0c;该怎么办&#xff1f;》&#xff0c;作者&#xff1a;wljslmz。 如下图&#xff0c;PC&#xff08;192.168.10.…

给儿子女儿的一封信

** 今天读到两篇父母写给儿女的信&#xff0c;感觉还是挺感动的&#xff0c;分享 一下 ** &#xff08;1&#xff09;刘瑜&#xff1a;写给女儿布谷的信 亲爱的小布谷&#xff1a; 今年六一儿童节&#xff0c;正好是你满百天的日子。 当我写下“百天”这个字眼的时候&…

对你的孩子再多一点耐心——一位美国父亲写给儿子的一封信

孩子&#xff1a; 在你睡着的时候&#xff0c;我要和你说一些话。我刚才悄悄地走进你的房间。几分钟前&#xff0c;我在书房看报纸时&#xff0c;一阵懊悔的浪潮淹没了我&#xff0c;使我喘不过气来。带着惭愧的心&#xff0c;我来到你的身边&#xff0c;我想到的事太多了。 …

写给新手程序员的一封信

写给新手程序员的一封信 Letter 1: 首先,欢迎来到程序员的世界。在这个世界上,不是有很多人想创造软件并解决问题。你是一名hacker,属于那些愿意做一些有挑战性的事情的人。 “当你不创造东西时,你只会根据自己的感觉而不是能力去看待问题。” – WhyTheLuckyStiff 对…