You need to enable JavaScript to run this app.
导航

录音文件识别标准版

最近更新时间2023.07.24 17:32:44

首次发布时间2021.12.20 14:44:12

1. 流程简介

录音文件识别服务的处理流程分为提交任务和查询结果两个阶段

  • 任务提交:提交音频链接,并获取服务端分配的任务 ID
  • 结果查询:通过任务 ID 查询转写结果

服务也支持回调通知方式。客户端在提交任务时注册回调地址,服务端转写完成后请求回调地址通知结果,不需要客户端主动查询。

2. 鉴权

设置鉴权内容,请参考鉴权方法

3. 提交任务

3.1 域名

火山地址:https://openspeech.bytedance.com/api/v1/auc/submit

3.2 请求

请求方式:HTTP POST。

请求和应答,均采用在 HTTP BODY 里面传输 JSON 格式字串的方式。

Header 需要加入内容类型标识:

Content-Type: application/json

3.2.1 请求字段

字段
说明
层级
格式
是否必填
备注
app应用相关配置
Application related configuration
1dict
appid应用标识
Application id
2string
token应用令牌
Application token
2string控制访问权限。
clusterAUC服务集群
Business cluster
2string指定需要访问的集群。在控制台创建应用并开通录音文件识别服务后,显示的 Cluster ID 字段。
user用户相关配置
User related configuration
1dict
uid用户标识
User id
2string用于区分同一appid下,不同用户的请求,建议采用 IMEI 或 MAC。
audio音频相关配置
Audio related configuration
1dict
url音频地址
Audio URL
2string需提供可下载的音频文件地址。
format音频容器格式
Audio format
2stringraw / wav / ogg / mp3 / mp4,默认以文件名后缀作为格式。
codec音频编码格式
Audio codec format
2stringraw / opus,默认为 raw(pcm)。
rate音频采样率
Audio sample rate
2int默认为 16000。
bits音频采样点位数
Audio bits per sample
2int默认为 16。
channel音频声道数
Audio channels
2int1(mono) / 2(stereo),默认为1。
request请求相关配置
Request related configuration
1dict
callback回调地址
call back url
2string业务方的 http 回调地址,识别结束后服务会用给 POST 方法请求回调地址,body 内容与业务方调用查询接口时服务端返回的格式相同。
boosting_table_name自学习平台上设置的热词词表名称2string热词功能和设置方法可以参考文档
additions额外参数1dict额外参数控制字段,dict 类型,里面的 key和value 均为 string 类型。
language语言2string默认为中文,所有语种见 支持语种
use_itn数字归一化2string是否开启数字归一化。"True" 表示开启, "False" 表示关闭。
默认开启。
use_punc标点2string是否添加标点。"True" 表示开启, "False" 表示关闭。
默认开启。
use_ddc顺滑2string是否开启顺滑。"True" 表示开启,"False" 表示关闭。目前只有中文、英文、日语支持顺滑
默认关闭
with_speaker_info返回说话人信息2string"True" 表示返回说话人信息, "False"表示不返回。
默认不返回。
enable_query使用回调时是否允许主动查询2string如果 submit 提交任务时使用回调功能,默认不能调用 query 接口查询结果。设置这个参数允许主动查询
"True": 使用回调时允许主动查询; "False": 使用回调时不允许主动查询。默认 "False"
channel_split多声道音频是否区分声道2string如果设为"True",则会在返回结果中使用channel_id标记,1为左声道,2为右声道。默认 "False"

3.2.2 支持语种

序号语言language code
1中文普通话(简体)zh-CN
粤语cant
四川话sc
上海话zh_shanghai
2英文en-US
3日语ja-JP
4韩语ko-KR
5法语fr-FR
6西班牙语es-MX
7葡萄牙语pt-BR
8印尼语id-ID

请求示例:

{
    "app": {
        "appid": "",
        "token": "",
        "cluster": ""
    },
    "user": {
        "uid": "388808087185088"
   },
    "audio": {
        "format": "mp3",
        "url": "http://xxx.com/obj/sample.mp3"
    },
    "additions": {
        "use_itn": "False",
        "with_speaker_info": "True"
    },
}

3.3 应答

应答格式: JSON

应答字段:

字段
说明
层级
格式
是否必填
备注
resp返回内容1dict
code状态码
Request Code
2int1000 为成功,非 1000 为失败。
message状态信息
Request message
2string失败时标记失败原因。
id任务 ID
task id
2string仅当提交成功时填写。

应答示例:

{
    "resp": {
        "code": "1000",
        "message": "Success",
        "id": "fc5aa03e-6ae4-46a3-b8cf-1910a44e0d8a"
    }
}
4. 查询结果

4.1 域名

火山地址:https://openspeech.bytedance.com/api/v1/auc/query

4.2 请求

请求方式:HTTP POST

请求和应答均采用在 HTTP BODY 里面传输 JSON 格式字串的方式

Header 需要加入内容类型标识:

Content-Type: application/json

请求示例:

{
    "appid": "",
    "token": "",
    "cluster": "",
    "id": "fc5aa03e-6ae4-46a3-b8cf-1910a44e0d8a"
}

4.3 应答

应答格式 :JSON。如果离线识别还没识别完,只会返回code和message,全部识别完后才会有识别结果的内容。

应答字段:

字段
说明
层级
格式
是否必填
备注
resp返回内容1dict
id请求标识
task id
2string
code请求状态号
task status code
2int
message请求状态信息
task proceeing message
2string
text识别结果文本
asr text
2tring
utterances识别结果语音分句信息
utterances info
2list分句列表。
start_time起始时间(毫秒)3int单个分句开始时间。
end_time结束时间(毫秒)3int单个分句结束时间。
words词粒度信息3dict词列表。
start_time起始时间(毫秒)4int单个词开始时间。
end_time结束时间(毫秒)4int单个词结束时间。
additions额外信息3dict
speaker说话人信息4string说话人结果,使用数字标识。

