iOS开发——Siri语音识别



原理: 先用系统的录音器录音,让后让siri识别语音转文字


第一步 :在项目plist文件添加授权,如下图




第二步:导入头文件,添加协议,

#import <Speech/Speech.h>

#import <AVFoundation/AVFoundation.h>


@interface SiriViewController () <SFSpeechRecognizerDelegate>



第三步:UI控件,实现siri识别方法,代码如下:

 .h

#import <UIKit/UIKit.h>@interface SiriViewController : UIViewController@end


.m

//
//  SiriViewController.m
//  ASR
//
//  Created by 刘成利 on 2017/2/28.
//  Copyright © 2017年 刘成利. All rights reserved.
//
#define sWith     [UIScreen mainScreen].bounds.size.width
#define sHeight   [UIScreen mainScreen].bounds.size.height#import "SiriViewController.h"#import <Speech/Speech.h>
#import <AVFoundation/AVFoundation.h>#import "LongPressButton.h"@interface SiriViewController () <SFSpeechRecognizerDelegate>@property (nonatomic, strong) LongPressButton *longButton;    // 长按按钮
@property (nonatomic, strong) UITextField     *inputText;     // 语音转化成的文本// 录音引擎
@property (strong, nonatomic) AVAudioEngine            *audioEngine;
// 语音识别任务
@property (strong, nonatomic) SFSpeechRecognitionTask  *recognitionTask;
// 语音识别器
@property (strong, nonatomic) SFSpeechRecognizer       *speechRecognizer;
// 识别请求
@property (strong, nonatomic) SFSpeechAudioBufferRecognitionRequest *recognitionRequest;@end@implementation SiriViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor whiteColor];// 创建信息labelUILabel *textLabel      = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, sWith-100, 30)];textLabel.text          = @"【Siri】语音识别转文字";textLabel.font          = [UIFont fontWithName:@"HelveticaNeue" size:20.f];textLabel.textColor     = [UIColor blackColor];textLabel.textAlignment = NSTextAlignmentCenter;[self.view addSubview:textLabel];// 退出控制器{UIButton *dismissButton        = [[UIButton alloc] initWithFrame:CGRectMake(sWith/2-50, sHeight-100, 100, 50)];dismissButton.tag              = 10;dismissButton.backgroundColor  = [UIColor lightGrayColor];dismissButton.titleLabel.font  = [UIFont fontWithName:@"HelveticaNeue" size:16.f];[dismissButton setTitle:@"返回上一页" forState:UIControlStateNormal];[dismissButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];[dismissButton setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted];[dismissButton addTarget:self action:@selector(dismiss) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:dismissButton];}// 语音识别self.inputText = [[UITextField alloc]initWithFrame:CGRectMake(50, 200, sWith-100, 100)];self.inputText.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.2];[self.view addSubview:self.inputText];// 长按按钮self.longButton = [[LongPressButton alloc]initWithFrame:CGRectMake(sWith/2-50, sHeight-300, sWith-300, sWith-300)];self.longButton.removeLoading = YES;// 保持在视图最上面[[UIApplication sharedApplication].keyWindow addSubview:self.longButton];[[UIApplication sharedApplication].keyWindow bringSubviewToFront:self.longButton];__weak SiriViewController *weakSelf = self;self.longButton.eventBlock = ^(TouchType TouchType,NSTimeInterval time){switch (TouchType) {case LongTouchBegin:[weakSelf startEvent];break;case LongTouchEnd:[weakSelf endEvent];break;default:break;}};// 基本设置[self basicSetup];}- (void)basicSetup{// 设备识别语言为中文NSLocale *cale = [[NSLocale alloc]initWithLocaleIdentifier:@"zh-CN"];self.speechRecognizer = [[SFSpeechRecognizer alloc]initWithLocale:cale];// 申请权限认证[SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status) {dispatch_async(dispatch_get_main_queue(), ^{switch (status) {case SFSpeechRecognizerAuthorizationStatusNotDetermined:self.longButton.userInteractionEnabled = NO;self.inputText.text  = @"没有授权语音识别";break;case SFSpeechRecognizerAuthorizationStatusDenied:self.longButton.userInteractionEnabled = NO;self.inputText.text   = @"用户拒绝使用语音识别权限";break;case SFSpeechRecognizerAuthorizationStatusRestricted:self.longButton.userInteractionEnabled = NO;self.inputText.text   = @"不能在该设备上进行语音识别";break;case SFSpeechRecognizerAuthorizationStatusAuthorized:self.longButton.userInteractionEnabled = YES;self.inputText.text   = @"设备录音可用";break;default:break;}});}];// 创建录音引擎self.audioEngine = [[AVAudioEngine alloc]init];}// 语音按钮识别事件
- (void)endEvent{if ([self.audioEngine isRunning]) {[self.audioEngine stop];[self.recognitionRequest endAudio];}[self.longButton finishAndRest];}// 识别语音
-(void)startEvent{if (self.recognitionTask) {[self.recognitionTask cancel];self.recognitionTask = nil;}AVAudioSession *audioSession = [AVAudioSession sharedInstance];bool  audioBool = [audioSession setCategory:AVAudioSessionCategoryRecord error:nil];bool  audioBool1= [audioSession setMode:AVAudioSessionModeMeasurement error:nil];bool  audioBool2= [audioSession setActive:true withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];if (audioBool || audioBool1||  audioBool2) {NSLog(@"可以使用");}else{NSLog(@"这里说明有的功能不支持");}self.recognitionRequest = [[SFSpeechAudioBufferRecognitionRequest alloc]init];AVAudioInputNode *inputNode = self.audioEngine.inputNode;self.recognitionRequest.shouldReportPartialResults = true;//开始识别任务self.recognitionTask = [self.speechRecognizer recognitionTaskWithRequest:self.recognitionRequest resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {bool isFinal = false;if (result) {self.inputText.text = [[result bestTranscription] formattedString]; //语音转文本isFinal = [result isFinal];}if (error || isFinal) {[self.audioEngine stop];[inputNode removeTapOnBus:0];self.recognitionRequest = nil;self.recognitionTask = nil;
//            self.siriButton.enabled = true;}}];AVAudioFormat *recordingFormat = [inputNode outputFormatForBus:0];[inputNode installTapOnBus:0 bufferSize:1024 format:recordingFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {[self.recognitionRequest appendAudioPCMBuffer:buffer];}];[self.audioEngine prepare];bool audioEngineBool = [self.audioEngine startAndReturnError:nil];NSLog(@"%d",audioEngineBool);
//    self.inputText.text = @"正在录音。。。";
}#pragma mark - SFSpeechRecognizerDelegate
- (void)speechRecognizer:(SFSpeechRecognizer *)speechRecognizer availabilityDidChange:(BOOL)available{if (available) {self.inputText.text = @"语音识别可用";}else{self.inputText.text = @"语音识别不可用";}
}// 退出控制器
- (void)dismiss{[self dismissViewControllerAnimated:YES completion:^{}];}




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

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

