本文主要介绍了 iOS MPIDRSSDK 中 AI 检测相关的 API。
初始化 MPIDRSSDK
+ (void)initWithRecordType:(IDRSRecordType)recordType
userId:(NSString *)userId
appId:(NSString *)appId
packageName:(NSString *)packageName
AK:(NSString*)ak
SK:(NSString*)sk
model:(IDRSModelType)modelType
addDelegate:(id<IDRSDelegate>)delegate
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure;
*退出时请使用 releaseResources方法销毁SDK,否则会导致计费异常(会多扣钱哟~~)
请求参数
参数 | 类型 | 说明 | 是否必须 |
recordType | IDRSRecordType |
| 是 |
userId | NSString | 用户身份的唯一标识,推荐由数字或字母组成 | 是 |
appId | NSString | 应用 ID,从控制台中的 应用管理 处获取 | 是 |
packageName | NSString | SDK 包名,从控制台中的 应用管理 处获取 | 是 |
ak | NSString | AccessKey,从控制台中的 用户管理 处获取 | 是 |
sk | NSString | SecretKey,从控制台中的 用户管理 处获取 | 是 |
modelType | IDRSModelType | 需要初始化的功能。 如果本地无对应的资源则会先下载资源。 | 是 |
返回值
属性 | 类型 | 说明 |
success | MPIDRSSDK | MPIDRSSDK 实例 |
failure | NSError | 报错信息 |
代码示例
NSString * userId = [[DemoSetting sharedInstance] userId];
IDRSModelType type = [DemoSetting getSettingConfig];
[MPIDRSSDK initWithRecordType:IDRSRecordLocal userId:userId appId:AppId packageName:PackageName AK:Ak SK:Sk model:type addDelegate:self success:^(id responseObject) { self->_idrs = responseObject;
self->_idrs.nui_tts_delegate = self;
} failure:^(NSError *error)
[self showToastWith:@"Code: 1 msg: sdk init error" duration:2];
NSLog(@"%@",error);
}];
修改录制类型
- (void)setRecordType:(IDRSRecordType)recordType;//实现初始化后更改录制类型
请求参数
参数 | 类型 | 说明 | 是否必须 |
recordType | IDRSRecordType | 枚举值如下:
| 是 |
返回值
无
代码示例
[self.idrs setRecordType:IDRSRecordLocal];
设置人脸检测参数
- (void)setFaceDetectParameter:(float)value forKey:(idrs_face_param_type)key;
请求参数
参数 | 类型 | 说明 | 是否必须 |
value | float | 详见代码中的枚举(阈值) | 是 |
key | idrs_face_param_type | 详见代码中的枚举 | 是 |
返回值
无
代码示例
[self.idrs setFaceDetectParameter:480 forKey:IDRS_FACE_PARAM_DETECT_IMG_SIZE];
检测人脸特征值
- (NSArray<FaceDetectionOutput *> *)detectFace:(nonnull IDRSFaceDetectParam *)faceDetectParam;
请求参数
参数 | 类型 | 说明 | 是否必须 |
dataType | IDRSFaceDetectInputType | 详见代码中的枚举 | 是 |
inputAngle | float | 检测角度,默认为 0 | 否 |
outputAngle | float | 结果输出角度,默认为 0 | 否 |
output_flip_axis | float | 镜像方式,默认为 0 | 否 |
buffer | CVPixelBufferRef | 视频流信息 | 否 |
format | int | 视频格式,默认为 0 | 否 |
image | UIImage | 图片信息 | 否 |
data | char* | Data 数据信息 | 否 |
width | float | Data 宽度 | 否 |
height | float | Data 高度 | 否 |
supportFaceLiveness | bool | 是否返回活体信息 | 否 |
supportFaceRecognition | bool | 是否返回人脸特征值 | 否 |
faceNetType | int | 检测实例选择 | 否 |
返回值
NSArray<FaceDetectionOutput *>
属性 | 类型 | 说明 |
rect | CGRect | 面部表情区域 |
faceId | NSInteger | 每个检测到的人脸有唯一的faceID |
keyPoints | CGPoint | 人脸 106 关键点的数组 |
score | CGFloat | 人脸置信度 |
attributes | NSDictionary | 人脸属性 |
feature | NSArray<NSNumber*> | 人脸特征值 |
livenessType | int | 活体结果 |
livenessScore | float | 活体结果置信度 |
label | NSString | 人脸名称/检测出结果可放入此处 |
faceAction | int | 人脸动作,例如: faceAction == 32(张嘴动作) |
pitch | CGFloat | 俯仰角 |
代码示例
UIImage *decodedImage = [UIImage imageWithData: @"人脸照片.png"];
IDRSFaceDetectParam *dete = [[IDRSFaceDetectParam alloc]init];
dete.dataType = IDRSFaceDetectInputTypeImage;//使用图片检测
dete.image = decodedImage;
dete.inputAngle = 0;
dete.outputAngle = 90;
dete.supportFaceLiveness = true;
dete.supportFaceRecognition = true;
NSArray<FaceDetectionOutput *> *imageface = [self.idrs detectFace:dete];
人照比对
- (float)faceRecognitionSimilarity:(nonnull NSArray<NSNumber*>*)faceFea1
feature2:(nonnull NSArray<NSNumber*>*)faceFea2;
请求参数
参数 | 类型 | 说明 | 是否必须 |
faceFea1 | NSArray<NSNumber*> | faceFea1 的特征值 | 是 |
faceFea2 | NSArray<NSNumber*> | faceFea2 的特征值 | 是 |
返回值
类型 | 说明 |
float | 两张人脸的对比分数 |
代码示例
float score1 = [self.idrs faceRecognitionSimilarity:face.feature feature2:weakSelf.face1Feature];
用图片引擎做人脸追踪
- (void)faceTrackFromImage:(nonnull IDRSFaceDetectParam *)faceDetectParam
faceDetectionCallback:(void (^)(NSError *error, NSArray<FaceDetectionOutput*> *faces))block;
请求参数
参数 | 类型 | 说明 | 是否必须 |
dataType | IDRSFaceDetectInputType | 详见代码中的枚举 | 是 |
inputAngle | float | 检测角度,默认为 0 | 否 |
outputAngle | float | 结果输出角度,默认为 0 | 否 |
output_flip_axis | float | 镜像方式,默认为 0 | 否 |
buffer | CVPixelBufferRef | 视频流信息 | 否 |
format | int | 视频格式,默认为 0 | 否 |
image | UIImage | 图片信息 | 否 |
data | char* | Data 数据信息 | 否 |
width | float | Data 宽度 | 否 |
height | float | Data 高度 | 否 |
supportFaceLiveness | bool | 是否返回活体信息 | 否 |
supportFaceRecognition | bool | 是否返回人脸特征值 | 否 |
faceNetType | int | 检测实例选择 | 否 |
返回值
NSArray<FaceDetectionOutput *>
属性 | 类型 | 说明 |
rect | CGRect | 面部表情区域 |
faceId | NSInteger | 每个检测到的人脸具有唯一的 faceID |
keyPoints | CGPoint | 人脸 106 关键点的数组 |
score | CGFloat | 人脸置信度 |
attributes | NSDictionary | 人脸属性 |
feature | NSArray<NSNumber*> | 人脸特征值 |
livenessType | int | 活体结果 |
livenessScore | float | 活体结果置信度 |
label | NSString | 此处可能是人脸名称或检测出的结果 |
faceAction | int | 人脸动作,例如: faceAction == 32(张嘴动作) |
pitch | CGFloat | 俯仰角 |
代码示例
UIImage * image = [self getImageFromCameraVideo:sampleBuffer];
IDRSFaceDetectParam *dete = [[IDRSFaceDetectParam alloc]init];
dete.dataType = IDRSFaceDetectInputTypeImage;//使用图片检测
dete.image = image;
dete.inputAngle = 0;
dete.outputAngle = 90;
dete.supportFaceLiveness = true;
dete.supportFaceRecognition = true;
[self.idrs faceTrackFromVideo:detectParam faceDetectionCallback:^(NSError *error, NSArray<FaceDetectionOutput*> *faces) {
if (faces.count > 0) {
//检测到人脸
}
}];
用视频引擎中人脸追踪
- (void)faceTrackFromVideo:(nonnull IDRSFaceDetectParam *)faceDetectParam
faceDetectionCallback:(void (^)(NSError *error, NSArray<FaceDetectionOutput*> *faces))faceDetectionCallbackBlock;
请求参数
参数 | 类型 | 说明 | 是否必须 |
dataType | IDRSFaceDetectInputType | 详见代码中的枚举 | 是 |
inputAngle | float | 检测角度,默认为 0 | 否 |
outputAngle | float | 结果输出角度,默认为 0 | 否 |
output_flip_axis | float | 镜像方式,默认为 0 | 否 |
buffer | CVPixelBufferRef | 视频流信息 | 否 |
format | int | 视频格式,默认为 0 | 否 |
image | UIImage | 图片信息 | 否 |
data | char* | Data 数据信息 | 否 |
width | float | Data 宽度 | 否 |
height | float | Data 高度 | 否 |
supportFaceLiveness | bool | 是否返回活体信息 | 否 |
supportFaceRecognition | bool | 是否返回人脸特征值 | 否 |
faceNetType | int | 检测实例选择 | 否 |
返回参数
NSArray<FaceDetectionOutput *>
属性 | 类型 | 说明 |
rect | CGRect | 面部表情区域 |
faceId | NSInteger | 每个检测到的人脸具有唯一的 faceID |
keyPoints | CGPoint | 人脸 106 关键点的数组 |
score | CGFloat | 人脸置信度 |
attributes | NSDictionary | 人脸属性 |
feature | NSArray<NSNumber*> | 人脸特征值 |
livenessType | int | 活体结果 |
livenessScore | float | 活体结果置信度 |
label | NSString | 此处可能是人脸名称或检测结果 |
faceAction | int | 人脸动作,例如: faceAction == 32(张嘴动作) |
pitch | CGFloat | 俯仰角 |
代码示例
CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
IDRSFaceDetectParam *detectParam = [[IDRSFaceDetectParam alloc]init];
detectParam.dataType = IDRSFaceDetectInputTypePixelBuffer;
detectParam.buffer = pixelBuffer;
detectParam.inputAngle = inAngle;
detectParam.outputAngle = outAngle;
detectParam.supportFaceLiveness = YES;
detectParam.supportFaceRecognition = true;
[self.idrs faceTrackFromVideo:detectParam faceDetectionCallback:^(NSError *error, NSArray<FaceDetectionOutput *> *faces) {
if (faces.count > 0) {
//检测到人脸
}
}];
使用视频引擎中 RTC_远端窗口——人脸追踪
- (NSArray<FaceDetectionOutput *> *)detectFace:(nonnull IDRSFaceDetectParam *)faceDetectParam;
请求参数
参数 | 类型 | 说明 | 是否必须 |
dataType | IDRSFaceDetectInputType | 详见代码中的枚举 | 是 |
inputAngle | float | 检测角度,默认为 0 | 否 |
outputAngle | float | 结果输出角度,默认为 0 | 否 |
output_flip_axis | float | 镜像方式,默认为 0 | 否 |
buffer | CVPixelBufferRef | 视频流信息 | 否 |
format | int | 视频格式,默认为 0 | 否 |
image | UIImage | 图片信息 | 否 |
data | char* | Data 数据信息 | 否 |
width | float | Data 宽度 | 否 |
height | float | Data 高度 | 否 |
supportFaceLiveness | bool | 是否返回活体信息 | 否 |
supportFaceRecognition | bool | 是否返回人脸特征值 | 否 |
faceNetType | int | 检测实例选择 | 否 |
返回参数
NSArray<FaceDetectionOutput *>
属性 | 类型 | 说明 |
rect | CGRect | 面部表情区域 |
faceId | NSInteger | 每个检测到的人脸有唯一的 faceID |
keyPoints | CGPoint | 人脸 106 关键点的数组 |
score | CGFloat | 人脸置信度 |
attributes | NSDictionary | 人脸属性 |
feature | NSArray<NSNumber*> | 人脸特征值 |
livenessType | int | 活体结果 |
livenessScore | float | 活体结果置信度 |
label | NSString | 人脸名称或检测结果 |
faceAction | int | 人脸动作,例如: faceAction == 32(张嘴动作) |
pitch | CGFloat | 俯仰角 |
代码示例
//用data检测
uint8_t *data = [IDRSUtils convert420PixelBufferToRawData:newBuffer];
float width = CVPixelBufferGetWidth(newBuffer);
float height = CVPixelBufferGetHeight(newBuffer);
IDRSFaceDetectParam *detectParam = [[IDRSFaceDetectParam alloc]init];
detectParam.dataType = IDRSFaceDetectInputTypeChar;
detectParam.data = data;
detectParam.width = width;
detectParam.height = height;
detectParam.format = 0;
detectParam.inputAngle = 0;
detectParam.outputAngle = 0;
detectParam.faceNetType = 1;
detectParam.supportFaceRecognition = true;
detectParam.supportFaceLiveness = true;
[self.idrs faceTrackFromRemoteVideo:detectParam faceDetectionCallback:^(NSError *error, NSArray<FaceDetectionOutput *> *faces) {
if (faces.count > 0) {
//检测到人脸
}
}];
free(data);
设置手势检测参数
-(void)setHandDetectConfig:(nonnull IDRSHandDetectionConfig *)handDetectConfig;
请求参数
参数 | 类型 | 说明 | 是否必须 |
isFaceDetect | Boolean | 是否开启动作主体识别 | 否 |
imgSize | NSInteger | 手部检测输入的图像大小 | 否 |
classifyThreshold | float | 手势识别阈值 | 否 |
phoneActionIOU | float | 手持手机 IOU 阈值 | 否 |
phoneActionTime | float | 手持手机时间阈值 | 否 |
phoneActionSign | float | 手持手机签字阈值 | 否 |
phoneActionScroll | float | 手持手机翻页阈值 | 否 |
interlacingBody | float | 隔帧检测-火柴人的坐标 | 否 |
返回值
无
代码示例
IDRSHandDetectionConfig *handDetectConfig = [[IDRSHandDetectionConfig alloc] init];
handDetectConfig.imgSize = 480;
handDetectConfig.isFaceDetect = true;
handDetectConfig.classifyThreshold = 0.5;
handDetectConfig.phoneActionIOU = 0.0;
handDetectConfig.phoneActionTime = 0.0;
handDetectConfig.phoneActionSign = 0.03;//签字阈值,越小识别的越快(误差越大)
handDetectConfig.phoneActionScroll = 0.10;
handDetectConfig.interlacingBody = 5;
[self.idrs setHandDetectConfig:handDetectConfig];
检测动态手势
- (NSArray<HandDetectionOutput *> *)detectHandGesture:(nonnull IDRSHandDetectParam *)handParam;
请求参数
参数 | 类型 | 说明 | 是否必须 |
dataType | IDRSHandInputType | 详见代码中的枚举 | 是 |
buffer | CVImageBufferRef | 视频流数据 | 是 |
outAngle | float | 结果输出角度,默认为 0 | 否 |
返回值
NSArray<HandDetectionOutput *>
属性 | 类型 | 说明 |
rect | CGRect | 手区域 |
face_rect | CGRect | 主体人脸区域 |
body_key_points | CGPoint | 手属于的人体关键点 |
body_key_points_score | CGFloat | 手属于的人体关键点的置信度 |
left_or_right | int | 左手还是右手 |
handId | int | 每个检测到的手拥有唯一的 handID |
phone_touched | Boolean | 是否手持手机 |
phone_touched_score | CGFloat | 手持手机置信度 |
hand_phone_action | int | 动态手势结果 |
hand_action_type | int | 动态手势还是静态手势 |
pitchhand_static_action | int | 静态手势结果 |
hand_static_action_score | float | 静态手势分数 |
代码示例
IDRSHandDetectParam *handParam = [[IDRSHandDetectParam alloc]init];
handParam.dataType = IDRSHandInputTypeRGBA;
handParam.buffer = newBuffer;
handParam.outAngle = 0;
NSArray<HandDetectionOutput *> *handResults = [self.idrs detectHandGesture:handParam];
if(handResults.count > 0) {
// 判断签字
if (handResults[0].phone_touched_score>0) {
//手写框
dispatch_async(dispatch_get_main_queue(), ^{
weakSelf.drawView.handDetectView.detectResult = handResults;
if(handResults[0].hand_phone_action == 1 || handResults[0].hand_phone_action == 2) {
self.resultLabel.text = @"签字成功";
[self didsendMessage:@"签字成功" isOn:true type:0];
}
});
}
}
检测静态手势
- (NSArray<HandDetectionOutput *> *)detectHandStaticGesture:(nonnull IDRSHandDetectParam *)handParam;
请求参数
参数 | 类型 | 类型 | 是否必须 |
dataType | IDRSHandInputType | 详见代码中的枚举 | 是 |
buffer | CVImageBufferRef | 视频流数据 | 是 |
outAngle | float | 结果输出角度,默认为 0 | 否 |
返回值
NSArray<HandDetectionOutput *>
属性 | 类型 | 说明 |
rect | CGRect | 手区域 |
face_rect | CGRect | 主体人脸区域 |
body_key_points | CGPoint | 手属于的人体关键点 |
body_key_points_score | CGFloat | 手属于的人体关键点的置信度 |
left_or_right | int | 左手还是右手 |
handId | int | 每个检测到的手拥有唯一的handID |
phone_touched | Boolean | 是否手持手机 |
phone_touched_score | CGFloat | 手持手机置信度 |
hand_phone_action | int | 动态手势结果 |
hand_action_type | int | 动态手势还是静态手势 |
pitchhand_static_action | int | 静态手势结果 |
hand_static_action_score | float | 静态手势分数 |
代码示例
IDRSHandDetectParam *handParam = [[IDRSHandDetectParam alloc]init];
handParam.dataType = IDRSHandInputTypeRGBA;
handParam.buffer = newBuffer;
handParam.outAngle = 0;
NSArray<HandDetectionOutput *> *handResults = [self.idrs detectHandStaticGesture:handParam];
dispatch_async(dispatch_get_main_queue(), ^{
if (handResults.count > 0) {
weakSelf.drawView.handDetectView.detectResult = handResults;
HandDetectionOutput *handResult = handResults[0];
if (handResult.hand_action_type == 0 && handResult.hand_static_action > 0) {
NSString *result = [self handStaticActionTypeToText:handResult.hand_static_action];
self.resultLabel.text = result;
[self didsendMessage:result isOn:true type:0];
}
}
});
签名类型检测
-(NSArray <IDRSSignConfidenceCheck *>*)checkSignClassifyWithCameraBuffer:(CVPixelBufferRef)cameraFrame AndROI:(NSArray<NSNumber*>*)roikey;
请求参数
参数 | 类型 | 说明 | 是否必须 |
cameraFrame | CVPixelBufferRef | 相机流 | 是 |
roikey | NSArray<NSNumber*> | ROI 数组 | 是 |
返回值
NSArray <IDRSSignConfidenceCheck *>
属性 | 类型 | 说明 |
label | NSString | 即签名类型,包括 hand、print 和 other |
confidence | float | hand、print 和 other 对应的分数 说明 签名检测结果取分数最高的类型。 |
代码示例
CVPixelBufferRef newBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) ;
NSArray<NSNumber*> *kXMediaOptionsROIKey = @[@(0.2),@(0.2),@(0.6),@(0.6)];
NSArray<IDRSSignConfidenceCheck *>*sings = [self.idrs checkSignClassifyWithCameraBuffer:newBuffer AndROI:kXMediaOptionsROIKey];
dispatch_async(dispatch_get_main_queue(), ^{
NSString*string = @"";
float max = 0.0;
for (IDRSSignConfidenceCheck* Confidence in sings) {
if (Confidence.confidence > max) {
string = Confidence.label;
max = Confidence.confidence;
}
}
if ([string isEqual:@"hand"] && max > 0.95) {
self.resultLabel.text = [NSString stringWithFormat:@"手写体"];
[self didsendMessage:@"检测到手写体" isOn:true type:0];
}
});
签名类型检测
-(NSArray <IDRSSignConfidenceCheck *>*)checkSignClassifyWithImage:(UIImage*)image AndROI:(NSArray<NSNumber*>*)roikey;
请求参数
参数 | 类型 | 说明 | 是否必须 |
image | UIIImage | 图片 | 是 |
roikey | NSArray<NSNumber*> | ROI 数组 | 是 |
返回值
NSArray <IDRSSignConfidenceCheck *>
属性 | 类型 | 说明 |
label | NSString | 即签名类型,包括 hand、print 和 other |
confidence | float | hand、print 和 other 对应的分数 说明 签名检测结果取分数最高的类型。 |
代码示例
CVPixelBufferRef newBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) ;
UIImage * image = [self.idrs getImageFromRPVideo:newBuffer];
NSArray<NSNumber*> *kXMediaOptionsROIKey = @[@(0.2),@(0.2),@(0.6),@(0.6)];
NSArray<IDRSSignConfidenceCheck *>*sings = [self.idrs checkSignClassifyWithImage:image AndROI:kXMediaOptionsROIKey];
dispatch_async(dispatch_get_main_queue(), ^{
NSString*string = @"";
float max = 0.0;
for (IDRSSignConfidenceCheck* Confidence in sings) {
if (Confidence.confidence > max) {
string = Confidence.label;
max = Confidence.confidence;
}
}
if ([string isEqual:@"hand"] && max > 0.95) {
self.resultLabel.text = [NSString stringWithFormat:@"手写体"];
[self didsendMessage:@"检测到手写体" isOn:true type:0];
}
});
检测身份证
- (IDCardDetectionOutput *)detectIDCard:(nonnull IDRSIDCardDetectParam *)idCardParam
roiKey:(nonnull NSArray<NSNumber*>*)roiKey
rotate:(NSNumber*)rotate
isFrontCamera:(BOOL)frontCamera
isDetectFrontIDCard:(BOOL)frontIDCard;
请求参数
参数 | 类型 | 说明 | 是否必须 |
dataType | IDRSIDCardInputType | 输入数据类型 | 是 |
buffer | CVPixelBufferRef | 视频 PixelBufferRef | 否 |
image | UIImage | 图片数据 | 否 |
baseBuffer | char* | 视频 RGB 数据,需同时提供 baseBuffer、uvBuffer、width、height | 否 |
uvBuffer | char* | 否 | |
width | float | 否 | |
height | float | 否 | |
roiKey | NSArray<NSNumber*> | ROI 数组 | 是 |
rotate | NSNumber | 检测角度 | 是 |
frontCamera | BOOL | 是否为前置摄像头 | 是 |
frontIDCard | BOOL | 是否检测身份证带人面 | 是 |
返回值
IDCardDetectionOutput
属性 | 类型 | 说明 |
name | NSString | 姓名 |
sex | NSString | 性别 |
nationality | NSString | 民族 |
birth | NSString | 出生 |
address | NSString | 住址 |
num | NSString | 身份证号 |
issue | NSString | 签发机关 |
startDate | NSString | 有效期开始时间 |
endDate | NSString | 有效期结束时间 |
代码示例
BOOL isForont = weakSelf.isOCR_Front? true:false;
// 2. ocr身份证。
IDRSIDCardDetectParam *idCardParam = [[IDRSIDCardDetectParam alloc]init];
idCardParam.dataType = IDRSIDCardInputTypePixelBuffer;
idCardParam.buffer = newBuffer;
NSArray<NSNumber*> *kXMediaOptionsROIKey = @[@(0.2),@(0.2),@(0.6),@(0.6)];
IDCardDetectionOutput *ocrResult = [_idrs detectIDCard:idCardParam roiKey:kXMediaOptionsROIKey rotate:@(0) isFrontCamera:NO isDetectFrontIDCard:isForont];
if (ocrResult!=nil) {
NSString *result = @"";
if (ocrResult.num.length > 0) {
result = ocrResult.num;//身份人像面信息
}else if (ocrResult.startDate.length > 0){
result = ocrResult.startDate;身份证国徽面信息
}
// 采集到了身份证信息
dispatch_async(dispatch_get_main_queue(), ^{
// 显示身份证信息
self.resultLabel.text = result;
[self didsendMessage:result isOn:true type:0];
});
}
开启激活词检测
- (void)startDialog;
请求参数
无
返回值
无
代码示例
[self.idrs startDialog];
结束激活词检测
- (void)stopDialog;
请求参数
无
返回值
无
代码示例
[self.idrs stopDialog];
激活词外部输入数据
- (void)feedAudioFrame:(NSData*)voiceFrame;
请求参数
参数 | 类型 | 说明 | 是否必须 |
voiceFrame | NSData | 必须是 PCM、单声道、16k 采样率的音频数据 | 是 |
返回值
无
代码示例
//传给nuiSDK----需要16000数据
[self.idrs feedAudioFrame:srcData];
开始 TTS 合成
- (void)startTTSWithText:(NSString *)text;
请求参数
参数 | 类型 | 说明 | 是否必须 |
text | NSString | 需要合成语音的文本 | 是 |
返回值
无
代码示例
[self.idrs startTTSWithText:@"我是测试文本"];
结束 TTS 合成
- (void)stopTTS;
返回值
无
代码示例
[self.idrs stopTTS];
暂停当前播放
- (void)pauseTTS;
请求参数
无
返回值
无
代码示例
[self.idrs pauseTTS];
恢复当前播放
- (void)resumeTTS;
请求参数
无
返回值
无
代码示例
[self.idrs resumeTTS];
TTS 参数设置
- (void)setTTSParam:(NSString *)param
value:(NSString *)value;
请求参数
参数 | 类型 | 说明 | 是否必须 |
param | NSString | 参数包括:
| 是 |
value | NSString | 参数值示例如下:
| 是 |
返回值
无
代码示例
[self.idrs setTTSParam:@"extend_font_name" value:@"xiaoyun"];//设置播报人
[self.idrs setTTSParam:@"speed_level" value:@"1"];//设置播报速度
获取 TTS 参数
-(NSString *)getTTSParam:(NSString *)param;
请求参数
参数 | 类型 | 说明 | 是否必须 |
param | NSString | 参数包括:
| 是 |
返回值
类型 | 说明 |
NSString | 对应 key 的 value 值 |
代码示例
NSString * speed = [self.idrs getTTSParam:@"speed_level"];//当前播放速度