【AIGC】使用Python实现科大讯飞语音服务ASR转录功能:完整指南

文章目录

  • 讯飞ASR转写API完整指南
    • 1. 引言
    • 2. 讯飞ASR API介绍
    • 3. API参数说明
      • 3.1 认证参数
      • 3.2 上传参数
      • 3.3 查询结果参数
      • 3.4 orderResult 字段
      • 3.5 Lattice 字段
      • 3.6 json_1best 字段
      • 3.7 st 字段
    • 4. Python代码实现
      • 4.1 生成签名
      • 4.2 上传音频文件
      • 4.3 获取转写结果
      • 4.4 解析转写结果
    • 5. 请求与返回示例
      • 5.1 成功返回示例
      • 5.4 异步回调
        • 1. 转写结束异步回调状态
    • 6. 文档地址
    • 7. 结论

讯飞ASR转写API完整指南

1. 引言

在这篇博客中,我们将详细解析如何使用讯飞ASR(自动语音识别)API进行音频转写,包括上传音频、查询转写结果及解析返回数据。本文将涵盖API的参数说明,并提供完整的Python代码,确保代码能够顺利执行。

2. 讯飞ASR API介绍

讯飞ASR API提供了一整套音频转写的解决方案,主要流程如下:

  1. 生成签名 - 认证请求的合法性。
  2. 上传音频 - 通过URL方式或本地文件上传音频。
  3. 查询结果 - 轮询转写结果,等待识别完成。
  4. 解析结果 - 处理返回的JSON数据,提取文本和说话人信息。

3. API参数说明

3.1 认证参数

参数名说明
appId讯飞开发者平台分配的应用ID
secret_key用于生成签名的密钥
ts时间戳,单位为秒
signa认证签名,由appId、ts和secret_key计算得出

3.2 上传参数

参数名说明
fileName音频文件名称
fileSize文件大小(若使用URL方式可随意填写)
duration音频时长(单位秒,可随机填写)
language语言(cn代表中文)
audioMode上传模式(urlLink 代表通过URL上传)
audioUrl音频文件的URL(需要URL编码)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.3 查询结果参数

参数名说明
orderId订单ID,用于查询转写结果
resultType返回结果类型(transfer 表示最终转写文本)

成功

{"code": "000000","descInfo": "success","content": {"orderId": "DKHJQ202209021522090215490FAAE7DD0008C","taskEstimateTime": 28000}
}

失败

{"code": "26600","descInfo": "转写业务通用错误"
}

3.4 orderResult 字段

参数名类型说明
latticeList做顺滑功能的识别结果
lattice2List未做顺滑功能的识别结果,当开启顺滑和后语规整后 orderResult 才返回 lattice2 字段(需要开通权限)
labelObject转写结果标签信息,用于补充转写结果相关信息,标记转写结果角色和声道的对应关系

3.5 Lattice 字段

参数名类型说明
json_1bestString单个 VAD 的结果的 JSON 内容

3.6 json_1best 字段

参数名类型说明
stObject单个句子的结果对象

3.7 st 字段

参数名类型说明
bgString单个句子的开始时间,单位毫秒
edString单个句子的结束时间,单位毫秒
rlString分离的角色编号,取值正整数,需开启角色分离的功能才返回对应的分离角色编号
rtList输出词语识别结果集合

4. Python代码实现

4.1 生成签名

在这里插入图片描述

def generate_signa(self):"""生成签名:return: 签名字符串"""appid = self.appidts = self.tsbase_string = appid + tsmd5 = hashlib.md5()md5.update(base_string.encode('utf-8'))base_string_md5 = md5.hexdigest()key = self.secret_key.encode('utf-8')message = base_string_md5.encode('utf-8')hmac_obj = hmac.new(key, message, hashlib.sha1)signa = base64.b64encode(hmac_obj.digest()).decode('utf-8')return signa

4.2 上传音频文件

1、文件上传
#概述
首先调用文件上传接口,上传待转写音频文件的基本信息(文件名、大小等)和相关的可配置参数。
调用成功,返回订单ID(orderId,用于查询结果或者联调排查问题时使用),是后续接口的必传参数。
#请求示例

https://raasr.xfyun.cn/v2/api/upload?duration=200&signa=Je5YsBvPcsbB4qy8Qvzd367fiv0%3D&fileName=%E9%98%B3%E5%85%89%E6%80%BB%E5%9C%A8%E9%A3%8E%E9%9B%A8%E5%90%8E.speex-wb&fileSize=11895&sysDicts=uncivilizedLanguage&appId=3e79d91c&ts=1662101767

#URL

 POST https: //raasr.xfyun.cn/v2/api/upload

#请求头

