码迷,mamicode.com
首页 > 移动开发 > 详细

ios语音识别(讯飞)

时间:2016-06-03 21:22:50      阅读:933      评论:0      收藏:0      [点我收藏+]

标签:

   语音识别系统

为了方便人们的生活,许多的方面都可以通过语音指令来代替手动输入来执行想要的指令。现在做语音识别的有一些不错的开放平台供我们使用,一家是科大讯飞平台,一家是百度语音平台。我个人比较偏爱科大讯飞,因为科大讯飞的优势在于大 段大段的文字识别上,准确率较高。这正好能符合我输入银行卡号准确无误的需求。这篇博客也主要讲的是讯飞语音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{
    
}

这个是很方便的一种第三方的方法实现语音识别!

ios语音识别(讯飞)

标签:

原文地址:http://www.cnblogs.com/manmq/p/5557400.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!