腾讯云智聆口语评测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折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

发表评论