iOS语音识别(科大讯飞SDK)

原创 2016年08月29日 16:56:24

         最近在研究语音识别,前段时间使用了百度语音识别,最近公司又突然让转用科大讯飞的SDK,感觉有点坑。不过 也算是学习了使用新的SDK了吧。在这里将集成SDK以及一些使用方法写一下。

第一步:获取APPid

先在科大讯飞语音识别开发者网站注册,获取APPid。

第二步:集成SDK

导入科大讯飞的iflyMSC.framework;然后再导入相关的依赖库:

第三步:初始化启动服务


在app delegate里面写入如下代码初始化

NSLog(@"%@",[IFlySetting getVersion]);

    //设置sdklog等级,log保存在下面设置的工作路径中

    [IFlySetting setLogFile:LVL_ALL];

    

    //打开输出在consolelog开关

    [IFlySetting showLogcat:NO];

    

    //设置sdk的工作路径

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUser DomainMask, YES);

    NSString *cachePath = [paths objectAtIndex:0];

    [IFlySetting setLogFilePath:cachePath];

    

    //创建语音配置,appid必须要传入,仅执行一次则可

    NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",APPID_VALU E];

    

    //所有服务启动前,需要确保执行createUtility

    [IFlySpeechUtility createUtility:initString];

在使用的页面

- (void)viewWillAppear:(BOOL)animated

{

    NSLog(@"%s",__func__);

    [super viewWillAppear:animated];

   

    [self initRecognizer];


}


- (void)viewWillDisappear:(BOOL)animated

{

    NSLog(@"%s",__func__);

    [super viewWillDisappear:animated];

    [_iFlySpeechRecognizer cancel];

    [_iFlySpeechRecognizer setDelegate:nil];

    [_iFlySpeechRecognizer setParameter:@"" forKey:[IFlySpeechConstant PARAMS]];


}


//初始化识别参数

- (void)initRecognizer

{

    NSLog(@"%s",__func__);

    

    //单利模式 UI的实例

    if (self.iFlySpeechRecognizer==nil) {

        _iFlySpeechRecognizer=[IFlySpeechRecognizer sharedInstance];

        [_iFlySpeechRecognizer setParameter:@"" forKey:[IFlySpeechConstant PARAMS]];

        

        //设置听写模式

        [_iFlySpeechRecognizer setParameter:@"iat" forKey:[IFlySpeechConstant IFLY_DOM AIN]];

        

    }

    _iFlySpeechRecognizer.delegate=self;

    

    if (_iFlySpeechRecognizer!=nil) {

        IATConfig *instance=[IATConfig sharedInstance];

        

        //设置最长录音时间

        [_iFlySpeechRecognizer setParameter:instance.speechTimeout forKey:[IFlySpeechC onstant SPEECH_TIMEOUT]];

        

        //设置后端点

        [_iFlySpeechRecognizer setParameter:instance.vadEos forKey:[IFlySpeechConstant VAD_EOS]];

        

        //设置前端点

        [_iFlySpeechRecognizer setParameter:instance.vadBos forKey:[IFlySpeechConstant VAD_BOS]];

        

        //网络等待时间

        [_iFlySpeechRecognizer setParameter:@"20000" forKey:[IFlySpeechConstant NET_TI MEOUT]];

        

        //设置采样率,推荐16K

        [_iFlySpeechRecognizer setParameter:IATConfig.lowSampleRate forKey:[IFlySpeech Constant SAMPLE_RATE]];

        if ([instance.language isEqualToString:[IATConfig chinese]]) {

            //设置语言

            [_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechCo nstant LANGUAGE]];

            //设置方言

            [_iFlySpeechRecognizer setParameter:instance.accent forKey:[IFlySpeechCons tant ACCENT]];

            

        }else if([instance.language isEqualToString:[IATConfig english]]){

            [_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechCo nstant LANGUAGE]];

        }

        //设置是否返回标点符号

        [_iFlySpeechRecognizer setParameter:instance.dot forKey:[IFlySpeechConstant AS R_PTT]];

    }

    

}

