1. 流程简介 #

离线文件识别服务整体处理流程分为提交请求和查询结果两个阶段,首先提交音频链接开始识别,并获取分配的任务ID,然后通过任务 ID 查询获取结果。

判断 录音跟歌段 相似 python 识别录音歌曲_开发语言

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 (配置)

1

dict


appid

应用标识

Application id

2

string


token

应用令牌

Application token

2

string


控制访问权限。

cluster

AUC服务集群

Business cluster

2

string


指定需要访问的集群。

user

用户相关配置

User related configuration (配置)

1

dict


uid

用户标识

User id

2

string


用于区分同一appid下,不同用户的请求,建议采用 IMEI 或 MAC。

audio (音频)

音频相关配置

Audio (音频) related configuration (配置)

1

dict


url

音频地址

Audio (音频) URL

2

string


需提供可下载的音频文件地址。

format

音频容器格式

Audio (音频) format

2

string


RAW / WAV / OGG / MP3 / MP4,默认以文件名后缀作为格式。

codec (编解码器)

音频编码格式

Audio (音频) codec (编解码器) format

2

string

RAW / OPUS (巨著) ,默认为 RAW(PCM)。

rate

音频采样率

Audio (音频) sample rate

2

int

默认为 16000。

bits

音频采样点位数

Audio (音频) bits per sample

2

int

默认为 16。

channel

音频声道数

Audio (音频) channels

2

int

1( mono (单声道) ) / 2( stereo (立体声) ),默认为1。

request

请求相关配置

Request related configuration (配置)

1

dict

callback (回调)

回调地址

call back url

2

string

业务方的 http 回调地址,识别结束后服务会用给 POST 方法请求回调地址,body 内容与业务方调用查询接口时服务端返回的格式相同。

additions

额外参数

1

dict

额外参数控制字段,dict 类型,里面的 key和value 均为 string 类型。

language

语言

2

string

"zh-CN" 表示中文,"en-US" 表示英文。

默认为中文。

use_itn

数字归一化

2

string

是否开启数字归一化。"True" 表示开启, "False" 表示关闭。

默认开启。

use_punc

标点

2

string

是否添加标点。"True" 表示开启, "False" 表示关闭。

默认开启。

with_speaker_info

返回说话人信息

2

string

"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

判断 录音跟歌段 相似 python 识别录音歌曲_java_02

Copy and SaveGet Link

3.3 应答 #

应答格式: JSON

应答字段:

字段

说明

层级

格式

是否必填

备注

resp

返回内容

1

dict


code

状态码

Request Code

2

int


1000 为成功,非 1000 为失败。

message

状态信息

Request message

2

string


失败时标记失败原因。

id

任务 ID

task id

2

string

仅当提交成功时填写。

应答示例:

{
    "resp": {
        "code": "1000",
        "message": "Success",
        "id": "fc5aa03e-6ae4-46a3-b8cf-1910a44e0d8a"
    }
}

JSON

判断 录音跟歌段 相似 python 识别录音歌曲_java_02

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

判断 录音跟歌段 相似 python 识别录音歌曲_判断 录音跟歌段 相似 python_04

Copy and SaveGet Link

4.3 应答 #

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

应答字段:

字段

说明

层级

格式

是否必填

备注

resp

返回内容

1

dict


id

请求标识

task id

2

string


code

请求状态号

task status code

2

int


message

请求状态信息

task proceeing message

2

string


text

识别结果文本

asr text

2

tring

utterances (话语)

识别结果语音分句信息

utterances (话语) info

2

list

分句列表。

start_time

起始时间(毫秒)

3

int

单个分句开始时间。

end_time

结束时间(毫秒)

3

int

单个分句结束时间。

words

词粒度信息

3

dict

词列表。

start_time

起始时间(毫秒)

4

int

单个词开始时间。

end_time

结束时间(毫秒)

4

int

单个词结束时间。

additions

额外信息

3

dict

speaker

说话人信息

4

string

说话人结果,使用数字标识。

应答示例:

(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

判断 录音跟歌段 相似 python 识别录音歌曲_JSON_05

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()