目录
1. 语音听写
简介
科大讯飞MSC(Mobile Speech Client,移动语音终端)
语音合成
将一段文字转换为成语音(可设置音色、语速和语调)
语音听写
将一段语音转换成文本
语音识别
判断用户所说的内容是否与预定义的语法相符合
语义理解AIUI
在语音听写基础上,分析理解用户的说话意图,返回结构化的指令信息(在AIUI开放平台定义专属的问答格式)。
语音评测
通过智能语音技术自动对发音水平进行评价
语音唤醒
设备(手机、玩具、家电等)在休眠(或锁屏)状态下也能检测到用户的声音
人脸识别
单人脸验证、单声纹验证以及人脸+声纹的融合验证方式
1. 语音听写
集成
第一步:
科大讯飞开放平台(http://www.xfyun.cn)申请应用获取AppID,并下载SDK
第二步:
导入iflyMSC.framework,以及依赖的系统库:
iflyMSC.framework 必要 讯飞开放平台静态库。
libz.tbd 必要 用于压缩、加密算法。
AVFoundation.framework 必要 用于系统录音和播放 。
SystemConfiguration.framework 系统库 用于系统设置。
Foundation.framework 必要 基本库。
CoreTelephoney.framework 必要 用于电话相关操作。
AudioToolbox.framework 必要 用于系统录音和播放。
UIKit.framework 必要 用于界面显示。
CoreLocation.framework 必要 用于定位。
Contacts.framework 必要 用于联系人。
AddressBook.framework 必要 用于联系人。
QuartzCore.framework 必要 用于界面显示。
CoreGraphics.framework 必要 用于界面显示。
libc++.tbd 离线识别,Aiui必要 用于支持C++。
Libicucore.tbd Aiui必要 系统正则库。
plist文件中添加权限
麦克风位置联系人权限
<key>NSMicrophoneUsageDescription</key>
<string></string>
<key>NSLocationUsageDescription</key>
<string></string>
<key>NSLocationAlwaysUsageDescription</key>
<string></string>
<key>NSContactsUsageDescription</key>
<string></string>
bitcode
在Xcode 7,8默认开启了Bitcode, MSC不支持,关闭Bitcode(Build Settings中)
第三步:
AppDele +
初始化(异步)
NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@", @"YourAppid"];
[IFlySpeechUtility createUtility:initString];
/* 可选
// 设置log级别
[IFlySetting setLogFile:LVL_ALL];
// 控制台是否输出log
[IFlySetting showLogcat:YES];
// log存储路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
[IFlySetting setLogFilePath:cachePath];
*/
#import <iflyMSC/iflyMSC.h>
#import "IATConfig.h"
<IFlySpeechRecognizerDelegate>
@property (nonatomic, strong) IFlySpeechRecognizer *iFlySpeechRecognizer;
// 1. 初始化讯飞语音听写
if (!_iFlySpeechRecognizer) {
// 创建听写对象
_iFlySpeechRecognizer = [IFlySpeechRecognizer sharedInstance];
_iFlySpeechRecognizer.delegate = self;
// ?
[_iFlySpeechRecognizer setParameter:@"" forKey: [IFlySpeechConstant PARAMS]];
// 设置听写模式
[_iFlySpeechRecognizer setParameter:@"iat" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
// 设置(直接从设置文件中修改数据)
IATConfig *instance = [IATConfig sharedInstance];
// 设置最长录音时间
[_iFlySpeechRecognizer setParameter:instance.speechTimeout forKey:[IFlySpeechConstant SPEECH_TIMEOUT]];
// 设置说完后多长时间会停止识别
[_iFlySpeechRecognizer setParameter:instance.vadEos forKey: [IFlySpeechConstant VAD_EOS]];
// 设置多长时间不说话或者是未检测到语音 则会停止识别
[_iFlySpeechRecognizer setParameter:instance.vadBos forKey: [IFlySpeechConstant VAD_BOS]];
// 网络等待时间
[_iFlySpeechRecognizer setParameter:@"20000" forKey:[IFlySpeechConstant NET_TIMEOUT]];
// 设置采样率,推荐使用16K
[_iFlySpeechRecognizer setParameter:instance.sampleRate forKey:[IFlySpeechConstant SAMPLE_RATE]];
if ([instance.language isEqualToString:[IATConfig chinese]]) {
// 设置语言
[_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechConstant LANGUAGE]];
// 设置方言
[_iFlySpeechRecognizer setParameter:instance.accent forKey:[IFlySpeechConstant ACCENT]];
}else if ([instance.language isEqualToString:[IATConfig english]]) {
[_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechConstant LANGUAGE]];
}
// 设置是否返回标点符号
[_iFlySpeechRecognizer setParameter:instance.dot forKey:[IFlySpeechConstant ASR_PTT]];
}
// 2.启动识别服务
[_iFlySpeechRecognizer startListening];
// 3.停止识别服务
// [_iFlySpeechRecognizer stopListening];
#pragma mark IFlySpeechRecognizerDelegate
// 4.识别到结果后回调
- (void)onResults:(NSArray *) results isLast:(BOOL)isLast{
NSLog(@"%@",results);
if(!results){
return;
}
//
NSString *resultStr=[[[results firstObject] allKeys]firstObject];
NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:[resultStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
NSArray *resultArr=dic[@"ws"];
for(int i=0;i<resultArr.count;i++){
NSDictionary *dicT=[resultArr[i][@"cw"]firstObject];
[self.resultStr appendString:dicT[@"w"]];
}
if(isLast){
if([self.resultStr containsString:@"xxxss"]){
}
self.resultStr=[NSMutableString new];
}
}
// 出错后回调
- (void)onError:(IFlySpeechError *)error{
NSLog(@"%@",error);
}
// 停止录音后回调
- (void)onEndOfSpeech{}
// 开始录音后回调
- (void)onBeginOfSpeech{}
// 音量改变后回调
- (void)onVolumeChanged: (int)volume{}
// 取消后回调
- (void)onCancel{}
IATConfig.h
#import <Foundation/Foundation.h>
@interface IATConfig : NSObject
+(IATConfig *)sharedInstance;
+(NSString *)mandarin;
+(NSString *)cantonese;
+(NSString *)sichuanese;
+(NSString *)chinese;
+(NSString *)english;
+(NSString *)lowSampleRate;
+(NSString *)highSampleRate;
+(NSString *)isDot;
+(NSString *)noDot;
@property (nonatomic, strong) NSString *speechTimeout;
@property (nonatomic, strong) NSString *vadEos;
@property (nonatomic, strong) NSString *vadBos;
@property (nonatomic, strong) NSString *language;
@property (nonatomic, strong) NSString *accent;
@property (nonatomic, strong) NSString *dot;
@property (nonatomic, strong) NSString *sampleRate;
@property (nonatomic) BOOL isTranslate;//whether or not to open translation
@property (nonatomic, assign) BOOL haveView;
@property (nonatomic, strong) NSArray *accentIdentifer;
@property (nonatomic, strong) NSArray *accentNickName;
@end
IATConfig.m
#define PUTONGHUA @"mandarin"
#define YUEYU @"cantonese"
#define ENGLISH @"en_us"
#define CHINESE @"zh_cn";
#define SICHUANESE @"lmz";
#import "IATConfig.h"
@implementation IATConfig
-(id)init {
self = [super init];
if (self) {
[self defaultSetting];
return self;
}
return nil;
}
+(IATConfig *)sharedInstance {
static IATConfig * instance = nil;
static dispatch_once_t predict;
dispatch_once(&predict, ^{
instance = [[IATConfig alloc] init];
});
return instance;
}
-(void)defaultSetting {
_speechTimeout = @"30000";
_vadEos = @"3000";
_vadBos = @"3000";
_dot = @"0";
_sampleRate = @"16000";
_language = CHINESE;
_accent = PUTONGHUA;
_haveView = NO;
_accentNickName = [[NSArray alloc] initWithObjects:NSLocalizedString(@"K_LangCant", nil), NSLocalizedString(@"K_LangChin", nil), NSLocalizedString(@"K_LangEng", nil), NSLocalizedString(@"K_LangSzec", nil), nil];
_isTranslate = NO;
}
+(NSString *)mandarin {
return PUTONGHUA;
}
+(NSString *)cantonese {
return YUEYU;
}
+(NSString *)chinese {
return CHINESE;
}
+(NSString *)english {
return ENGLISH;
}
+(NSString *)sichuanese {
return SICHUANESE;
}
+(NSString *)lowSampleRate {
return @"8000";
}
+(NSString *)highSampleRate {
return @"16000";
}
+(NSString *)isDot {
return @"1";
}
+(NSString *)noDot {
return @"0";
}
@end
网友评论