腾讯云智聆口语评测Java SDK-教育服务解决方案
环境依赖
安装 JDK7版本及以上,Java官网。
安装 SDK
使用 Maven 安装Java SDK,在pom.xml中引入依赖,可以选择安装所有依赖或本产品相关依赖。更多内容前往 GitHub 或者 Gitee 。所有依赖相关依赖
com.tencentcloudapi tencentcloud-sdk-java 3.1.828
com.tencentcloudapi tencentcloud-sdk-java-common 3.1.828 com.tencentcloudapi tencentcloud-sdk-java-soe 3.1.828 com.tencentcloudapi tencentcloud-sdk-java-sts 3.1.828
安装 SDK 示例以 IntelliJ IDEA 为例,打开 IntelliJ IDEA,选择 New Project 新建一个项目。
在 Build system 中选择 Maven,选择自己安装的 JDK。点击 Create。
选择 pom.xml ,在 dependencies 中添加 SDK。IDEA 会默认使用自带Maven,可在 Settings 中进行替换。
右击 pom.xml,选择 Maven下的 Reload project 安装 SDK。
使用 SDK
可通过 控制台 生成代码进行调用或者参考下方示例,密钥获取可参考快速入门。
本地音频文件评测
发音数据传输附带初始化:直接调用 发音数据传输接口附带初始化过程 完成一次性评测。
package soe.v20180724;
import java.nio.file.Files;import java.nio.file.Paths;import javax.xml.bind.DatatypeConverter;import java.util.UUID;
import com.tencentcloudapi.common.Credential;import com.tencentcloudapi.common.exception.TencentCloudSDKException;import com.tencentcloudapi.soe.v20180724.SoeClient;import com.tencentcloudapi.soe.v20180724.models.TransmitOralProcessWithInitRequest;import com.tencentcloudapi.soe.v20180724.models.TransmitOralProcessWithInitResponse;
public class TransmitOralProcessWithInit {
public static void main(String[] args) throws Exception { try { // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 Credential cred = new Credential("SecretId", "SecretKey"); // 实例化soe的client对象 SoeClient client = new SoeClient(cred, "");
// 实例化发音数据传输接口请求对象 TransmitOralProcessWithInitRequest req = new TransmitOralProcessWithInitRequest();
// 请求参数赋值 String sessionId = UUID.randomUUID().toString(); // 将文件转换成base64,本地音频文件路径替换apple.mp3 String AUDIO_FOR_ONCE = "SOEMUSIC/apple.mp3"; byte[] buf = Files.readAllBytes(Paths.get(AUDIO_FOR_ONCE)); String base64Str = DatatypeConverter.printBase64Binary(buf); req.setUserVoiceData(base64Str); req.setVoiceEncodeType(1L); // 语音数据类型1:pcm req.setVoiceFileType(3L); // 语音文件类型 req.setSessionId(sessionId); // 唯一标识 req.setRefText("apple"); // 文本 req.setWorkMode(0L); // 0,流式分片,1一次性评测 req.setEvalMode(0L); // 评估模式,0,单词.1,句子,2,段落,3自由说,4单词纠错 req.setScoreCoeff(1.0f); // 评估难度 req.setServerType(0L); // 服务类型.0英文,1中文 req.setIsAsync(0L); // 异步 req.setIsQuery(0L); // 轮询 req.setTextMode(0L); // 文本格式.0普通文本 1,音素结构 req.setIsEnd(1L); req.setSeqId(1L); req.setSentenceInfoEnabled(1L);
// 通过client对象调用TransmitOralProcessWithInit方法发起请求 TransmitOralProcessWithInitResponse resp = client.TransmitOralProcessWithInit(req); // 输出json格式的字符串回包 System.out.println(TransmitOralProcessWithInitResponse.toJsonString(resp));
} catch (TencentCloudSDKException e) { System.out.println(e); } }}
评测超时处理
如果本地文件过大,可能会导致评测超时。可以选用如下方案:1. 流式分片传输:将发音数据进行分片处理,减少每次评测的时间。2. 异步查询:使用异步功能将发音数据先上传,然后使用查询功能查询结构。流式分片传输异步查询
package soe.v20180724;
import java.nio.file.Files;import java.nio.file.Paths;import javax.xml.bind.DatatypeConverter;import java.util.UUID;import java.util.Arrays;
import com.tencentcloudapi.common.Credential;import com.tencentcloudapi.common.exception.TencentCloudSDKException;import com.tencentcloudapi.soe.v20180724.SoeClient;import com.tencentcloudapi.soe.v20180724.models.TransmitOralProcessWithInitRequest;import com.tencentcloudapi.soe.v20180724.models.TransmitOralProcessWithInitResponse;
public class OralevaluationStream { public static final String sessionId = UUID.randomUUID().toString(); public static final String AUDIO_FOR_ONCE = "SOEMUSIC/apple.mp3"; public static final int PKG_SIZE = 100 * 1024; // 分片大小
public static void main(String[] args) throws Exception { try { // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 Credential cred = new Credential("SecretId", "SecretKey"); // 实例化soe的client对象 SoeClient client = new SoeClient(cred, "");
// 实例化发音数据传输接口请求对象 TransmitOralProcessWithInitRequest req = new TransmitOralProcessWithInitRequest();
// 请求参数赋值 req.setVoiceEncodeType(1L); // 语音数据类型1:pcm req.setVoiceFileType(3L); // 语音文件类型 req.setSessionId(sessionId); // 唯一标识 req.setRefText("apple"); // 文本 req.setWorkMode(0L); // 0,流式分片,1一次性评测 req.setEvalMode(0L); // 评估模式,0,单词.1,句子,2,段落,3自由说,4单词纠错 req.setScoreCoeff(1.0f); // 评估难度 req.setServerType(0L); // 服务类型.0英文,1中文 req.setIsAsync(0L); // 异步 req.setIsQuery(0L); // 轮询 req.setTextMode(0L); // 文本格式.0普通文本 1,音素结构
// 将文件转换成base64,本地音频文件路径替换apple.mp3 byte[] data = Files.readAllBytes(Paths.get(AUDIO_FOR_ONCE)); int pkgNum = (int) Math.ceil((double) data.length / PKG_SIZE); for (int i = 1; i <= pkgNum; i++) { int lastIndex = i * PKG_SIZE; if (i == pkgNum) { lastIndex = data.length; } byte[] buf = Arrays.copyOfRange(data, (i - 1) * PKG_SIZE, lastIndex); String base64Str = DatatypeConverter.printBase64Binary(buf); req.setUserVoiceData(base64Str); req.setSeqId((long) i); if (i == pkgNum) { req.setIsEnd(1L); } else { req.setIsEnd(0L); }
// 通过client对象调用TransmitOralProcessWithInit方法发起请求 TransmitOralProcessWithInitResponse resp = client.TransmitOralProcessWithInit(req); // 输出json格式的字符串回包 System.out.println(TransmitOralProcessWithInitResponse.toJsonString(resp));
} } catch (TencentCloudSDKException e) { System.out.println(e); } }}
package soe.v20180724;
import java.io.IOException;import java.nio.file.Files;import java.nio.file.Paths;import java.util.UUID;import javax.xml.bind.DatatypeConverter;
import com.tencentcloudapi.common.Credential;import com.tencentcloudapi.common.exception.TencentCloudSDKException;import com.tencentcloudapi.soe.v20180724.SoeClient;import com.tencentcloudapi.soe.v20180724.models.TransmitOralProcessWithInitRequest;import com.tencentcloudapi.soe.v20180724.models.TransmitOralProcessWithInitResponse;
public class OralevaluationAsync {
public static void main(String[] args) throws InterruptedException { try { // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 Credential cred = new Credential("SecretId", "SecretKey"); // 实例化soe的client对象 SoeClient client = new SoeClient(cred, "");
// 实例化发音数据传输接口请求对象 TransmitOralProcessWithInitRequest req = new TransmitOralProcessWithInitRequest();
// 请求参数赋值 String sessionId = UUID.randomUUID().toString(); // 将文件转换成base64,本地音频文件路径替换apple.mp3 String AUDIO_FOR_ONCE = "SOEMUSIC/para.mp3"; byte[] buf = Files.readAllBytes(Paths.get(AUDIO_FOR_ONCE)); String base64Str = DatatypeConverter.printBase64Binary(buf); req.setUserVoiceData(base64Str); req.setVoiceEncodeType(1L); // 语音数据类型1:pcm req.setVoiceFileType(3L); // 语音文件类型 req.setSessionId(sessionId); // 唯一标识 req.setRefText("apple"); // 文本 req.setWorkMode(0L); // 0,流式分片,1一次性评测 req.setEvalMode(2L); // 评估模式,0,单词.1,句子,2,段落,3自由说,4单词纠错 req.setScoreCoeff(1.0f); // 评估难度 req.setServerType(0L); // 服务类型.0英文,1中文 req.setIsAsync(0L); // 异步 req.setIsQuery(0L); // 轮询 req.setTextMode(0L); // 文本格式.0普通文本 1,音素结构 req.setIsEnd(1L); req.setSeqId(1L); req.setIsAsync(1L); req.setSentenceInfoEnabled(1L);
// 轮询 for (int i = 0; i < 60; i++) {
System.out.println("查询结果:"); TransmitOralProcessWithInitResponse res = client.TransmitOralProcessWithInit(req); System.out.println(TransmitOralProcessWithInitResponse.toJsonString(res)); if (res.getStatus().equals("Finished") || res.getStatus().equals("Failed")) { System.out.println("exit"); break; } else { req.setIsQuery(1L); // 设置为查询标识
} Thread.sleep(1000); // 时间间隔 } } catch (TencentCloudSDKException | IOException e) { e.printStackTrace(); } }}
使用方法说明
1. SessionID:使用 uuid 来作为 SessionID,用于区分不同的音频。2. base64转换:读取本地音频文件,转换成 base64 数据进行评测。3. 流式分片 base64 转换:读取本地音频文件,将音频进行分片,转换成 base64 数据进行评测。4. 异步轮询:使用 json 反序列化,获取评测结果,判断是否查询到最终结果。SessionIDbase64转换流式分片异步轮询
import java.util.UUID;
String SessionId = UUID.randomUUID().toString();
import java.nio.file.Files;import java.nio.file.Paths;import javax.xml.bind.DatatypeConverter;
byte[] buf = Files.readAllBytes(Paths.get("apple.mp3"));String base64Str = DatatypeConverter.printBase64Binary(buf);
import java.nio.file.Files;import java.nio.file.Paths;import javax.xml.bind.DatatypeConverter;
byte[] data = Files.readAllBytes(Paths.get(AUDIO_FOR_ONCE));int pkgNum = (int) Math.ceil((double) data.length / PKG_SIZE);for (int i = 1; i <= pkgNum; i++) { int lastIndex = i * PKG_SIZE; if (i == pkgNum) { lastIndex = data.length; } byte[] buf = Arrays.copyOfRange(data, (i - 1) * PKG_SIZE, lastIndex); String base64Str = DatatypeConverter.printBase64Binary(buf);
for (int i = 0; i < 60; i++) {
System.out.println("查询结果:"); TransmitOralProcessWithInitResponse res = client.TransmitOralProcessWithInit(req); System.out.println(TransmitOralProcessWithInitResponse.toJsonString(res)); if (res.getStatus().equals("Finished") || res.getStatus().equals("Failed")) { System.out.println("exit"); break; } else { req.setIsQuery(1L); // 设置为查询标识
} Thread.sleep(1000); // 时间间隔}
临时授权凭证
客户端 SDK 需要使用获取联合身份临时访问凭证生成临时密钥,保障密钥安全性。
package soe.v20180724;
import com.tencentcloudapi.common.Credential;import com.tencentcloudapi.common.exception.TencentCloudSDKException;import com.tencentcloudapi.sts.v20180813.StsClient;import com.tencentcloudapi.sts.v20180813.models.*;
public class GetFederationToken { public static void main(String[] args) { try { // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 Credential cred = new Credential("SecretId", "SecretKey"); // 实例化sts的client对象 StsClient client = new StsClient(cred, "ap-beijing"); // 实例化一个请求对象,每个接口都会对应一个request对象 GetFederationTokenRequest req = new GetFederationTokenRequest(); // 请求参数赋值 // soe:TransmitOralProcessWithInit 最小权限原则 req.setName("soe"); req.setPolicy( "{\"version\": \"2.0\",\"statement\": {\"effect\": \"allow\", \"action\":[\"soe:TransmitOralProcessWithInit\"],\"resource\": \"*\"}}"); //通过client对象调用GetFederationToken方法发起请求 GetFederationTokenResponse resp = client.GetFederationToken(req); // 输出json格式的字符串回包 System.out.println(GetFederationTokenResponse.toJsonString(resp)); } catch (TencentCloudSDKException e) { System.out.println(e.toString()); } }}
腾讯云官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠
发表评论