Python SDK

最近更新时间:2024-07-25 11:17:31

我的收藏

环境依赖

安装 Python2.7,3.6 - 3.9版本,Python 官网

安装 SDK

使用 pip 安装 Python SDK,可以选择安装所有依赖或本产品相关依赖。更多内容前往 Github 仓库 或者 Gitee 仓库 。
所有依赖
相关依赖
pip install --upgrade tencentcloud-sdk-python
pip install --upgrade tencentcloud-sdk-python-common tencentcloud-sdk-python-soe tencentcloud-sdk-python-sts

使用 SDK

可通过 控制台 生成代码进行调用或者参考下方示例,密钥获取可参考 快速入门

本地音频文件评测

发音数据传输附带初始化:直接调用 发音数据传输接口附带初始化过程 完成一次性评测。
# -*- coding: utf-8 -*-
# 发音数据传输接口附带初始化过程(https://cloud.tencent.com/document/product/884/32605)
import json
import os
import uuid
import base64

from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.soe.v20180724 import soe_client, models


# 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
# 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
# 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
cred = credential.Credential("SecretId", "SecretKey")
# 实例化soe的client对象
client = soe_client.SoeClient(cred, "")

# 实例化发音数据传输接口请求对象
req = models.TransmitOralProcessWithInitRequest()

# 请求参数赋值
SessionId = str(uuid.uuid1()) # 使用uuid作为请求SessionId
# 读取音频文件,
music_file = "SOEMUSIC/apple.mp3" # 音频文件地址
with open(music_file, "rb") as f:
base64_data = base64.b64encode(f.read()).decode() # 读取音频文件byte数据转成base64格式

params = {
"SeqId": 1,
"IsEnd": 1,
"VoiceFileType": 3,
"VoiceEncodeType": 1,
"UserVoiceData": base64_data,
"SessionId": SessionId,
"RefText": "{::cmd{F_TDET=true}}山",
"WorkMode": 1,
"EvalMode": 1,
"ServerType": 1,
"ScoreCoeff": 1.0
}
req.from_json_string(json.dumps(params))
try:
# 通过client对象调用TransmitOralProcessWithInit方法发起请求
resp = client.TransmitOralProcessWithInit(req)
# 输出json格式的字符串回包
print(resp.to_json_string())

except TencentCloudSDKException as err:
print(err)



评测超时处理

如果本地文件过大,可能会导致评测超时。可以选用如下方案:
1. 流式分片传输:将发音数据进行分片处理,减少每次评测的时间。
2. 异步查询:使用异步功能将发音数据先上传,然后使用查询功能查询结构。
流式分片传输
异步查询
from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.soe.v20180724 import soe_client, models
import uuid
import json
import os
import base64
import math

# 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
# 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
# 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
cred = credential.Credential("SecretId", "SecretKey")
# 实例化soe的client对象
client = soe_client.SoeClient(cred, "")

# 实例化发音数据传输接口请求对象
req = models.TransmitOralProcessWithInitRequest()

# 请求参数赋值
SessionId = str(uuid.uuid1()) # 使用uuid作为请求SessionId
slice_num = 100 * 1024 # 分片大小, 1 * 1024即为1k

# 读取音频文件,使用本地音频文件录音替换apple.mp3
music_file = "SOEMUSIC/para.mp3"
with open(music_file, "rb") as f:
content = f.read()
content_len = len(content)
# 分片数量计算
pkg_num = math.ceil(content_len / slice_num)
# 开始分片并传输
for j in range(int(pkg_num)):
last_index = content_len if j + 1 == pkg_num else (j + 1) * slice_num
IsEnd = 1 if j + 1 == pkg_num else 0
send_content = content[j * slice_num:last_index]
base64_data = base64.b64encode(send_content).decode()
params = {
"SeqId": j + 1,
"IsEnd": IsEnd,
"VoiceFileType": 3,
"VoiceEncodeType": 1,
"UserVoiceData": base64_data,
"SessionId": SessionId,
"RefText": "apple",
"WorkMode": 1,
"EvalMode": 0,
"ServerType": 0,
"ScoreCoeff": 1.0
}
req.from_json_string(json.dumps(params))
try:
# 通过client对象调用TransmitOralProcessWithInit方法发起请求
resp = client.TransmitOralProcessWithInit(req)
# 输出json格式的字符串回包
print(resp.to_json_string())

except TencentCloudSDKException as err:
print(err)
break
# -*- coding: utf-8 -*-
# 发音数据传输接口附带初始化过程(https://cloud.tencent.com/document/product/884/32605)
import json
import os
import time
import uuid
import base64

from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.soe.v20180724 import soe_client, models

