ASR 语音识别接口封装和分析

news2024/11/25 14:50:17

这个文档主要是介绍一下我自己封装了 6 家厂商的短语音识别实时流语音识别接口的一个包,以及对这些接口的一个对比。分别是,阿里,快商通,百度,腾讯,科大,字节。

zxmfke/asrfactory (github.com)

之前刚好在测试各家的语音识别相关功能,但是每家的返回值都不同,调用方式都不同,所以就封装了这么一个包。主要就是用简易工厂模式封装了一下,可以用来内部做测试。

功能方面,只是单纯的返回识别结果,实时流也是,正常是要再返回时间戳的,不过各家在时间戳上更是五花八门,就之后有空再封装。

有什么需求也欢迎讨论,另外,接口的app,账号需要自己去生成。

本文档偏主观,不喜勿喷


接口官方文档地址

短语音识别URL
阿里智能语音交互RESTfulAPI(ROA)示例_智能语音交互-阿里云帮助中心 (aliyun.com)
快商通快商通AI开放平台-短语音识别
百度短语音识别标准版API - 语音技术 (baidu.com)
腾讯语音识别 一句话识别-一句话识别相关接口-API 中心-腾讯云 (tencent.cn)
科大语音听写_语音识别-讯飞开放平台 (xfyun.cn)
字节一句话识别–语音技术-火山引擎 (volcengine.com)
实时流语音识别URL
阿里如何自行开发代码访问阿里语音服务_智能语音交互-阿里云帮助中心 (aliyun.com)
快商通快商通AI开放平台-实时语音识别
百度语音技术 (baidu.com)
腾讯语音识别 实时语音识别(websocket)-API 文档-文档中心-腾讯云 (tencent.com)
科大实时语音转写_实时语音识别服务-讯飞开放平台 (xfyun.cn)
字节流式语音识别–语音技术-火山引擎 (volcengine.com)

包封装实现

短语音识别

短语音比较简单,主要就是一个 http 请求,实现 Do 方法就可以了。

type Asr interface {
	Do(fileName string, sampleRate define.AudioSampleRate) (string, error)
}
实时流语音识别

实时流识别主要是抽象成 5 个函数,均通过 websocket 的方式对接

type AsrWs interface {
    
    // 初始化,创建 websocket 连接。把创建和发送 start 的逻辑封在一起。
	Init() error

    // 发送语音流数据
	Send([]byte) error

    // 接收识别结果
	Recv(chan<- define.Output)

    // 发送结束标识
	End() error

    // 关闭 websocket 连接
	Close()
}

在这里插入图片描述

实时流语音识别可以分成 7 个步骤:

  1. 建立 web socket 连接;
  2. 发送 start 的 Text message;

这两步就是在 Init 里面实现,如果 start 没有,那 Init 里面就不会做 start 的逻辑

  1. 发送完 start 后,会返回给 client 可以发送的 message;

  2. 循环发送语音,通过 Send 方法;

  3. 同时接收识别结果,Recv 来接收识别结果;

  4. 语音数据发送结束后,发送给 server 端数据发送完毕的标识,即 End 方法;

  5. 发送 End 后,不要立马断开 web socket 连接。End 只是发送我没有要 server 端识别的数据了,不过还是要等 server 端把所有语音数据都是识别完成,返回全部识别结束。这时候才能 Close 连接。

Recv 和 End 方法在各家的实现里面是最不同的,所以抽象的地方主要是在这两个函数。不过无论后面要再加什么厂商的接口,基本上按照这 5 个方法,是没什么问题的。字节的就是,我在最后才加的。


接口语音要求

我只列常用的

语音要求
阿里16k/8k wav/pcm
快商通16k/8k wav
百度16k pcm
腾讯16k/8k wav/pcm
科大16k/8k pcm
字节16k/8k wav/pcm

接口文档是否易懂

文档易懂
阿里有完整文档,字段描述清晰,范例代码挺多。
快商通有完整文档,字段描述清晰,范例代码就一个js。
百度有完整文档,字段描述清晰,逻辑性不是很强。
腾讯有完整文档,字段描述清晰,逻辑性强,范例代码多
科大有完整文档,字段描述清晰,过于复杂,字段命名不直观
字节看文档看不懂,只能看懂调用逻辑,字段怎么用,只能直接看范例,范例也不知道为什么这么写

接口对接难易度

对接难易度这边更多指的是最后抽象成几个方法的难易度。

调用难易度
阿里易,发数据前要先发,开始message
快商通没有 go 范例,得自己写,不过逻辑还算比较简单清晰
百度易,发数据前要先发,开始message
腾讯易,创建 ws 连接的时候得先获取 signature
科大有点麻烦,范例太过复杂,创建 ws 连接的时候得先获取 signature。嵌套多层,且字段名不直观,抽象过程麻烦。
字节有点麻烦,范例太过复杂,发数据前要先发,开始message,抽象过程麻烦。

