文档首页> 语音交互服务 SIS> SDK参考> IOS SDK> 使用实时语音识别
更新时间:2022-04-07 GMT+08:00
分享

使用实时语音识别

前提条件

  • 确保已经按照配置好IOS开发环境。
  • 确保已存在待识别的音频文件。如果需要请在下载的SDK压缩包中获取示例音频。

初始化Client

初始化RasrClient,其参数包括SisAuthInfo、SisConfig、代理对象delegate代理对象需要用户自定义实现回调逻辑,SisAuthInfo和SisConfig 详见表 SisAuthInfo数据结构表 SisConfig数据结构

表1 SisAuthInfo数据结构

参数名称

是否必选

参数类型

描述

ak

NSString

用户的ak,可参考AK/SK认证。

sk

NSString

用户的sk,可参考AK/SK认证。

endpoint

NSString

终端节点如sis-ext.cn-north-4.myhuaweicloud.com。

projectId

NSString

项目ID,同region一一对应,参考获取项目。

表2 SisConfig 数据结构

参数名称

是否必选

参数类型

描述

connectionTimeout

NSInteger

连接超时,默认10s,单位s。

readTimeout

NSInteger

连接超时,默认10s,单位s。

请求参数

请求类为RasrRequest,详见表 RasrRequest数据结构

表3 RasrRequest数据结构

参数名称

是否必选

参数类型

描述

audioFormat

NSString

音频格式,支持pcm,alaw,ulaw等,如pcm8k16bit,参见《API参考》中开始识别章节。

property

NSString

属性字符串,language_sampleRate_domain,如chinese_8k_common,参见《API参考》中开始识别章节。

punc

NSString

表示是否在识别结果中添加标点,取值为yes 、no,默认no。

digitNorm

NSString

表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。

vadHead

NSInteger

头部最大静音时间,[0, 60000],默认10000ms。

vadTail

NSInteger

尾部最大静音时间,[0, 3000],默认500ms。

maxSeconds

NSInteger

音频最长持续时间, [0, 60],默认30s。

intermediateResult

NSString

是否显示中间结果,yes 或 no,默认no。

vocabularyId

NSString

热词表id,若没有则不填。

needWordInfo

NSString

表示是否在识别结果中输出分词结果信息,取值为“yes”和“no”,默认为“no”。

响应参数

响应参数统一为字典NSDictionary,具体参数如下表。调用失败处理方法请参见错误码

表4 状态返回结果数据

参数名称

是否必选

参数类型

描述

state

NSString

识别状态,包括start、end、fail。

trace_id

NSString

用于日志问题追溯。

description

NSString

状态描述。

表5 响应返回结果数据

参数名称

参数类型

描述

resp_type

NSString

识别状态,包括start、end、fail。

trace_id

NSString

用于日志问题追溯。

segments

NSSArray

多句结果,请参考表 segment 数据结构

表6 segment 数据结构

参数名称

参数类型

描述

start_time

NSInteger

一句的起始时间戳,单位为ms。

end_time

NSInteger

一句的结束时间戳,单位为ms。

is_final

BOOL

true表示是最终结果, false表示为中间临时结果。

result

NSDictionary

调用成功表示识别结果,调用失败时无此字段。请参考表 result数据结构

表7 result数据结构

参数名称

参数类型

描述

text

NSString

识别结果。

score

float

识别结果的置信度,取值范围:0~1。此值仅会在最终结果时被赋值,在中间结果时统一置为“0.0”。

说明:目前置信度作用不是太大,请勿过多依赖此值。

word_info

NSArray

分词输出列表。参考表 word_info数据结构

表8 word_info数据结构

参数名称

参数类型

描述

start_time

NSInteger

起始时间。

end_time

NSInteger

结束时间。

word

NSString

分词。

示例代码