相关文章

打造Android的中文Siri语音助手(一)——小I机器人的接口

By 何明桂&#xff08;http://blog.csdn.net/hmg25&#xff09; 转载请注明出处 Iphone4S的Siri让人眼前一亮&#xff0c;网上出现了无数调戏Siri的视频。真是让android用户们心痒不已。好在随后android阵营中的高手迅速反击&#xff0c;推出了Iris。悲剧的是Iris仅支持英文&a…

1 分钟给 Siri 升个级!从智Z变身 ChatSiri!

原文链接&#xff1a;https://forum.laf.run/d/79/17 众所周知&#xff0c;Siri 是一个智 Z&#xff01;那么如果能接入大火的 chatGPT&#xff0c;是不是就会从智 Z 变成人工智能&#xff1f;&#xff01; 众所周知&#xff0c;Laf 是一个集函数、数据库、存储为一体的云开发…

iOS-Siri唤起银行类app (语音转账)

前言 最近公司App要实现下图这样一个功能&#xff0c;对iPhone手机喊 " 嘿&#xff0c;Siri&#xff0c;余额 ”或者 " 嘿&#xff0c;Siri&#xff0c;转账 ” 出现下面的列表&#xff0c;结果列表中展示我们的APP。 列表.png 百度了很久&#xff0c;没有找到这个是…

多种多样的语音连麦方式

前言 语音连麦&#xff0c;视频通话这种基础功能大家都已经非常熟悉了&#xff0c;应用场景也十分广泛&#xff0c;例如连麦直播、游戏开黑、在线合唱、视频相亲等。 anyRTC为了让开发者们可以最找到适合自己的开发系统&#xff0c;目前我们已经适配了iOS、Androd、Web、小程…

《人类简史》笔记三—— 历史从无正义

目录 一、尽管把人人生而平等喊得震天响&#xff0c;其实还是把人分成了上下等级 二、恶性循环 三、当男人究竟有什么好的&#xff1f; 一、尽管把人人生而平等喊得震天响&#xff0c;其实还是把人分成了上下等级 古时候&#xff1a; 上等人 平民和奴隶 现在&#xff1a;…

是什么让你意识到打工没出路的?

前两年有篇爆款文&#xff0c;叫《困在算法里的外卖骑手》——算法的最终目标&#xff0c;是将骑手的体力压榨到极限&#xff0c;将成本降低到极限。 很多人看完&#xff0c;都替外卖小哥叫惨。 但回头仔细一盘&#xff0c;发现自己也惨&#xff0c;那套残酷的资本主义算法&a…

男子与 AI 对话 6 周后,选择自杀!一时难分“魔鬼”还是“救星”?

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 伴随着 ChatGPT 的火热出圈&#xff0c;让 AI 在全球范围内掀起一股浪潮&#xff1a;“往赛道里挤&#xff01;” 当各大公司秉承着“冲就对了”的心态迎接 AI 带来的一切&#xff0c;却…

LangChain大型语言模型(LLM)应用开发(五):评估