Content-Type: application/json; charset=UTF-8,Chunked: false

#signa生成

def upload(self):"""上传音频文件:return: 上传响应结果"""try:file_name = os.path.basename(urllib.parse.unquote(self.audio_url))param_dict = {"appId": self.appid,"signa": self.signa,"ts": self.ts,"fileName": file_name,"fileSize": "10000","duration": "200","language": "cn","audioMode": "urlLink","audioUrl": urllib.parse.quote(self.audio_url, safe='')}url = lfasr_host + api_upload + "?" + urllib.parse.urlencode(param_dict)response = requests.post(url, headers={"Content-Type": "application/json; charset=UTF-8"})result = json.loads(response.text)if str(result.get('code', '')) != '000000':return Nonereturn resultexcept Exception as e:return None

4.3 获取转写结果

status == 4

def get_result(self):"""获取转写结果:return: 转写结果"""uploadresp = self.upload()if not uploadresp:return Nonetry:orderId = uploadresp['content']['orderId']param_dict = {"appId": self.appid,"signa": self.signa,"ts": self.ts,"orderId": orderId,'roleType':1,'roleNum':2,"resultType": "transfer"}url = lfasr_host + api_get_result + "?" + urllib.parse.urlencode(param_dict)status = 3while status == 3:response = requests.post(url, headers={"Content-Type": "application/json; charset=UTF-8"})result = json.loads(response.text)if str(result.get('code', '')) != '000000':continuestatus = result['content']['orderInfo']['status']if status == 4:return resulttime.sleep(5)return Noneexcept Exception as e:return None

查询结构返回数据

