接口描述
目录
1. 英语口语评测
1.1. 接口功能
对句子级别的音频文件进行口语评测,给出相应(包括音素/单词/句子)的发音和流利度评测分。
1.2. 请求方式
1.3. 请求参数说明
1.3.1. 请求头部(HTTP Header)
字段名 |
是否必选 |
数据类型 |
描述 |
---|---|---|---|
dmid |
是 |
String |
联系DM技术支持获得 |
1.3.2. 请求体(Content-Type: JSON)
字段名 |
是否必选 |
数据类型 |
描述 |
---|---|---|---|
wave_base64 |
是 |
String |
测评音频文件(wav格式, 16k, 16bit, 单通道) base64编码字符串 |
text |
是 |
String |
测评音频对应的目标文本文件(除去不发音字符) utf8字符串 |
speaker_type |
是 |
String |
说话人类型选项,可选 “adult” 和 “child” |
1.4. 正确请求示例
Header:
{
"dmid": ""
"Content-Type": "application/json"
}
-----------------------------------------------------------------------
Body:
{
"audio": "data:audio/wav;base64,音频base64编码...",
'text': "目标抄本",
'speaker_type': "说话人类型",
}
1.5. 返回数据说明(Content-type: JSON)
字段名 |
是否必选 |
数据类型 |
说明 |
---|---|---|---|
code |
是 |
Int |
code为0时, 业务正常, code不为0时, 业务出错 |
data |
否(code为0时返回) |
JSONObject |
具体的返回数据(见data字段说明) |
error |
否(code不为0时返回) |
String |
当code不为0时, 输出出出错原因 |
data字段说明
字段名 |
数据类型 |
说明 |
---|---|---|
duration |
float |
音频时长(s) |
text |
String |
音频文件对应标注文本 |
refer_ipas |
String |
参考音标 |
speaker_type |
String |
说话人类型选项,可选 “adult” 和 “child” |
random_reading |
String |
乱读检测 |
sentense_score |
Dict |
{‘pronounce’: 句子发音得分} |
words |
List |
[单词, 单词得分] |
ipas |
List |
[音素, 音素得分] |
- 注:random_reading 字段有三种输出:
“True” # 代表随机读
“False” # 代表音频正常读
1.6. 正确返回示例
{
"code":0,
"data":{
"duration": 2.092,
"text":"listen i goes listen",
"refer_ipas": 'ˈlɪsən aɪ goʊz ˈlɪsən',
"speaker_type":"child",
"random_reading":"False",
"sentense_score":{'pronounce': 86, 'fluent': 91},
"words":[['listen', 100], ['i', 100], ['goes', 75], ['listen', 100]],
"ipas":[['l', 1.0], ["'ɪ", 1.0], ['s', 1.0], ['ə', 1.0], ['n', 1.0],\
["'aɪ", 1.0], ['g', 0.72], ["'oʊ", 0.71], ['z', 0.84], ['l', 1.0],\
["'ɪ", 1.0], ['s', 1.0], ['ə', 1.0], ['n', 1.0]],
"reqid": 'd4d9f45a39e7475aa9ff621427979c19'
} //正确返回数据对象
}
1.7. 错误返回示例
{
"code":500, //使用http statusCode
"error":"错误信息描述"
}
1.8. 错误码
错误码 |
说明 |
修复方法 |
---|---|---|
401 |
鉴权失败 |
联系DM技术支持获取dmid |
1.9. 请求示例代码(Python)
import requests
import base64
service_address = 'http://dmai-en-assess-2.dm-ai.com/model.ai/'
dmid = "dmid-code"
class RequestTest(object):
@classmethod
def _request(cls, name, params=None):
r = requests.post(service_address + name, json=params, headers={'dmid': dmid})
return r.json()
@classmethod
def _assess(cls, base64wav, text, speaker_type):
return cls._request('speech-assess', {'wave_base64': base64wav,
'text': text,
'speaker_type': speaker_type,
})
if __name__ == '__main__':
wav_file = "音频文件" # wav, 16khz, 16bit
text_file = "目标抄本文件"
speaker_type = "说话人类型" "adult/child"
wav, sr = torchaudio.backend.sox_backend.load_wav(wav_file)
wav_array = wav.cpu().detach().numpy()
wav_array = np.array(wav_array, dtype=np.float16)
base64wav = base64.b64encode(wav_array).decode()
text = open(text_file, 'r').read().lower()
print('result: ', RequestTest._assess(base64wav, text, speaker_type))