- (void)startButtonClick

{

    NSLog(@"start");

    [_textView setText:@""];

    [_textView resignFirstResponder];

    self.isCanceled=NO;

    if (_iFlySpeechRecognizer==nil) {

        [self initRecognizer];

    }

    [_iFlySpeechRecognizer cancel];

    

    //设置音频来源为麦克风

    [_iFlySpeechRecognizer setParameter:IFLY_AUDIO_SOURCE_MIC forKey:@"audio_sourc e"];

    

    //设置听说结果格式为json

    [_iFlySpeechRecognizer setParameter:@"json" forKey:[IFlySpeechConstant RESULT_ TYPE]];

    

    //保存录音文件,保存在sdk工作路径中,如未设置工作路径,则默认保存在library/cache下(为了测 试音频流识别用的)

    [_iFlySpeechRecognizer setParameter:@"asr.pcm" forKey:[IFlySpeechConstant ASR_ AUDIO_PATH]];

    

    [_iFlySpeechRecognizer setDelegate:self];

    

    BOOL ret=[_iFlySpeechRecognizer startListening];

    if (ret) {

        NSLog(@"启动成功");

    }else{

        [_popUpView showText:@"启动失败"];

    }

}


//停止录音

- (void)stopButtonClick

{

    NSLog(@"stop");

    [_iFlySpeechRecognizer stopListening];

    [_textView resignFirstResponder];

}

//取消录音

- (void)cancelButtonClick

{

    NSLog(@"cancel");

    [_iFlySpeechRecognizer cancel];

    [_textView resignFirstResponder];

}


回调方法

#pragma mark - IFlySpeechRecognizerDelegate


/**

  音量回调函数

  volume 030

  ****/

- (void) onVolumeChanged: (int)volume

{

    if (self.isCanceled) {

        [_popUpView removeFromSuperview];

        return;

    }

    

    NSString * vol = [NSString stringWithFormat:@"音量:%d",volume];

    [_popUpView showText: vol];

}


/**

  开始识别回调

  ****/

- (void) onBeginOfSpeech

{

    NSLog(@"onBeginOfSpeech");

    [_popUpView showText: @"正在录音"];

}


/**

  停止录音回调

  ****/

- (void) onEndOfSpeech

{

    NSLog(@"onEndOfSpeech");

    

    [_popUpView showText: @"停止录音"];

}


/**

  听写结束回调(注:无论听写是否正确都会回调)

  error.errorCode =

  0     听写正确

  other 听写出错

  ****/

- (void)onError:(IFlySpeechError *)error

{

    NSLog(@"%s",__func__);

    NSString *text;

    

    if (self.isCanceled) {

        text=@"识别取消";

    }else if (error.errorCode==0){

        if (self.result.length==0) {

            text=@"无识别结果";

        }else{

            text=@"识别成功";

        }

    }else{

        text=[NSString stringWithFormat:@"发生错误:%d %@",error.errorCode,error .errorDesc];;

        NSLog(@"%@",text);

    }

    

}


/**

 无界面,听写结果回调

  results:听写结果

  isLast:表示最后一次

  ****/


- (void)onResults:(NSArray *)results isLast:(BOOL)isLast

{

    NSMutableString *resultString=[[NSMutableString alloc]init];

    NSDictionary *dic=results[0];

    for (NSString *key in dic) {

        [resultString appendFormat:@"%@",key];

    }

    self.result=[NSString stringWithFormat:@"%@%@",self.textView.text,resultString ];

    NSString *resultFromJson=[ISRDataHelper stringFromJson:resultString];

    self.textView.text=[NSString stringWithFormat:@"%@%@",_textView.text,resultFro mJson];

    if (isLast) {

        NSLog(@"听说结果(json:%@测试",self.result);

    }

    NSLog(@"_result=%@",_result);

    NSLog(@"resultFromJson=%@",resultFromJson);

    NSLog(@"isLast=%d,_textView.text=%@",isLast,_textView.text);

    

}