应答示例:

(1)返回文本的形式:

{
    "resp": {
        "id": "fc5aa03e-6ae4-46a3-b8cf-1910a44e0d8a",
        "code": 1000,
        "message": "Success",
        "text": "这是字节跳动, 今日头条母公司",
        "utterances": [
            {
                "text": "这是字节跳动",
                "start_time": 1500,
                "end_time": 3000,
                "words": [
                    {
                        "text": "这",
                        "start_time": 1500,
                        "end_time": 1700
                    },
                    {
                        "text": "是",
                        "start_time": 1700,
                        "end_time": 2000
                    },
                    {
                        "text": "字",
                        "start_time": 2000,
                        "end_time": 2200
                    },
                    {
                        "text": "节",
                        "start_time": 2200,
                        "end_time": 2600
                    },
                    {
                        "text": "跳",
                        "start_time": 2600,
                        "end_time": 2800
                    },
                    {
                        "text": "动",
                        "start_time": 2800,
                        "end_time": 3000
                    }
                ],
                "additions": {
                    "speaker": "1"
                }
            },
            {
                "text": "今日头条母公司",
                "start_time": 4000,
                "end_time": 6150,
                "words": [
                    {
                        "text": "今",
                        "start_time": 4000,
                        "end_time": 4200
                    },
                    {
                        "text": "日",
                        "start_time": 4200,
                        "end_time": 4420
                    },
                    {
                        "text": "头",
                        "start_time": 4500,
                        "end_time": 4800
                    },
                    {
                        "text": "条",
                        "start_time": 4800,
                        "end_time": 5000
                    },
                    {
                        "text": "母",
                        "start_time": 5000,
                        "end_time": 5200
                    },
                    {
                        "text": "公",
                        "start_time": 5400,
                        "end_time": 5800
                    },
                    {
                        "text": "司",
                        "start_time": 5850,
                        "end_time": 6150
                    }
                ],
                "additions": {
                    "speaker": "2"
                }
            }
        ]
    }
}
5. 错误码说明
错误码含义说明
1000识别成功
1001请求参数无效请求参数缺失必需字段 / 字段值无效 / 重复请求。
1002无访问权限token 无效 / 过期 / 无权访问指定服务。
1003访问超频当前 appid 访问 QPS 超出设定阈值。
1004访问超额当前 appid 访问次数超出限制。
1005服务器繁忙服务过载,无法处理当前请求。
1006请求中断当前请求已失效 / 发生错误。
1007 - 1009保留号段待定。
1010音频过长音频数据时长超出阈值。
1011音频过大音频数据大小超出阈值(暂定单包不超过2M)。
1012音频格式无效音频 header 有误 / 无法进行音频解码。
1013音频静音音频未识别出任何文本结果。
1014空音频下载的音频为空。
1015下载失败音频链接下载失败。
1016-1019保留号段待定。
1020识别等待超时等待就绪超时。
1021识别处理超时识别处理过程超时。
1022识别错误识别过程中发生错误。
1023 - 1029保留号段待定。
1030 - 1098保留号段待定。
1099未知错误未归类错误。
2000正在处理任务处理中。
2001排队中任务在等待队里中。
6. 接入 demo

Demo 中需要填写 appid、access_token、access_secret、cluster 字段信息,这些信息可以从控制台创建应用开通服务后获得。

#coding=utf-8
import requests
import json
import time
import os
import uuid

s = requests

appid = ''
token = ''
cluster = ''
audio_url = ''
service_url = 'https://openspeech.bytedance.com/api/v1/auc'

headers = {'Authorization': 'Bearer; {}'.format(token)}

def submit_task():
    request = {
        "app": {
            "appid": appid,
            "token": token,
            "cluster": cluster
        },
        "user": {
            "uid": "388808087185088_demo"
        },
        "audio": {
            "format": "wav",
            "url": audio_url
        },
        "additions": {
            'with_speaker_info': 'False',
        }
    }

    r = s.post(service_url + '/submit', data=json.dumps(request), headers=headers)
    resp_dic = json.loads(r.text)
    print(resp_dic)
    id = resp_dic['resp']['id']
    print(id)
    return id


def query_task(task_id):
    query_dic = {}
    query_dic['appid'] = appid
    query_dic['token'] = token
    query_dic['id'] = task_id
    query_dic['cluster'] = cluster
    query_req = json.dumps(query_dic)
    print(query_req)
    r = s.post(service_url + '/query', data=query_req, headers=headers)
    print(r.text)
    resp_dic = json.loads(r.text)
    return resp_dic


def file_recognize():
    task_id = submit_task()
    start_time = time.time()
    while True:
        time.sleep(2)
        # query result
        resp_dic = query_task(task_id)
        if resp_dic['resp']['code'] == 1000: # task finished
            print("success")
            exit(0)
        elif resp_dic['resp']['code'] < 2000: # task failed
            print("failed")
            exit(0)
        now_time = time.time()
        if now_time - start_time > 300: # wait time exceeds 300s
            print('wait time exceeds 300s')
            exit(0)


if __name__ == '__main__':
    file_recognize()

7. 注意事项

  • 提交的音频应该小于 512MB,并且时长小于 4 小时
  • 半小时内提交的总时长不能超过 300 小时,如果有更大的需求,请联系售前专家
  • 转写结果在服务端保存 24 小时,超时后会查询失败