接口识别效果

识别效果我只测了中文,16k。8k 跟 16k 结果差不多。在正常语音,正常噪音情况下,腾讯,阿里排在前两位,后面的差不多。在有噪音前提下,大体相差不了多少。其中,快商通不支持多方言和多语种,其他的都可以。

响应时间,识别速度,腾讯 > 阿里 > 百度 > 快商通 > 科大 > 字节


接口免费调用次数

各平台免费调用次数都比较充足,价格就直接官网看比较直观,因为有阶梯的不好比较。直接跟商务谈的也会有所区别。


总结

这个包就是来封装一下各家的语音识别接口,方便调用。选哪家因人而异,考量的点挺多。我个人觉得腾讯的是最好的,它文档很丰富,逻辑清晰,范例也很清楚,识别效果,识别速度都是最好的。快商通的简单,识别也还行,就是支持的功能太少了。科大的应该是不错的,不过不知道为什么识别效果怪怪的。字节的每太理解需要这么设计的逻辑,会给使用者增加一些不必要的麻烦,可能是我功力还不能理解他们的设计巧思。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神秘的ip地址8.8.8.8,到底是什么类型的DNS服务器?

下午好&#xff0c;我的网工朋友。 DNS&#xff0c;咱们网工配置网络连接或者路由器时&#xff0c;高低得和这玩意儿打交道吧。 它是互联网中用于将人类可读的域名&#xff08;例如http://www.example.com&#xff09;转换为计算机可理解的IP地址&#xff08;例如192.0.2.1&a…

机器学习中基本的数据结构说明

数据维度或数据结构 当我们在机器学习或深度学习的领域内处理数据&#xff0c;我们通常会遇到四种主要的数据结构&#xff1a;标量&#xff0c;向量&#xff0c;矩阵和张量。理解这些基本数据结构是非常重要的&#xff0c;因为它们是机器学习算法和神经网络的核心。下面是对这…

AssetBundle总结

文章目录 目的打包过程打包时的分组策略和压缩方式资源的载入和卸载其它&#xff1a;Manifest、校验、视图工具思维导图 前言&#xff1a; 大佬文章链接&#xff08;据此总结的&#xff09; 目的 避免软件因资源占用空间太大&#xff0c;导致运行缓慢 避免每次更新资源&#…

【STM32】高效开发工具CubeMonitor快速上手

工欲善其事必先利其器。拥有一个辅助测试工具&#xff0c;能极大提高开发项目的效率。STM32CubeMonitor系列工具能够实时读取和呈现其变量&#xff0c;从而在运行时帮助微调和诊断STM32应用&#xff0c;类似于一个简单的示波器。它是一款基于流程的图形化编程工具&#xff0c;类…

Michael.W基于Foundry精读Openzeppelin第26期——ERC1820Implementer.sol