{"code": "000000","descInfo": "success","content": {"orderInfo": {"orderId": "DKHJQ2022090510220905100562536FEF00062","failType": 0,"status": 4,"originalDuration": 200,"realDuration": 1878},"orderResult": "{\"lattice\":[{\"json_1best\":\"{\\\"st\\\":{\\\"sc\\\":\\\"0.86\\\",\\\"pa\\\":\\\"0\\\",\\\"rt\\\":[{\\\"ws\\\":[{\\\"cw\\\":[{\\\"w\\\":\\\"\\\",\\\"wp\\\":\\\"n\\\",\\\"wc\\\":\\\"1.0000\\\"}],\\\"wb\\\":1,\\\"we\\\":16},{\\\"cw\\\":[{\\\"w\\\":\\\"\\\",\\\"wp\\\":\\\"n\\\",\\\"wc\\\":\\\"1.0000\\\"}],\\\"wb\\\":17,\\\"we\\\":36},{\\\"cw\\\":[{\\\"w\\\":\\\"\\\",\\\"wp\\\":\\\"n\\\",\\\"wc\\\":\\\"1.0000\\\"}],\\\"wb\\\":37,\\\"we\\\":52},{\\\"cw\\\":[{\\\"w\\\":\\\"\\\",\\\"wp\\\":\\\"n\\\",\\\"wc\\\":\\\"1.0000\\\"}],\\\"wb\\\":53,\\\"we\\\":80},{\\\"cw\\\":[{\\\"w\\\":\\\"测试\\\",\\\"wp\\\":\\\"n\\\",\\\"wc\\\":\\\"1.0000\\\"}],\\\"wb\\\":81,\\\"we\\\":116},{\\\"cw\\\":[{\\\"w\\\":\\\"音频\\\",\\\"wp\\\":\\\"n\\\",\\\"wc\\\":\\\"1.0000\\\"}],\\\"wb\\\":117,\\\"we\\\":172},{\\\"cw\\\":[{\\\"w\\\":\\\"\\\",\\\"wp\\\":\\\"p\\\",\\\"wc\\\":\\\"0.0000\\\"}],\\\"wb\\\":172,\\\"we\\\":172},{\\\"cw\\\":[{\\\"w\\\":\\\"\\\",\\\"wp\\\":\\\"g\\\",\\\"wc\\\":\\\"0.0000\\\"}],\\\"wb\\\":172,\\\"we\\\":172}]}],\\\"bg\\\":\\\"50\\\",\\\"rl\\\":\\\"0\\\",\\\"ed\\\":\\\"1840\\\"}}\"}],\"lattice2\":[{\"lid\":\"0\",\"end\":\"1840\",\"begin\":\"50\",\"json_1best\":{\"st\":{\"sc\":\"0.86\",\"pa\":\"0\",\"rt\":[{\"nb\":\"1\",\"nc\":\"1.0\",\"ws\":[{\"cw\":[{\"w\":\"\",\"wp\":\"n\",\"wc\":\"1.0000\"}],\"wb\":1,\"we\":16},{\"cw\":[{\"w\":\"\",\"wp\":\"n\",\"wc\":\"1.0000\"}],\"wb\":17,\"we\":36},{\"cw\":[{\"w\":\"\",\"wp\":\"n\",\"wc\":\"1.0000\"}],\"wb\":37,\"we\":52},{\"cw\":[{\"w\":\"\",\"wp\":\"n\",\"wc\":\"1.0000\"}],\"wb\":53,\"we\":80},{\"cw\":[{\"w\":\"测试\",\"wp\":\"n\",\"wc\":\"1.0000\"}],\"wb\":81,\"we\":116},{\"cw\":[{\"w\":\"音频\",\"wp\":\"n\",\"wc\":\"1.0000\"}],\"wb\":117,\"we\":172},{\"cw\":[{\"w\":\"\",\"wp\":\"p\",\"wc\":\"0.0000\"}],\"wb\":172,\"we\":172},{\"cw\":[{\"w\":\"\",\"wp\":\"g\",\"wc\":\"0.0000\"}],\"wb\":172,\"we\":172}]}],\"pt\":\"reserved\",\"bg\":\"50\",\"si\":\"0\",\"rl\":\"0\",\"ed\":\"1840\"}},\"spk\":\"段落-0\"}]}","taskEstimateTime": 0}

4.4 解析转写结果

def parse_result(self, result_json):"""解析转写结果,按说话人分组"""try:result = json.loads(result_json)speakers = {}if 'lattice2' in result:for item in result['lattice2']:speaker = item.get('spk', '未知')json_1best = json.loads(item['json_1best'])text = "".join(cw['w'] for rt in json_1best.get('st', {}).get('rt', []) for ws in rt.get('ws', []) for cw in ws.get('cw', []) if 'w' in cw)speakers.setdefault(speaker, []).append(text)return speakersexcept Exception as e:return None

5. 请求与返回示例

5.1 成功返回示例

{"code": "000000","descInfo": "success","content": {"orderId": "DKHJQ202209021522090215490FAAE7DD0008C","taskEstimateTime": 28000}
}

5.4 异步回调

1. 转写结束异步回调状态

当订单转写流程结束时会回调用户(如果录音文件转写接口 upload 传了callbackUrl),会把订单号和订单状态返回,具体的格式和参数说明如下: 回调地址示例:

GET http://ip:prot/server/xxx?orderId=DKHJQ202004291620042916580FBC96690001F&status=1

在这里插入图片描述

6. 文档地址

讯飞ASR文档

7. 结论

本文详细讲解了讯飞ASR API的使用流程,包括如何生成签名、上传音频、查询结果并解析返回数据。希望这篇文章对你有所帮助!如果对你有帮助,帮忙给个一键三连,求求了,各位吴彦祖,刘亦菲们

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24015.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软开源神器OmniParser-v2.0本地部署教程

安装python环境 我这里是以前安装好的版本:python 3.11.5,这里不再介绍,有需要的可以在网上找教程。 安装Anaconda 我这里是以前安装好的版本:conda 23.7.4,这里也不再介绍,有需要的可以在网上找教程。 …

LLM+多智能体协作:基于CrewAI与DeepSeek的邮件自动化实践

文章目录 引言理解 Flows(工作流)与 Crews(协作组)一、环境准备与工具安装1.1 Python环境搭建1.2 创建并激活虚拟环境1.3 安装核心依赖库(crewai、litellm) 二、本地DeepSeek R1大模型部署2.1 Ollama框架安…

Linux——高级IO

一、前言概念 IO拷贝等待 1. 同步(Synchronous) vs 异步(Asynchronous) 核心区别:关注的是消息通知的机制。 同步:调用方主动等待结果,需持续检查任务是否完成。 异步:调用方发起…

Linux:基础IO

文章目录 一、理解"文件"1、狭义上的理解2、广义上的理解3、文件操作的认知4、系统角度 二、C语言文件接口1、ls /proc/[进程id] -l 命令查看当前正在运⾏进程的信息2、stdin 和 stdout 和 stderr 三、系统文件 I/O1、标志位传递的一种方法2、系统调用 open 三、文件…

zabbix数据采集以及自定义监控

目录 1.数据采集 2.自定义监控 2.1客户端 2.2服务端 ​​​​​​​1.数据采集 点击最新数据页面如下图 往下滑查看具体数据 并点击查看图像就可以看到图像了 就可以看到如下图内容 2.自定义监控 我们通过zabbix客户端任何模板就可以监控我们想要的任何资源 如果…

02.25 继承和多态

编写一个如下场景: 有一个英雄Hero类,私有成员,攻击,防御,速度,生命值,以及所有的set get 方法 编写一个 武器 Weapon 类,拥有私有成员攻击力,以及set get 方法 编写一个…

6. grafana的graph简介

1. Settings功能 2. Visualization功能 (可视化的方式,后续会写一些) 3. Display 功能(显示方面的设置) bars 柱状图方式显示 lines(不选不会出功能) line width 线条的粗细 staircase 会让折…

前缀和代码解析

前缀和是指数组一定范围的数的总和,常见的有两种,一维和二维,我会用两道题来分别解析 一维 DP34 【模板】前缀和 题目: 题目解析: 暴力解法 直接遍历数组,遍历到下标为 l 时,开始进行相加,直到遍历到下标为 r ,最后返回总和.这样做的时间复杂度为: O(n) public class Main …

RoCBert:具有多模态对比预训练的健壮中文BERT

摘要 大规模预训练语言模型在自然语言处理(NLP)任务上取得了最新的最优结果(SOTA)。然而,这些模型容易受到对抗攻击的影响,尤其是对于表意文字语言(如中文)。 在本研究中&#xff0…

【原创工具】文件清单生成器 By怜渠客

【原创工具】文件清单生成器 By怜渠客 刚在论坛看到了一个文件列表生成器 文件列表生成器 - 吾爱破解 - 52pojie.cn ,和我去年写的一个软件很像,当时我也是有需求,要把一个文件夹里及其子文件夹里所有的文件列出来,就临时弄了个小…

深度学习-6.用于计算机视觉的深度学习

Deep Learning - Lecture 6 Deep Learning for Computer Vision 简介深度学习在计算机视觉领域的发展时间线 语义分割语义分割系统的类型上采样层语义分割的 SegNet 架构软件中的SegNet 架构数据标注 目标检测与识别目标检测与识别问题两阶段和一阶段目标检测与识别两阶段检测器…

【Linux】初始操作系统和进程(一)

目录 前言: 一、冯诺依曼体系结构: 二、操作系统: 1.操作系统是什么? 2.为什么要有操作系统? 3.操作系统是如何管理下层的? 4.操作系统是如何对上层提供服务的? 三、进程: …

【链 表】

【链表】 一级目录1. 基本概念2. 算法分析2.1 时间复杂度2.2 空间复杂度2.3 时空复杂度互换 线性表的概念线性表的举例顺序表的基本概念顺序表的基本操作1. 初始化2. 插入操作3. 删除操作4. 查找操作5. 遍历操作 顺序表的优缺点总结优点缺点 树形结构图形结构单链表基本概念链表…

python-leetcode-字符串解码

394. 字符串解码 - 力扣(LeetCode) class Solution:def decodeString(self, s: str) -> str:stack []num 0curr_str ""for char in s:if char.isdigit():num num * 10 int(char)elif char [:stack.append((curr_str, num))curr_str, …

力扣 下一个排列

交换位置,双指针,排序。 题目 下一个排列即在组成的排列中的下一个大的数,然后当这个排列为降序时即这个排列最大,因为大的数在前面,降序排列的下一个数即升序。所以,要是想找到当前排列的下一个排列&…

ProGuard加密混淆SpringBoot应用代码

背景 我们的项目是基于SpringCloud架构的微服务应用,采用Docker离线部署方式交付客户,通过授权证书来控制应用的许可功能模块和使用时间。我们已经在代码层已经实现: 基于多维度硬件指纹的绑定验证,cpu id、mac地址、磁盘序列、…

动态链接器(九):.init和.init_array

ELF文件中的.init和.init_array段是程序初始化阶段的重要组成部分,用于在main函数执行前完成必要的初始化操作。 1 .init段和.init_array 段 1.1 作用 .init段包含编译器生成的初始化代码,通常由运行时环境(如C标准库的启动例程&#xff0…

Ollama微调

Ollama是一款开源工具,其目标是简化大语言模型在本地环境的部署和使用。它支持多种流行的开源大语言模型,如 Llama 2、Qwen2.5等。在上一篇文章中我们部署Ollama,并使用简单命令管理Ollama。接下来我们学习Ollama的高级应用。通过Ollama的Mod…

DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!

项目地址:GitHub - deepseek-ai/FlashMLA 开源日历:2025-02-24起 每日9AM(北京时间)更新,持续五天! ​ 一、开源周震撼启幕 继上周预告后,DeepSeek于北京时间今晨9点准时开源「FlashMLA」,打响开源周五连…

(七)懒加载预加载

(一)懒加载 1. 什么是懒加载 懒加载,即延迟加载。在访问页面时,先将 img 元素或其他元素的背景图片路径替换为占位图(通常是 1*1px 的小图片),仅当元素进入浏览器可视区域时,才设置…