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

这个文档主要是介绍一下我自己封装了 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.mzph.cn/news/38344.shtml

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

相关文章

ubuntu 安装 cuda

ubuntu 安装 cuda 初环境与设备在官网找安装方式 本篇文章将介绍ubuntu 安装 CUDA Toolkit CUDA Toolkit 是由 NVIDIA&#xff08;英伟达&#xff09;公司开发的一个软件工具包&#xff0c;用于支持并优化 GPU&#xff08;图形处理器&#xff09;上的并行计算和高性能计算。它…

解析TCP/IP协议的分层模型

了解ISO模型&#xff1a;构建通信的蓝图 为了促进网络应用的普及&#xff0c;国际标准化组织&#xff08;ISO&#xff09;引入了开放式系统互联&#xff08;Open System Interconnect&#xff0c;OSI&#xff09;模型。这个模型包括了七个层次&#xff0c;从底层的物理连接到顶…

一、Dubbo 简介与架构

一、Dubbo 简介与架构 1.1 应用架构演进过程 单体应用&#xff1a;JEE、MVC分布式应用&#xff1a;SOA、微服务化 1.2 Dubbo 简介一种分布式 RPC 框架&#xff0c;对专业知识&#xff08;序列化/反序列化、网络、多线程、设计模式、性能优化等&#xff09;进行了更高层的抽象和…

ArcGIS Maps SDK for JavaScript系列之三:在Vue3中使用ArcGIS API加载三维地球

目录 SceneView类的常用属性SceneView类的常用方法vue3中使用SceneView类创建三维地球项目准备引入ArcGIS API创建Vue组件在OnMounted中调用初始化函数initArcGisMap创建Camera对象Camera的常用属性Camera的常用方法 要在Vue 3中使用ArcGIS API for JavaScript加载和展示三维地…

Java旋转数组中的最小数字(图文详解版)

目录 1.题目描述 2.题解 分析 具体实现 方法一&#xff08;遍历&#xff09;&#xff1a; 方法二&#xff08;排序&#xff09;&#xff1a; 方法三&#xff08;二分查找&#xff09;&#xff1a; 1.题目描述 有一个长度为 n 的非降序数组&#xff0c;比如[1,2,3,4,5]&a…

npm install 中 --save 和 --save-dev 是什么?

npm&#xff0c;全名 Node Package Manager&#xff0c;套件管理工具&#xff0c;package.json 会记下你在项目中安装的所有套件。 假设在项目中安装 lodash npm i --save lodash这样在 dependencies 中会出现&#xff1a; 如果修改了导入方式&#xff1a; npm i --save-dev …

Labview解决“重置VI:xxx.vi”报错问题

文章目录 前言一、程序框图二、前面板三、问题描述四、解决办法 前言 在程序关闭前面板的时候小概率型出现了 重置VI&#xff1a;xxx.vi 这个报错&#xff0c;并且发现此时只能通过任务管理器杀掉 LabVIEW 进程才能退出&#xff0c;这里介绍一下解决方法。 一、程序框图 程序…

pve7.2虚拟机 lvm磁盘扩容,增加硬盘操作

之前安装pve时候只有256的ssd,最近安装的虚拟机较多&#xff0c;给加块闲置硬盘&#xff0c;顺便学习一下&#xff0c;像pve这种虚拟机系统&#xff0c;硬盘应该可以像nas你这样随时增加&#xff0c;而不影响上层应用&#xff0c;我自己也是摸索着做。 一、安装好硬盘后打开pv…

vue3+ts-tsconfig.json报错Option ‘importsNotUsedAsValues’

vue3ts-tsconfig.json报错Option ‘importsNotUsedAsValues’ is deprecated and will stop functioning in TypeScript 5.5. Specify compilerOption ‘“ignoreDeprecations”: “5.0”’ to silence this error. Use ‘verbatimModuleSyntax’ instead 自我记录 翻译 选项…

