README
需求
- iOS 9.0+
- Xcode 10.0+
安装
通过 CocoaPods 安装,在 podfile 中添加:
pod 'QTTranslatorAR', '~> 2.0'
权限
所需权限,将以下 key 添加到 info.plist 文件中
<key>NSCameraUsageDescription</key>
<string>申请拍照权限</string>
<key>NSMicrophoneUsageDescription</key>
<string>申请麦克风权限</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>申请照片图库权限</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>申请语音识别权限</string>
用法
设置参数
- appId 填写申请的 appId,与 app 的 bundleId 绑定,用于鉴权,请谨慎保存。必须填写
QTTranslateManager.shared.appId = @"XXXX"
- networkStatus 默认采用 All,不建议修改
QTTranslateManager.shared.networkSendingStatus = UseNetworkSendingModeAll;
- envMode 默认Release,调试时设置Debug模式,仅针对内网
QTTranslateManager.shared.envMode = QTTranslateEnvDebug;
- enableLog 默认NO,调试时开启 log
QTTranslateManager.shared.enableLog = YES;
-
sourceLang 服务请求的源语言参数,如 zh,en等,具体种类见 QTLanguageDefine
-
targetLang 服务请求的目标语言参数,如 zh,en等,具体种类见 QTLanguageDefine
// 支持的语言种类 typedef NS_ENUM(NSInteger, QTLangType) { QTLangTypeUnknown = -1, QTLangTypeZh = 0, // Chinese QTLangTypeEn = 1, // English QTLangTypeJp = 2, // Japanese QTLangTypeKr = 3, // Korean QTLangTypeEs = 4, // 西班牙 QTLangTypeRu = 5, // Russian QTLangTypeFr = 6, // French QTLangTypeDe = 7, // German QTLangTypeTh = 8, // 泰国 QTLangTypeVn = 9, // 越南 QTLangTypeId = 10, // 印度尼西亚 QTLangTypeMy = 11, // 马来西亚 QTLangTypeIt = 12, // 意大利 QTLangTypePt = 13, // 葡萄牙 QTLangTypeTr = 14 // 土耳其 }; // 构建语种参数 如日文 langAbbrFromType(QTLangTypeJp) // 返回 @"jp" // 构建candidateLangPair参数 如中日文转换 QTLanguagePair *langPair = [[QTLanguagePair alloc] initWithSource:QTLangTypeZh target:QTLangTypeJp]; candidateLangPair = [langPair reqValue]; // 返回 @"zh|jp"
文本翻译
支持语种
中文学术至(英语、日语、韩语、俄语、法语、德语、泰语、越南语、印尼语、马来语、西班牙语、葡萄牙语、意大利语、土耳其语)互译
// 构建请求参数 QTTextTranslateReq
QTTextTranslateReq *rep = [QTTextTranslateReq new];
rep.sessionUUID = [[NSUUID UUID] UUIDString];
rep.sourceText = @"测试文本";
// 设置语言种类参数方式一
// 设置源语言,目标语言,不用设置candidateLangPair
rep.sourceLang = langAbbrFromType(QTLangTypeZh);
rep.targetLang = langAbbrFromType(QTLangTypeEn);
// 设置语言种类参数方式二
// 翻译支持自动识别语言种类
// 设置candidateLangPair,不指定源语言,目标语言
QTLanguagePair *langPair = [[QTLanguagePair alloc] initWithSource:QTLangTypeZh target:QTLangTypeJp];
rep.candidateLangPair = [langPair reqValue];
// 开始文本请求
[QTTranslateManager.shared translateText:rep complete:^(QTTextTranslateRsp *rsp) {
// 文本翻译请求回调
// 处理响应参数 QTTextTranslateRsp
}];
语音翻译
支持语种
中文学术至(英语、日语、韩语、俄语、法语、德语、泰语、越南语、印尼语、马来语、西班牙语、葡萄牙语、意大利语、土耳其语)互译
// 初始化语音翻译引擎
QTAudioTranslateManager *manager = [QTAudioTranslateManager shared];
manager.delegate = self;
[manager configure];
// 开始语音翻译
[manager startWithSourceLang:langAbbrFromType(QTLangTypeZh) targetLang:langAbbrFromType(QTLangTypeEn)];
// 结束语音翻译
[manager stop];
// 实现语音翻译引擎代理 QTAudioTranslateManagerDelegate
// 语音翻译已开始
- (void)didStartTranslate;
// 语音翻译已结束
- (void)didStopTranslate;
// 收到语音翻译的识别结果
- (void)didReceiveRecognizingText:(NSString *)text;
// 语音识别错误 在此回调里主动结束本次语音翻译
- (void)didReceiveRecognizeFail:(NSError *)error;
// 收到语音翻译的最终结果
- (void)didReceiveTranslateRsp:(QTTextTranslateRsp *)rsp;
// 收到语音音量数据,可用于绘制波形图
- (void)didReceiveVoicePower:(CGFloat)value;
图片翻译
支持语种
图片翻译支持从中文翻译到(英语、日语、韩语、西班牙语、法语、德语、越南语、马来语、意大利语、葡萄牙语)的互译
// 构建请求参数 QTImageTranslateReq
QTImageTranslateReq *rep = [QTImageTranslateReq new];
rep.sessionId = NSUUID.UUID.UUIDString;
rep.sourceImage = [UIImage imageNamed:@"testImage"];
// 设置语言种类参数方式一
// 设置源语言,目标语言,不用设置candidateLangPair
rep.sourceLang = langAbbrFromType(QTLangTypeZh);
rep.targetLang = langAbbrFromType(QTLangTypeEn)";
// 设置语言种类参数方式二
// 翻译支持自动识别语言种类
// 设置candidateLangPair,不指定源语言,目标语言
QTLanguagePair *langPair = [[QTLanguagePair alloc] initWithSource:QTLangTypeZh target:QTLangTypeJp];
rep.candidateLangPair = [langPair reqValue];
// 开始图片翻译请求
[QTTranslateManager.shared translateImage:rep complete:^(QTImageTranslateRsp * _Nonnull rsp) {
// 图片翻译请求回调
// 处理响应参数 QTImageTranslateRsp
}];
文字到语音
支持语种
中文、英语、日语、韩语、俄语、法语、德语、泰语、越南语、印尼语、马来语、西班牙语、葡萄牙语、意大利语、土耳其语
文字到语音的音频文件存储在缓存中,文件有效期为7天。
__weak __typeof(self)weakSelf = self;
QTTtsServiceReq *req = [QTTtsServiceReq new];
req.sessionUUID = [NSUUID UUID].UUIDString;
req.text = @"测试TTS";
req.lang = QTLangTypeZh;
req.rate = 1.8;
BOOL didPlay = [QTTtsManager.shared readTtsReq:req endBlock:^{
[weakSelf.playButton stopAnimating];
}];
if (didPlay) {
[weakSelf.playButton startAnimating];
}
AR翻译
支持语种
AR翻译支持从中文到(英、日、韩、西班牙、法、德、越、马来、意大利、葡萄牙)的互译。
// 接口
/**
* 初始化AR翻译引擎
* @param controller 传入依赖的viewController用来展示
*/
- (instancetype)initWithController:(UIViewController * _Nonnull )controller
delegate:(id<QTARTranslateManagerDelegate> _Nullable)delegate;
/**
* 配置AR翻译引擎
* @param source 翻译的源语言类型。具体种类见 QTLangType,通过 langAbbrFromType(QTLangType) 方法构造
* @param target 翻译的目标语言类型。具体种类见 QTLangType,通过 langAbbrFromType(QTLangType) 方法构造
* AR翻译支持中文到 (英、日、韩、西班牙、法、德、越、马来、意大利、葡萄牙)的互译
*/
- (void)configureWithSource:(NSString *)source target:(NSString *)target;
/**
* 获取当前视频帧
*/
- (UIImage *)getCurrentFrame;
/**
* 开始AR翻译引擎
*/
- (void)resume;
/**
* 暂停AR翻译引擎
*/
- (void)pause;
/**
* 释放AR翻译引擎
*/
- (void)releaseEngine;
// 使用
// Property
@property (nonatomic, strong) QTARTranslateManager *manager;
- (void)setup {
// 初始化AR翻译
self.manager = [[QTARTranslateManager alloc] initWithController:self delegate:self];
NSString *sourceLang = langAbbrFromType(QTLangTypeZh);
NSString *targetLang = langAbbrFromType(QTLangTypeEn);
[self.manager configureWithSource:sourceLang target:targetLang];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// 开始AR翻译
[self.manager resume];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// 暂停AR翻译
[self.manager pause];
}
- (void)dealloc {
// 结束AR翻译并释放资源 一定不要忘记!
[self.manager releaseEngine];
self.manager = nil;
}
// 实现 QTARTranslateManagerDelegate 协议,获取状态回调
- (void)didStart {
// AR翻译开始
}
// QTTranslateARStatusMove, // 设备移动
// QTTranslateARStatusStable, // 设备稳定
// QTTranslateARStatusRequest, // 发起AR翻译
// QTTranslateARStatusTrack, // AR翻译成功,跟踪Marker
// QTTranslateARStatusError, // 设备长期稳定且未识别到有效文本,不再进行AR识别
- (void)statusDidChange:(QTTranslateARStatus)status {
// AR翻译状态
}
- (void)didStop {
// AR翻译结束
}
历史
2.0.9
- 2.0.8 版本错误修复
- 修复切换语种,重置内部状态
2.0.8
- 将AR翻译的languagepair提取出来,方便AR翻译进行中切换语种
2.0.7
- 修复AR引擎pause后无回调问题
2.0.6
- 优化 AR 翻译逻辑:
- 前几个视频帧亮度过暗,导致AR引擎无法识别和跟踪,忽略前几个视频帧。
- 长时间稳定设备却多次未检测到文本,暂停 AR 翻译服务,状态置为 error。设备移动后重新开启 AR 翻译。
2.0.5
- 优化 AR 翻译逻辑:
- track 状态下长时间未发现 marker, 重置为 move 状态。可能原因是 特征点过少无法进行跟踪计算。
- 长时间稳定设备却多次未检测到文本,终止 AR 翻译服务,状态置为 error。
2.0.4
- AR翻译卡顿优化
- 新增获取当前视频帧接口
2.0.3
- AR翻译内存泄露问题优化
2.0.2
- AR翻译增加状态回调
2.X
- 转换为CocoaPods分发
- 增加全功能版,在基础版基础上支持AR翻译
1.3.0
- 增加日志模块,便于调试,定位问题
- 优化语音翻译模块,完善弱网情况逻辑
1.2.2
- 优化注释文档
- WebSocket增加ping pong
- 语音翻译本地检测10秒无有效文本输入的VAD功能支持自定义配置
- 增加开发和发布模式切换
1.2.0
- QTAudioTranslateManager 增加 enableLocalVad 属性
- QTTranslateManager 增加 envMode 属性
1.1.0
- QTTextTranslateReq 增加词典查询 针对内部服务
- QTTextTranslateRsp 丰富返回数据信息
- QTAudioTranslateManager 移除config方法
- QTAudioTranslateManager 修改开始语音翻译方法 改为 startWith
- QTAudioTranslateManager 优化语音翻译返回结果,丰富返回数据信息