TAISDK是一款封装了腾讯云教育AI能力的SDK,通过集成SDK,用户可以快速接入相关产品功能,如数学作业批改、智玲口语评测等。
secretId和secretKey是使用SDK的安全凭证,通过以下方式获取
获取到秘钥后到tencentcloud-sdk-android-soe/TAIDemo/app/src/main/java/com/tencent/taidemo/PrivateInfo.java填入对应的appId ,secretId ,secretKey.
soeAppId 和hcmAppId根据需要填写.需要到控制台新建.
soe控制台:https://console.cloud.tencent.com/soe/index/setting_en
hcm控制台:https://console.cloud.tencent.com/hcm/app
token 不需要填写.
在build.gradle引入依赖包
implementation 'com.tencent.edu:TAISDK:1.2.3.78'//一、声明并定义对象
private TAIMathCorrection correction = new TAIMathCorrection();//二、初始化参数
TAIMathCorrectionParam param = new TAIMathCorrectionParam();
param.context = this;
param.appId = "";
param.sessionId = UUID.randomUUID().toString();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(this.bitmap.getByteCount());
this.bitmap.compress(Bitmap.CompressFormat.JPEG, 50, outputStream);
param.imageData = outputStream.toByteArray();
param.secretId = "";
param.secretKey = "";
//三、作业批改
this.correction.correction(param, new TAIMathCorrectionCallback() {
@Override
public void onError(TAIError error) {
//错误返回
}
@Override
public void onSuccess(final TAIMathCorrectionRet result) {
//成功返回TAIMathCorrectionRet
}
});//一、声明并定义对象
private TAIOralEvaluation oral = new TAIOralEvaluation();//二、设置数据回调
this.oral.setListener(new TAIOralEvaluationListener() {
@Override
public void onEvaluationData(final TAIOralEvaluationData data, final TAIOralEvaluationRet result) {
//数据和结果回调
}
@Override
public void onFinalEvaluationData(final TAIOralEvaluationData data, final TAIOralEvaluationRet result) {
//最终评测结果回调
}
@Override
public void onEvaluationError(TAIOralEvaluationData data, TAIError error) {
//评测失败回调
}
});- 内部录制(SDK内部录制音频并传输,推荐)
//三、初始化参数
TAIOralEvaluationParam param = new TAIOralEvaluationParam();
param.context = this;
param.appId = "";
param.sessionId = UUID.randomUUID().toString();
param.workMode = TAIOralEvaluationWorkMode.ONCE;
param.evalMode = TAIOralEvaluationEvalMode.SENTENCE;
param.storageMode = TAIOralEvaluationStorageMode.DISABLE;
param.serverType = TAIOralEvaluationServerType.ENGLISH;
param.fileType = TAIOralEvaluationFileType.MP3;
param.scoreCoeff = 1.0;
param.refText = "";
param.secretId = "";
param.secretKey = "";
//四、设置分片和静音检测
TAIRecorderParam recordParam = new TAIRecorderParam();
recordParam.fragSize = 1024;
recordParam.fragEnable = true;
recordParam.vadEnable = true;
recordParam.vadInterval = Integer.parseInt(this.vadInterval.getText().toString());
this.oral.setRecorderParam(recordParam);
//五、开始录制
this.oral.startRecordAndEvaluation(param);//五、结束录制
this.oral.stopRecordAndEvaluation();- 外部录制(SDK外部录制音频数据作为Api调用参数)
//三、初始化参数
TAIOralEvaluationParam param = new TAIOralEvaluationParam();
param.context = this;
param.appId = "";
param.sessionId = UUID.randomUUID().toString();
param.workMode = TAIOralEvaluationWorkMode.ONCE;
param.evalMode = TAIOralEvaluationEvalMode.SENTENCE;
param.storageMode = TAIOralEvaluationStorageMode.DISABLE;
param.serverType = TAIOralEvaluationServerType.ENGLISH;
param.fileType = TAIOralEvaluationFileType.MP3;
param.scoreCoeff = 1.0;
param.refText = "hello guagua";
param.secretId = "";
param.secretKey = "";
//四、传输数据
try{
InputStream is = getAssets().open("hello_guagua.mp3");
byte[] buffer = new byte[is.available()];
is.read(buffer);
is.close();
TAIOralEvaluationData data = new TAIOralEvaluationData();
data.seqId = 1; //分片序号从1开始
data.bEnd = true;
data.audio = buffer;
this.oral.oralEvaluation(param, data);
}
catch (Exception e){
}注意事项
外部录制三种格式目前仅支持16k采样率16bit编码单声道,如有不一致可能导致评估不准确或失败
- 静音检测
//在开始调用`startRecordAndEvaluation`前设置录制参数
TAIRecorderParam recordParam = new TAIRecorderParam();
recordParam.fragSize = 1024;
recordParam.fragEnable = true;
recordParam.vadEnable = true;
recordParam.vadInterval = 5000;
recordParam.db = 20; //静音检测分贝阈值
this.oral.setRecorderParam(recordParam);当检测到静音或者录音分贝变化时,通过TAIOralEvaluationListener通知上层。
//检测到静音 isSpeak true:录音开始到现在检测到声音 false:未检测到声音
@Override
public void onEndOfSpeech(boolean isSpeak) {
//这里可以根据业务逻辑处理,如停止录音或提示用户
}
//音量发生变化
public void onVolumeChanged(final int volume) {
//回调录音分贝大小[0-120]
}TAIRecorderParam参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| fragEnable | boolean | 是否开启分片,默认YES |
| fragSize | int | 分片大小,默认1024,建议为1024的整数倍,范围【1k-10k】 |
| vadEnable | boolean | 是否开启静音检测,默认NO |
| vadInterval | int | 静音检测时间间隔,单位【ms】 |
| db | int | 静音检测分贝阈值 |
secretKey属于安全敏感参数,线上版本一般由业务后台生成临时secretKey或者SDK外部签名返回到客户端。
(1)内部签名:sdk内部通过用户提供的secretKey和secretId计算签名,用户无需关心签名细节
(2)外部签名:sdk外部调用getStringToSign获取签名字符串,然后根据签名规则(参考步骤三) 进行签名。口语评测时需提供secretId、timestamp和signature参数
//获取签名所需字符串
public String getStringToSign(long timestamp);注意事项
时间戳timestamp必须和TAIEvaluationParam参数的timestamp一致
####4、参数说明
- TAICommonParam参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| context | Context | 是 | 上下文 |
| appId | String | 是 | appId |
| timeout | int | 否 | 超时时间,默认30秒 |
| secretId | String | 是 | 密钥Id |
| secretKey | String | 内部签名:必填 | 密钥Key |
| signature | String | 外部签名:必填 | 签名 |
| timestamp | long | 外部签名:必填 | 秒级时间戳 |
- TAIError参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| code | int | 错误码 |
| desc | String | 错误描述 |
| requestId | String | 请求id,定位错误信息 |
- TAIMathCorrectionParam参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sessionId | String | 是 | 一次批改唯一标识 |
| imageData | byte[] | 是 | 图片数据 |
- TAIMathCorrectionRet参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| sessionId | String | 一次批改唯一标识 |
| formula | String | 算式 |
| items | List | 算式结果 |
- TAIMathCorrectionItem参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| result | boolean | 算式结果 |
| rect | Rect | 算式坐标 |
| formula | String | 算式字符串 |
- TAIOralEvaluationParam参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sessionId | String | 是 | 一次批改唯一标识 |
| workMode | TAIOralEvaluationWorkMode | 是 | 传输方式 |
| evalMode | TAIOralEvaluationEvalMode | 是 | 评测模式 |
| isFixOn | boolean | true:开启音素映射, false:关闭音素映射 | |
| fileType | TAIOralEvaluationFileType | 是 | 数据格式 |
| storageMode | TAIOralEvaluationStorageMode | 是 | 是否存储音频文件 |
| serverType | TAIOralEvaluationServerType | 是 | 语言类型 |
| hostType | TAIOralEvaluationHostType | 否 | host类型 0:国内 1:海外 |
| scoreCoeff | double | 是 | 苛刻指数,取值为[1.0 - 4.0]范围内的浮点数,用于平滑不同年龄段的分数,1.0为小年龄段,4.0为最高年龄段 |
| refText | String | 是 | 被评估语音对应的文本 |
- TAIOralEvaluationData参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| seqId | NSInteger | 分片序列号,从1开始 |
| bEnd | BOOL | 是否最后一个分片 |
| audio | NSData | 音频数据 |
- TAIMathCorrectionRet参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| sessionId | String | 一次批改唯一标识 |
| pronAccuracy | double | 发音精准度,取值范围[-1, 100],当取-1时指完全不匹配 |
| pronFluency | double | 发音流利度,取值范围[0, 1],当为词模式时,取值无意义 |
| pronCompletion | double | 发音完整度,取值范围[0, 1],当为词模式时,取值无意义 |
| audioUrl | String | 保存语音音频文件的下载地址(TAIOralEvaluationStorageMode.Enable有效) |
| words | List | 详细发音评估结果 |
| suggestedScore | float | 建议评分,取值范围[0,100] |
- TAIOralEvaluationPhoneInfo参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| beginTime | int | 当前单词语音起始时间点,单位为ms |
| endTime | int | 当前单词语音终止时间点,单位为ms |
| pronAccuracy | double | 音节发音准确度,取值范围[-1, 100],当取-1时指完全不匹配 |
| detectedStress | boolean | 当前音节是否检测为重音 |
| phone | String | 当前音节 |
| stress | boolean | 当前音节是否应为重音 |
| referencePhone | String | 标准音素 |
| rLetter | String | 音素映射的字母 |
- TAIOralEvaluationWord参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| beginTime | int | 当前单词语音起始时间点,单位为ms |
| endTime | int | 当前单词语音终止时间点,单位为ms |
| pronAccuracy | double | 单词发音准确度,取值范围[-1, 100],当取-1时指完全不匹配 |
| pronFluency | double | 单词发音流利度,取值范围[0, 1] |
| word | String | 当前词 |
| matchTag | int | 当前词与输入语句的匹配情况,0:匹配单词、1:新增单词、2:缺少单词 |
| phoneInfos | List | 音节评估详情 |