- (void)viewDidLoad {
    [super viewDidLoad];
                //授权信息
    SisAuthInfo *authInfo = [[SisAuthInfo alloc] initWithAk:kAppKey sk:kAppSecret         endpoint:kEndpoint projectId:kProjectId];   
 //时间设置
    SisConfig *config = [[SisConfig alloc] initDefault];
    //请求参数对象
    RasrRequest *request = [[RasrRequest alloc] init];
    //设置音频模式
    request.audioFormat = @"pcm8k16bit";
    //设置特征值
    request.property = @"chinese_8k_common";
    //设置是否添加标点符号,yes 或 no,默认"no"
    request.punc = @"yes";
    //设置是否将音频中数字转写为阿拉伯数字,yes or no,默认yes
    request.digitNorm = @"no";
    //初始化RasrClient
    self.client = [[RasrClient alloc] initWithAuthInfo:authInfo config:config delegate:self];
    // 选择连接模式,目前实时语音识别提供三种接口,流式一句话、实时语音识别连续模式、实时语音识别单句模式
    // 选择1 流式一句话连接
    [self.client shortStreamConnect:request];
    // 选择2 实时语音识别单句模式
//    [self.client sentenceStreamConnect:request];
    // 选择3 实时语音识别连续模式
//    [self.client continueStreamConnect:request];
    
//    //获取要发送的语音数据
//    NSString *path = [[NSBundle mainBundle] pathForResource:@"8k16bit" ofType:@"pcm"];
//    NSData *data = [NSData dataWithContentsOfFile:path];
//    //异步任务
//    dispatch_async(dispatch_get_global_queue(0, 0), ^{
//        // 选择连接模式,目前实时语音识别提供三种接口,流式一句话、实时语音识别连续模式、实时语音识别单句模式
//        // 选择1 流式一句话连接
//        [self.client shortStreamConnect:request];
//        //发送开始请求
//        [self.client sendStart];
//        //发送音频数据
//        // 可以自己控制发送速率.byteLen为每次发送大小,sleepTime为每次发送后睡眠时间(s),一些非持续获取音频场景不需要睡眠,可设置为0.
//        [self.client sendAudioData:data byteLen:2000 sleepTime:0.1];
//        //发送结束请求
//        [self.client sendEnd];
//
//        //关闭客户端。发送完毕后,此步一定要实施,否则服务端因为20s没有接受任何消息而报异常。
//        [self.client closeConnect];
//    });
}
 
#pragma mark - RasrClientDelegate
-(void)rasrClientConnectStatus:(RCConnectStatus)status{
    NSLog(@"status = %ld",status);
    if(status == RCConnectStatus_Connected){
        //获取要发送的语音数据
        NSString *path = [[NSBundle mainBundle] pathForResource:@"8k16bit" ofType:@"pcm"];
        NSData *data = [NSData dataWithContentsOfFile:path];
        //异步任务
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            //发送开始请求
            [self.client sendStart];
            //发送音频数据
            // 可以自己控制发送速率.byteLen为每次发送大小,sleepTime为每次发送后睡眠时间(s),一些非持续获取音频场景不需要睡眠,可设置为0.
            [self.client sendAudioData:data byteLen:2000 sleepTime:0.1];
            //对于较短音频也可直接发送data
//            [self.client sendAudioData:data];
            //发送结束请求
            [self.client sendEnd];
            
            //关闭客户端。发送完毕后,此步一定要实施,否则服务端因为20s没有接受任何消息而报异常。
            [self.client closeConnect];
        });
    }
}
 
-(void)rasrClientReceiveMessage:(id)data{
    NSDictionary *dic;
    if ([data isKindOfClass:[NSString class]]){
        dic = [self dictionaryWithJsonString:data];
    }else if([data isKindOfClass:[NSDictionary class]]){
        dic = data;
    }else{
        NSLog(@"data = %@",data);
    }
    NSString *type = [dic valueForKey:@"resp_type"];
    if([type isEqualToString:@"RESULT"]){
        NSLog(@"响应内容: %@",[self convertToJsonString:dic]);
    }else{
        NSLog(@"其他内容: %@",data);
    }
}
分享:

    相关文档

    相关产品

close