/**

  听写取消回调

  ****/

- (void) onCancel

{

    NSLog(@"识别取消");

}



对比百度语音识别的SDK,科大讯飞的SDK更新比较快速,百度语音识别的SDK最新版本还是15年更新的, 并且给的实例Demo用的全是自动内存管理,文档上的集成方式也不一样,当时集成百度语音识别时候也出现 各种问题,相对还是科大讯飞的使用起来简单粗暴,官方下载的Demo看起来也比较有条理。不过百度语音识 别可以在边说话边识别出结果,而科大讯飞的必须要说完之后才能把结果全部返回。


版权声明:本文为博主原创文章,未经博主允许不得转载。

IOS开发之语音合成(科大讯飞)详解

转自:http://www.daxueit.com/article/4422.html 如何实现语音合成呢? 1、注册讯飞账号,申请APPID(注意选择IOS平台) 2、加载所需...
  • gf771115
  • gf771115
  • 2016年05月31日 11:04
  • 4008

iOS开发-讯飞语音识别SDK简单实用

在记录事件的时候,用户在不方便手写的时候,我们可以利用语音录入,转成文字的形式记录时间,是不是既方便又只能,现在做语音识别的有一些不错的开放平台供我们使用,科大讯飞平台,百度语音平台。科大讯飞的优势在...
  • a910577347
  • a910577347
  • 2016年11月25日 16:18
  • 1903

iOS 语音识别转文字

语音转成文字科大讯飞语音识别技术,支持英文,中文,方言等。识别效率十分迅速,而且准确率官网能够达到97%以上。 在使用过程中,也确实发现,可以商用,或者利用其API进行开发。使用场景,包含英语学习,...
  • Xoxo_x
  • Xoxo_x
  • 2017年02月22日 23:48
  • 616

科大讯飞识别音频流中的文字

  • 2017年01月05日 14:18
  • 18.23MB
  • 下载

科大讯飞语音识别(获取音频流文件中文字)

使用讯飞sdk获取视频文件中的音频文字
  • changerzhuo_319
  • changerzhuo_319
  • 2017年01月05日 13:23
  • 7821

音频识别,获取文字

音频识别,获取文字本菜鸟这学期有个自主学习英语课,课上有个听力部分。考试主要是其中的Task 3 部分。老师让我们重点听那部分。可是给的音频是以Unit 为单元的。Unit分为3个Part, 每个Pa...
  • u010278579
  • u010278579
  • 2016年03月20日 20:06
  • 1753

C++语音识别接口快速入门(Microsoft Speech SDK)

C++语音识别接口快速入门(Microsoft Speech SDK)最近毕业设计用到了微软的C++语音识别接口,查找了很多资料,也碰到了很多问题,走了很多弯路。现在把我自己的经验写下来,一是提升自己...
  • MichaelLiang12
  • MichaelLiang12
  • 2016年05月04日 19:38
  • 10830

Android开发学习之使用百度语音识别SDK实现语音识别(上)

作为移动互联网杀手级的交互方式,语音识别从问世以来就一直备受人们的关注,从IOS的Siri到国内的讯飞语音,语音识别技术在移动开发领域是最为充满前景和希望的技术。Android作为一个移动操作系统,其...
  • qinyuanpei
  • qinyuanpei
  • 2014年01月05日 09:26
  • 11982

百度语音识别SDK使用方法

百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的使用方法。      在线SDK是以JAR包和动态链接库形式发布和使用,可以从百度开放云平台网站中下载SDK及使用说明文...
  • u011871750
  • u011871750
  • 2014年06月03日 10:07
  • 2174

百度语音识别开放平台SDK使用方法

本文介绍了百度语音识别sdk简单的集成方法
  • zpf8861
  • zpf8861
  • 2014年06月12日 11:25
  • 13114
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS语音识别(科大讯飞SDK)
举报原因:
原因补充:

(最多只允许输入30个字)