有奖捉虫:行业应用 & 管理与支持文档专题 HOT

环境依赖

安装 JDK7版本及以上,Java官网

安装 SDK

使用 Maven 安装Java SDK,在pom.xml中引入依赖,可以选择安装所有依赖或本产品相关依赖。更多内容前往?GitHub?或者?Gitee?。
所有依赖
相关依赖
<dependency>
<groupId>com.tencentcloudapi</groupId>
<!-- go to https://search.maven.org/search?q=tencentcloud-sdk-java and get the latest version. -->
<!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本 -->
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.828</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-common</artifactId>
<version>3.1.828</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-soe</artifactId>
<version>3.1.828</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-sts</artifactId>
<version>3.1.828</version>
</dependency>

使用 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 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:/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 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:/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 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:/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 反序列化,获取评测结果,判断是否查询到最终结果。
SessionID
base64转换
流式分片
异步轮询
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 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:/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());
}
}
}
?
?


http://www.vxiaotou.com