echart 3d立体颜色渐变柱状图

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 1.需求描述 根据业务需求将不同的法律法规&#xff0c;展示不同的3d立体渐变柱状图。 2.先看下效果图 3. 确定三面的颜色&#xff0c;这里我是自定义的颜色 // 右面生成颜色const rightColorArr ref(["#79D…

ComponentOne Studio ASP.NET MVC Crack

ComponentOne Studio ASP.NET MVC Crack FlexReport增强功能 添加了对在Microsoft Windows上部署Microsoft Azure的支持。 添加了对显示嵌入字体的支持。 .NET标准版的经典C1PDF(Beta版) GrapeCity的经典C1Pdf库现在提供了基于Microsoft.NET标准的版本。在任何.NET应用程序(包括…

江南大学计算机考研分析

24计算机考研|上岸指南 江南大学 江南大学计算机考研招生学院是人工智能与计算机学院。目前均已出拟录取名单。 江南大学人工智能与计算机学院成立于2020年3月&#xff0c;办学历史可追溯到1994年设立的计算机应用专业。学院秉持江南大学“彰显轻工特色&#xff0c;服务国计民…

【数据结构】栈和队列

【数据结构】栈和队列 一&#xff1a; 栈1.栈的概念及和结构2. 栈的实用3. 栈接口实现 二&#xff1a; 队列1. 队列的概念和结构2. 队列的实用3. 队列接口实现 三&#xff1a;扩展 一&#xff1a; 栈 1.栈的概念及和结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许…

SAP安全库存-安全库存共享、安全库存简介

SAP系统中的安全库存用于管理计划外和计划内的库存需求,在某些行业中,由于不同的情况,如意外损耗、损坏、环境问题、制造工艺问题、需求增加等,通常会出现意外的库存需求。 SAP提供了维护安全库存的处理方式来处理这样的问题,安全库存的字段信息在主数据视图中,在物料需…

题解 | #1002.Shortest path# 2023杭电暑期多校9

1002.Shortest path 签到题 记忆化搜索 题目大意 给定一个正整数 n n n &#xff0c;可以对其进行以下操作&#xff1a; 如果 n n n 能被 3 3 3 整除&#xff0c;则可以使 n n / 3 nn/3 nn/3 ;如果 n n n 能被 2 2 2 整除&#xff0c;则可以使 n n / 2 nn/2 nn/2 …

【C++】deque容器

0.前言 1.deque构造函数 #include <iostream> using namespace std; #include <deque>//deque构造函数 void printDeque(const deque<int>& d) {for (deque<int>::const_iterator it d.begin(); it ! d.end(); it){//*it 100; //加了const就不能…

go的gin和gorm框架实现切换身份的接口

使用go的gin和gorm框架实现切换身份的接口&#xff0c;接收前端发送的JSON对象&#xff0c;查询数据库并更新&#xff0c;返回前端信息 接收前端发来的JSON对象&#xff0c;包含由openid和登陆状态组成的一个string和要切换的身份码int型 后端接收后判断要切换的身份是否低于该…

windows下dll文件的创建详细教程

1、前言 dll文件是啥&#xff0c;就不作过多赘述了。现在直接教大家如何创建与使用dll文件。 本文基于windows系统&#xff0c;使用的编译相关工具为visual studio 2019。 2、创建dll 2.1 创建dll工程 首先打开visual studio&#xff0c;然后选择创建新项目&#xff0c;在搜…

Word(1):文章页码设置

1.需求 在文档的封皮页不设置页码&#xff0c;在目录页页码设置为罗马数字&#xff0c;在正文使用阿拉伯数字。 2.解决方法 step1&#xff1a; 在封皮页的最后&#xff0c;点击”插入“-分隔符-分节符&#xff08;下一页&#xff09; step2&#xff1a;在目录页的最后&…

【Java学习】System.Console使用

背景 在自学《Java核心技术卷1》的过程中看到了对System.Console的介绍&#xff0c;编写下列测试代码&#xff0c; public class ConsoleTest {public static void main(String[] args) {Console cs System.console();String name cs.readLine("AccountInfo: ");…