Michael.W基于Foundry精读Openzeppelin第26期——ERC1820Implementer.sol 0. 版本0.1 ERC1820Implementer.sol 1. 目标合约2. 代码精读2.1 _registerInterfaceForAddress(bytes32 interfaceHash, address account) internal2.2 canImplementInterfaceForAddress(bytes32 interf…

Java的反射机制、Lambda表达式和枚举

Java的反射机制、Lambda表达式和枚举 文章目录 Java的反射机制、Lambda表达式和枚举1.反射机制反射的概念、用途、优缺点反射相关的类及使用&#xff08;重要&#xff01;&#xff01;&#xff09;相关类Class类&#xff1a;代表类实体&#xff0c;表示类和接口Field类&#xf…

URLSearchParams:JavaScript中的URL查询参数处理工具

文章目录 导言&#xff1a;一、URLSearchParams的来历二、URLSearchParams的作用三、URLSearchParams的方法和属性四、使用示例五、注意事项六、结论参考资料 导言&#xff1a; 在Web开发中&#xff0c;处理URL查询参数是一项常见的任务。为了简化这一过程&#xff0c;JavaScr…

论文阅读——Adversarial Eigen Attack on Black-Box Models

Adversarial Eigen Attack on Black-Box Models 作者&#xff1a;Linjun Zhou&#xff0c; Linjun Zhou 攻击类别&#xff1a;黑盒&#xff08;基于梯度信息&#xff09;&#xff0c;白盒模型的预训练模型可获得&#xff0c;但训练数据和微调预训练模型的数据不可得&#xff…

龙迅LT86102UXE产品概括,HDMI2.0转一分二HDMI2.0/1.4,支持音频剥离,支持4K60HZ

LT86102UXE 1. 一般说明 龙迅 LT86102UXE HDMI2.0 分路器具有符合 HDMI2.0/1.4 规范的 1&#xff1a;2 分路器、最大 6Gbps 高速数据速率、自适应均衡 RX 输入和预加重 TX 输出&#xff08;用于支持长电缆应用&#xff09;、内部 TX 通道交换以实现灵活的 PCB 布线。 LT86102…

A Survey for In-context Learning

A Survey for In-context Learning 摘要&#xff1a; 随着大语言模型(LLMs)能力的增长&#xff0c;上下文学习(ICL)已经成为一个NLP新的范式&#xff0c;因为LLMs仅基于几个训练样本让内容本身增强。现在已经成为一个新的趋势去探索ICL来评价和extrapolate LLMs的能力。在这篇…

vue3+element-plus表格默认排序default-sort失效问题

场景 在使用动态数据渲染的场景&#xff0c;el-table设置默认属性default-sort失效。 原因 el-table的default-sort属性是针对静态数据的&#xff0c;如果是动态数据&#xff0c;default-sort则无法监听到。 案例&#xff1a;静态数据 <template><el-table:data&…

一文分析多少杠杆最高

在进行加杠杆操作时&#xff0c;合约产品通常会有一定的杠杆比例限制&#xff0c;这是由监管机构或交易平台设定的。杠杆比例限制的目的是为了控制风险&#xff0c;避免过度杠杆化导致的潜在损失过大。 不同的交易平台和合约产品可以有不同的杠杆比例限制。一般来说&#xff0…

堆叠注入进阶--(buuctf-随便注、GYCTF-black_list)【多方法详解】

了解一下 堆叠注入基础知识及其他题目&#xff1a; SQL-堆叠注入 终于有时间来填填坑了 Buuctf-随便注 算是堆叠注入中非常经典的题目了。 随便试试就能看到黑名单&#xff1a; 没了select&#xff0c;其实大概率就是堆叠注入 先探测一下&#xff1a; 1;show databases;…

Struts2一次请求参数问题的记录

最近&#xff0c;一次前端正常请求&#xff0c;但后台出现请求参数值的变化&#xff0c;导致报错&#xff0c;问题如下&#xff1a; 从入参request中查看请求参数&#xff0c;是一个Json字符串&#xff0c;其中有个description的键值对&#xff1b; 但是&#xff0c;接下来调用…

分布式websocket解决方案

1、websocket问题由来 websocket基础请自行学习,本文章是解决在分布式环境下websocket通讯问题。 在单体环境下,所有web客户端都是连接到某一个微服务上,这样消息都是到达统一服务端,并且也是由一个服务端进行响应,所以不会出现问题。 但是在分布式环境下,我们很容易发现…

【Vue】Vue2创建移动端项目实战教程,创建移动端项目保姆级教程,设置axios,utils工具包,vue.fonfig.js配置项 (下)

系列文章目录 这里是创建移动端项目 【Vue】Vue2.x创建项目全程讲解&#xff0c;保姆级教程&#xff0c;手把手教&#xff0c;Vue2怎么创建项目&#xff08;上&#xff09; 【Vue】Vue2创建移动端项目实战教程&#xff0c;创建移动端项目保姆级教程&#xff0c;接上一篇创建Vue…

解压版 MySQL 数据库的安装与配置

目录 1 下载2 安装3 配置3.1 添加环境变量3.2 新建配置文件3.3 初始化MySQL3.4 注册MySQL服务3.5 启动MySQL服务3.6 修改默认账户密码 4 登录MySQL5 卸载MySQL 安装环境:Win10 64位 软件版本:MySQL 5.7.24 解压版 1 下载 点击链接 进入如下界面 ❗️注意&#xff1a; 我们一般不…

JavaEE初阶:多线程 - 编程

1.认识线程 我们在之前认识了什么是多进程&#xff0c;今天我们来了解线程。 一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行 着多份代码. 引入进程这个概念&#xff0c;主要是为了解决并发编程这样的…

JAVA集合-List

// 数组的缺点&#xff1a;每次使用都需要指定长度&#xff0c;掉率低&#xff0c;操作麻烦 // // 【java集合体系】&#xff1a;分类&#xff1a;6个接口&#xff0c;1个工具类 // 6个接口&#xff1a; 单列 :Collection,(父接口) // …

成功项目管理必备的五个关键因素

在任何组织中&#xff0c;良好的项目管理都是项目成功的首要标准。然而&#xff0c;一旦被淹没在无穷无尽的任务、持续的紧迫性和利益相关者相互冲突等情况中&#xff0c;管理好项目可能会让你感到力不从心。找出项目成功的关键因素并加以解决&#xff0c;就能避免一切失败。 …