语音识别系统
为了方便人们的生活,许多的方面都可以通过语音指令来代替手动输入来执行想要的指令。现在做语音识别的有一些不错的开放平台供我们使用,一家是科大讯飞平台,一家是百度语音平台。我个人比较偏爱科大讯飞,因为科大讯飞的优势在于大 段大段的文字识别上,准确率较高。这正好能符合我输入银行卡号准确无误的需求。这篇博客也主要讲的是讯飞语音SDK的使用。下面我们来详细看一下科大讯飞。
1.科大讯飞开放平台
2.科大讯飞iOS - API开放平台
科大讯飞的操作步骤
1.注册ID
正常的注册步骤,一步一步的按顺序来
注册完之后先创建新应用如第一个图,然后添加语音听写,在下载里面的SDK选择iOS下载。
2.导入讯飞SDK框架
下载下来SDK解压后有三个文件夹:doc文件夹:不用多说肯定是开发文档;重要的是接下来的那两个文件夹:一个是lib文件夹:存放科大讯飞SDK类库,这就是我们要导入的SDK;Sample:iOS的科大讯飞demo演示工程。
下面我们来创建一个工程,将lib文件夹下的“iflyMSC.framework”拷贝到工程目录,然后在工程中添加依赖库,如下图所示:
3.开始语音识别
这里已有界面提示的语音识别来讲,先用storyboard创建一个控制器,跳转两个界面分别是语音识别和文字转换界面。语音识别与FirstViewController相连接并连线属性以及按钮方法,文字识别同上。
3.1导入头文件
#import "AppDelegate.h" #import "iflyMSC/IFlySpeechUtility.h"//
3.2登陆讯飞服务
在使用讯飞的语音解析之前,需要进行用户身份验证,即登陆讯飞服务器,这个在viewDidLoad()方法中添加两行代码即可.即讯飞服务器需要根据你当前用户的APPID才能同意你登陆。代码如下:
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 2 // Override point for customization after application launch. 3 4 //登录科大讯飞语音平台 5 NSString *appID = [NSString stringWithFormat:@"appid=%@",@"570f0a8b"]; 6 [IFlySpeechUtility createUtility:appID]; 7 8 return YES; 9 }
3.3在FirstViewController.m中编写语音识别的代码如下
#import "FirstViewController.h" //第一步:引入库文件 //科大讯飞语音识别功能回调方法的接口文件 #import <iflyMSC/IFlyRecognizerViewDelegate.h> //科大讯飞语音识别功能的声音识别视图 #import <iflyMSC/IFlyRecognizerView.h> //科大讯飞语音识别功能中定义的常量 #import <iflyMSC/IFlySpeechConstant.h> //遵循代理协议 @interface FirstViewController ()<IFlyRecognizerViewDelegate> //语音识别对象 @property(nonatomic,strong)IFlyRecognizerView *iflyRecognizerView; //接受相关结果的字符串 @property(nonatomic,strong)NSMutableString *result; //展示识别内容TextView @property (weak, nonatomic) IBOutlet UITextView *showContentTextView; @end @implementation FirstViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //创建声音识别视图对象,初始化声音识别控件 self.iflyRecognizerView= [[IFlyRecognizerView alloc] initWithCenter:self.view.center]; //delegate需要设置,确保delegate回调可以正常返回 self.iflyRecognizerView.delegate = self; } #pragma mark - 开始识别 - (IBAction)beginRecognise:(id)sender { [self startListenning]; } - (void)startListenning { //设置语音识别结果应用为普通文本领域 [self.iflyRecognizerView setParameter: @"iat" forKey:[IFlySpeechConstant IFLY_DOMAIN]]; //设置前端点检测时间为6000ms [self.iflyRecognizerView setParameter: @"6000" forKey:[IFlySpeechConstant VAD_BOS]]; //设置后端点检测时间为700ms [self.iflyRecognizerView setParameter: @"700" forKey:[IFlySpeechConstant VAD_EOS]]; //设置采样率为8000 [self.iflyRecognizerView setParameter: @"8000" forKey:[IFlySpeechConstant SAMPLE_RATE]]; //设置为返回结果中包含标点符号 [self.iflyRecognizerView setParameter: @"1" forKey:[IFlySpeechConstant ASR_PTT]]; //设置语音识别完成后数据的返回数据结构类型xml [self.iflyRecognizerView setParameter: @"plain" forKey:[IFlySpeechConstant RESULT_TYPE]]; //设置在Documents文件夹下缓存的文件名为temp.asr [self.iflyRecognizerView setParameter: @"temp.asr" forKey:[IFlySpeechConstant ASR_AUDIO_PATH]]; //设置自定义的参数 [self.iflyRecognizerView setParameter: @"custom" forKey:[IFlySpeechConstant PARAMS]]; [self.iflyRecognizerView start]; }
3.4代理方法
讯飞对识别结果的处理采用的代理回调的方法,实现IFlySpeechSynthesizerDelegate协议的onResult:isLast:方法.
注意!!!!这里的是onResult,不是onResults,后者是无界面提示的语音解析的结果回调函数.
回调时默认传回来的数据是json数据,咱们大可不必疑惑解析到底使用哪种方式,科大讯飞已经为我们考虑到这些问题了,他官方提供了一个叫做“ISRDataHelper”用它解析就可以了。代码如下:
#pragma mark - 代理方法 //成功 -(void)onResult:(NSArray *)resultArray isLast:(BOOL)isLast{ self.result = [[NSMutableString alloc] init]; NSDictionary *dic = [resultArray objectAtIndex:0]; for (NSString *key in dic) { [self.result appendFormat:@"%@",key]; } NSLog(@"%@---------",_result); //自定义控件显示内容 self.showContentTextView.text = [NSString stringWithFormat:@"%@%@",self.showContentTextView.text,self.result]; } //失败 -(void)onError:(IFlySpeechError *)error{ NSLog(@"error = %@",error); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. }
4.语音识别文字的(说句话让它显示出你说的文字)
整体流程跟上面一样下面来写一下代码
#import "SecondViewController.h" //第一步:引入头文件 //文字识别的回调方法接口 #import <iflyMSC/IFlySpeechSynthesizerDelegate.h> //文字识别对象 #import <iflyMSC/IFlySpeechSynthesizer.h> //科大讯飞语音框架定义的常量 #import <iflyMSC/IFlySpeechConstant.h> @interface SecondViewController ()<IFlySpeechSynthesizerDelegate>//引入协议 @property (weak, nonatomic) IBOutlet UITextField *input;//接收框属性 //创建文字识别对象 @property (strong, nonatomic) IFlySpeechSynthesizer *synthesizer; @end @implementation SecondViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //创建文字识别对象 self.synthesizer = [IFlySpeechSynthesizer sharedInstance]; //指定文字识别对象的代理对象 self.synthesizer.delegate = self; //设置文字识别对象的关键属性 [self.synthesizer setParameter:@"50" forKey:[IFlySpeechConstant SPEED]]; [self.synthesizer setParameter:@"50" forKey:[IFlySpeechConstant VOLUME]]; [self.synthesizer setParameter:@"XIAOYAN" forKey:[IFlySpeechConstant VOICE_NAME]]; [self.synthesizer setParameter:@"8000" forKey:[IFlySpeechConstant SAMPLE_RATE]]; [self.synthesizer setParameter:@"temp.pcm" forKey:[IFlySpeechConstant TTS_AUDIO_PATH]]; [self.synthesizer setParameter:@"custom" forKey:[IFlySpeechConstant PARAMS]]; } #pragma mark - 识别相关的内容 - (IBAction)beginRecgnise:(id)sender { [self.synthesizer startSpeaking:_input.text]; } #pragma mark - 代理方法 -(void)onCompleted:(IFlySpeechError *)error{ }
这个是很方便的一种第三方的方法实现语音识别!
时间: 2024-10-04 13:05:07