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开发(第三方使用)——讯飞语音SDK接入

去到讯飞开放平台创建应用并添加服务 下载SDK,下载时需要选上项目的,必须选上相应的项目,不能用项目1下载的SDK和项目2的app ID结合使用(估计是讯飞绑定了,所以步骤1和步骤2也不能颠倒) 拷贝...

iOS开发- ShareSDK分享和第三方登录

目录(?)[-] 1 获取ShareSDK的AppKey2 下载SDK3 快速集成 第一步使快速工具进行集成查看视频教程 Windows下LinuxMac OS下 第二步配置And...

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

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

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

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

iOS个人整理43-第三方开发平台的使用--环信、ShareSDK和科大讯飞

很多时候我们需要使用一些第三方平台提供的功能,当然自己也可以写,如果够牛逼。一、环信即时通信的第三方有很多,融云、Leancloud等,都可以帮助我们快速实现扣扣微信这样的即时聊天功能,以及附带的登录...

iOS——科大讯飞之语音识别

现在的 APP 的语音交互越来越热,楼主研究了一下,发个 Demo.本人小白,有什么不对的地方请大神指出。 不多说,上代码! 详细步骤: 一、首先到科大讯飞官网注册账号(点击打开链接),创建应用...

使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程

使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程 转载地址:http://swift.gg/2016/06/28/adding-siri-to-ios-10-apps...

科大讯飞语音iOS版

转自:http://www.devstore.cn/evaluation/testInfo/107-127.html 集成过程 客户端集成 如何快速集成科大讯飞语音云: ...

ios语音识别实现——科大讯飞的使用

ios语音识别实现——科大讯飞的使用这里主要讲的是代码方面的实现首先在AppDelegate.m里面配置 - (BOOL)application:(UIApplication *)applicatio...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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