LangChain是一个基于大语言模型&#xff08;如ChatGPT&#xff09;用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

你不知道的 async、await 魔鬼细节

点击上方 前端Q&#xff0c;关注公众号 回复加群&#xff0c;加入前端Q技术交流群 作者&#xff1a;Squirrel_ https://juejin.cn/post/7194744938276323384 0、前言 关于promise、async/await的使用相信很多小伙伴都比较熟悉了&#xff0c;但是提到事件循环机制输出结果类似的…

我与ChatGPT又聊了聊:什么是真正的云原生大数据平台

图片来源 | 文心一格 小智&#xff1a;传统大数据平台是什么样的&#xff1f;企业使用传统大数据平台有哪些弊端&#xff1f; 小智&#xff1a;云原生为什么这么火&#xff1f;企业如何借助云原生实现数据驱动&#xff1f; 小智&#xff1a;你听过在Kubernetes上部署的容器化云…

【云原生】我将ChatGPT变成Kubernetes 和Helm 终端

{kubectl get po&#xff0c;deploy&#xff0c;svc}{kubectl run --imagenginx nginx-app --port80 --env“DOMAINcluster”}{kubectl expose deployment nginx-app --port80 --namenginx-http}{kubectl get po&#xff0c;svc&#xff0c;deploy}{curl 10.100.67.94:80}{helm…

关于云原生,我问了 ChatGPT 几个问题......

2 个月用户破亿&#xff0c;一举超过 Tik Tok 成为史上增速最快的消费级应用程序&#xff0c;ChatGPT 的诞生给沉寂的科技圈丢下了一块巨大的石头。这场生成式 AI 掀起的浪潮&#xff0c;让人不禁重回到当年人类智慧的大溃败——AlphaGo 战胜李世石&#xff0c;震撼依旧但其背后…

教你接入GPT4,不用梯子也能玩

介绍 chatgpt最近十分火爆&#xff0c;但大多少开发接入的都是gpt3.5&#xff0c;今天教教大家如何快速接入gpt4 使用 接入很简单&#xff0c;需要去API文档获取你的token填入&#xff0c;每个账号都有白嫖次数&#xff0c;以下是node代码 const { data } await axios({url…

GPT:你知道这五年我怎么过的么?

时间轴 GPT 首先最初版的GPT&#xff0c;来源于论文Improving Language Understanding by Generative Pre-Training&#xff08;翻译过来就是&#xff1a;使用通用的预训练来提升语言的理解能力&#xff09;。GPT这个名字其实并没有在论文中提到过&#xff0c;后人将论文名最后…

【2023.5.3~2023.5.9】CTF刷题记录

目录 日期&#xff1a;2023.5.3 题目&#xff1a;[GWCTF 2019]pyre 日期&#xff1a;2023.5.4 题目&#xff1a;[ACTF新生赛2020]easyre 题目&#xff1a;DASCTF Apr.2023 X SU战队2023开局之战 【简单】easyRE 日期&#xff1a;2023.5.5 题目&#xff1a;findit 题目&…

浅尝Transformer和LLM

文章目录 TransformerTransformer的衍生BERTPre-trainingBERT与其他方法的关系怎么用BERT做生成式任务&#xff1f; GPTPre-trainingFine-Tuning Transformer工具开源库特点 LLM系列推理服务 大语言模型势不可挡啊。 哲学上来说&#xff0c;语言就是我们的一切&#xff0c;语言…

【stable diffusion原理解读通俗易懂,史诗级万字爆肝长文,喂到你嘴里】

文章目录 一、前言&#xff08;可跳过&#xff09;二、stable diffusion1.clip2.diffusion modelforward diffusion &#xff08;前向扩散&#xff09;逆向扩散&#xff08;reverse diffusion&#xff09;采样图阶段小结 3.Unet modeltimestep_embedding采用正余弦编码 三、sta…

旋转的base,你见过吗wp

一、题目 前几天在ctfshow的qq交流群里看到有个师傅在问一道名为“旋转的base&#xff0c;你见过吗”的题目&#xff08;但这道题不是ctfshow平台上的啦&#xff0c;后来听说好像是个比赛题&#xff09;&#xff0c;题目给出了一串编码过的字符串&#xff0c;但看题目名也能知…

OtterCTF—内存取证wp

目录 前言 一、工具说明 二、题目解析 1.What the password? 2.General Info 3.Play Time 4.Name Game 5.Name Game 2 6.Silly Rick 7.Hide And Seek 8.Path To Glory 9.Path To Glory 2 10.Bit 4 Bit 11.Graphics For The Weak 12.Recovery 13.Closure 总结 前言 前几天有幸…

电商打工人的饭碗,AIGC还端不走

文 | 螳螂观察 作者 | 鲸胖胖 以ChatGPT、Midjourney、文心一言等为代表的AIGC产品&#xff0c;已经在全球掀起新一轮的AI技术变革新浪潮&#xff0c;再度刷新了人们对AI的认知&#xff0c;多个行业的商业模式和生态必然在未来会被彻底重构。 前不久&#xff0c;36氪就测使用…