语音识别实践 之 科大讯飞

参考:http://www.xfyun.cn/doccenter/iOS

一、环境配置

1. 下载SDK,省略

2. 添加SDK,general->linked frameworks and libraries

ibz.dylib,CoreTelephoney.framework不要遗漏。

注:如果使用的是离线识别,还需要增加libc++.dylib。

 

3. 配置SDK路径: Build Setting->Search paths->Framework Search Paths

$(inherited)

$(PROJECT_DIR)/testXunfeiCloud/lib

 注意下面的那个路径是下载的framework的路径

 

4. 真机bitcode的错误

需要在Build Setting -> build option -> enable bitcode 中设置

 

5. 集成帮助文档到 xcode

下面两种方式都没有成功

5.1 Finder->应用程序->Xcode->显示包内容->Content->Developer->Documentation->DocSets

5.2. 终端中,切换到下载的库中的doc目录

运行命令

cp -R -f -a com.iflytek.IFlyMSC.docset  ~/Library/Developer/Shared/Documentation/DocSets/ 

二、代码开发

1. 导入头文件

//带界面的语音识别控件
#import "iflyMSC/IFlyRecognizerViewDelegate.h"
#import "iflyMSC/IFlyRecognizerView.h"

//不带界面的语音识别控件
#import "iflyMSC/IFlySpeechRecognizerDelegate.h"
#import "iflyMSC/IFlySpeechRecognizer.h"

//其它
#import "iflyMSC/IFlySpeechUtility.h"
#import "iflyMSC/IFlySpeechConstant.h"

 

 

 2. 初始化

必须在初始化后才可以使用语音服务,初始化是异步过程,推荐在程序入口处调用。

 

//将“12345678”替换成您申请的APPID。    
NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",@"12345678"];    
[IFlySpeechUtility createUtility:initString];  

 

声明对象和代理

@interface ViewController ()<
IFlyRecognizerViewDelegate
>
{
    IFlyRecognizerView      *_iflyRecognizerView;
}

 

启动

- (void) startRecognizer {
    
    NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",@""];
    [IFlySpeechUtility createUtility:initString];
    
    if (!_iflyRecognizerView) {
        
        //初始化语音识别控件
        _iflyRecognizerView = [[IFlyRecognizerView alloc] initWithCenter:self.view.center];
        
        [self.view addSubview:_iflyRecognizerView];
        _iflyRecognizerView.delegate = self;
        [_iflyRecognizerView setParameter: @"iat" forKey: [IFlySpeechConstant IFLY_DOMAIN]];
        //asr_audio_path保存录音文件名,如不再需要,设置value为nil表示取消,默认目录是documents
        [_iflyRecognizerView setParameter:nil forKey:[IFlySpeechConstant ASR_AUDIO_PATH]];
    }

    
    
    //启动识别服务--每次识别完成,或者隔一段时间,就要重启启动一次
    [_iflyRecognizerView start];
}




/*识别结果返回代理
 @param resultArray 识别结果
 @ param isLast 表示是否最后一次结果
 */
- (void)onResult: (NSArray *)resultArray isLast:(BOOL) isLast
{
    
    NSLog(@"%@",resultArray);
    
}
/*识别会话错误返回代理
 @ param  error 错误码
 */
- (void)onError: (IFlySpeechError *) error
{
    
    //NSLog(@"%@",error);
    
    [self startRecognizer];
}

 

不带界面

- (void) startRecognizerNoView {

    if (!m_flySpeechRecognizer) {
        
        NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",@""];
        [IFlySpeechUtility createUtility:initString];
        
        //初始化语音识别控件
        m_flySpeechRecognizer = [IFlySpeechRecognizer sharedInstance] ;
        
        m_flySpeechRecognizer.delegate = self;
        [m_flySpeechRecognizer setParameter: @"iat" forKey: [IFlySpeechConstant IFLY_DOMAIN]];
        
        //[m_flySpeechRecognizer setParameter: @"iat" forKey: [IFlySpeechConstant LANGUAGE]];
        
        
        [m_flySpeechRecognizer setParameter: @"plain" forKey: [IFlySpeechConstant RESULT_TYPE]];
        
        //asr_audio_path保存录音文件名,如不再需要,设置value为nil表示取消,默认目录是documents
        [m_flySpeechRecognizer setParameter:nil forKey:[IFlySpeechConstant ASR_AUDIO_PATH]];
    }
    
    
    
    //启动识别服务--每次识别完成,或者隔一段时间,就要重启启动一次
    [m_flySpeechRecognizer startListening];

}

 

语音识别是按照一段语音文件来识别的,不是一直不停地识别。所以就有个开始和结束。

posted on 2016-04-27 10:23  大木哥  阅读(1214)  评论(0编辑  收藏  举报

导航