# 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
# 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
# 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
cred = credential.Credential("SecretId", "SecretKey")
# 实例化soe的client对象
client = soe_client.SoeClient(cred, "")

# 实例化发音数据传输接口请求对象
req = models.TransmitOralProcessWithInitRequest()

# 请求参数赋值
SessionId = str(uuid.uuid1()) # 使用uuid作为请求SessionId
# 读取音频文件,
music_file = "SOEMUSIC/para.mp3" # 音频文件地址
with open(music_file, "rb") as f:
base64_data = base64.b64encode(f.read()).decode() # 读取音频文件byte数据转成base64格式

params = {
"SeqId": 1,
"IsEnd": 1,
"VoiceFileType": 3,
"VoiceEncodeType": 1,
"UserVoiceData": base64_data,
"SessionId": SessionId,
"RefText": "apple",
"WorkMode": 1,
"EvalMode": 2,
"ServerType": 0,
"ScoreCoeff": 1.0,
"IsAsync": 1

}
req.from_json_string(json.dumps(params))

# 异步查询
for i in range(60):
try:
# 通过client对象调用TransmitOralProcess方法发起请求
resp = client.TransmitOralProcessWithInit(req)
# 输出json格式的字符串回包
print(resp.to_json_string())
json_resp = resp.to_json_string() # 获取结果
status = json.loads(json_resp)["Status"] # 查看评测状态
if status == "Finished": # 判断是否评测结束
break
else:
params["IsQuery"] = 1 # 查询
time.sleep(1)
print("查询结果")
except TencentCloudSDKException as err:
print(err)
break



使用方法说明

1,SessionID :使用 uuid 来作为 SessionID,用于区分不同的音频。
2,base64 转换:读取本地音频文件,转换成 base64 数据进行评测。
3,流式分片 base64 转换:读取本地音频文件,将音频进行分片,转换成 base64 数据进行评测。
4,轮询查询:使用 json 反序列化,获取评测结果,判断是否查询到最终结果。
SessionID
base64转换
流式分片
轮询查询
import uuid #python自带
SessionId = str(uuid.uuid1()) # 使用uuid作为请求SessionId
import base64 #python自带
with open("apple.mp3", "rb") as f: #使用二进制读取音频文件apple.mp3,请自行替换成本地音频文件地址
base64_data = base64.b64encode(f.read).decode() #音频byte数据转base64
with open(music_file, "rb") as f:
content = f.read()
content_len = len(content)
# 分片数量计算
pkg_num = math.ceil(content_len / slice_num)
# 开始分片并传输
for j in range(int(pkg_num)):
last_index = content_len if j + 1 == pkg_num else (j + 1) * slice_num
IsEnd = 1 if j + 1 == pkg_num else 0
send_content = content[j * slice_num:last_index]
base64_data = base64.b64encode(send_content).decode()
# 异步查询
for i in range(60):
try:
# 通过client对象调用TransmitOralProcess方法发起请求
resp = client.TransmitOralProcessWithInit(req)
# 输出json格式的字符串回包
print(resp.to_json_string())
json_resp = resp.to_json_string() # 获取结果
status = json.loads(json_resp)["Status"] # 查看评测状态
if status == "Finished": # 判断是否评测结束
break
else:
params["IsQuery"] = 1 # 查询
time.sleep(1)
print("查询结果")
except TencentCloudSDKException as err:
print(err)
break

临时授权凭证

客户端 SDK 需要使用 获取联合身份临时访问凭证 生成临时密钥,保障密钥安全性。
# -*- coding: utf-8 -*-
# 获取联合身份临时访问凭证(https://cloud.tencent.com/document/product/1312/48195)
import json
import os

from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.sts.v20180813 import sts_client, models


# 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
# 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
# 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
cred = credential.Credential("SecretId", "SecretKey")
# 实例化sts的client对象
client = sts_client.StsClient(cred, "ap-beijing")

# 实例化获取联合身份临时访问凭证请求对象
req = models.GetFederationTokenRequest()
# 请求参数赋值
# soe:TransmitOralProcessWithInit 最小权限原则
params = {
"Name": "soe",
"Policy": "{\\"version\\": \\"2.0\\",\\"statement\\": {\\"effect\\": \\"allow\\", \\"action\\":[\\"soe:TransmitOralProcessWithInit\\"],\\"resource\\": \\"*\\"}}"
}
req.from_json_string(json.dumps(params))
try:
# 通过client对象调用GetFederationToken方法发起请求
resp = client.GetFederationToken(req)
# 输出json格式的字符串回包
print(resp.to_json_string())

except TencentCloudSDKException as err:
print(err)