录音文件识别

该文详细介绍了离线文件识别服务的工作流程,包括提交任务和查询结果两个阶段。用户需设置鉴权,通过HTTP POST提交包含音频链接的任务,获取任务ID,并通过ID查询识别结果。服务支持回调地址、语言选择、数字归一化和标点添加等参数。识别完成后,服务会返回识别文本、语音分句信息和说话人信息。同时,文章列举了各种状态码及其含义,提供了接入DEMO代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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指定需要访问的集群。
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 内容与业务方调用查询接口时服务端返回的格式相同。
additions额外参数1dict额外参数控制字段,dict 类型,里面的 key和value 均为 string 类型。
language语言2string"zh-CN" 表示中文,"en-US" 表示英文。
默认为中文。
use_itn数字归一化2string是否开启数字归一化。"True" 表示开启, "False" 表示关闭。
默认开启。
use_punc标点2string是否添加标点。"True" 表示开启, "False" 表示关闭。
默认开启。
with_speaker_info返回说话人信息2string"True" 表示返回说话人信息, "False"表示不返回。
默认不返回。

请求示例:

{
    "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"
    },
}

JSON

Copy and SaveGet Link

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"
    }
}

JSON

Copy and SaveGet Link

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"
}

JSON

Copy and SaveGet Link

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"
                }
            }
        ]
    }
}

JSON

Copy and SaveGet Link

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值