当前位置: 首页 > news >正文

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 结果差不多。在正常语音,正常噪音情况下,腾讯,阿里排在前两位,后面的差不多。在有噪音前提下,大体相差不了多少。其中,快商通不支持多方言和多语种,其他的都可以。

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


接口免费调用次数

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


总结

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

相关文章:

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

这个文档主要是介绍一下我自己封装了 6 家厂商的短语音识别和实时流语音识别接口的一个包&#xff0c;以及对这些接口的一个对比。分别是&#xff0c;阿里&#xff0c;快商通&#xff0c;百度&#xff0c;腾讯&#xff0c;科大&#xff0c;字节。 zxmfke/asrfactory (github.c…...

C 语言的 ctype.h 头文件

C 语言的 ctype.h 头文件包含了很多字符函数的函数原型, 可以专门用来处理一个字符, 这些函数都以一个字符作为实参. ctype.h 中的字符测试函数如表所示: 这些测试函数返回 0 或 1, 即 false 或 true. ctype.h 中的字符映射函数如表所示: 字符测试函数不会修改原始实参, 只会…...

Linux系统编程:采用管道的方式实现进程间通信

目录 一. 进程间通信概述 二. 管道的概念 三. 通过管道实现进程间通信 3.1 实现原理 3.2 匿名管道创建系统接口pipe 3.3 管道通信的模拟实现 3.4 管道通信的访问控制规则 3.5 管道通信的特点 四. 通过匿名管道实现进程池 4.1 进程池的概念 4.2 进程池的模拟实现 五…...

网络安全面试题

什么是SQL注入攻击 SQL 注入攻击是一种常见的 Web 应用程序安全漏洞&#xff0c;攻击者通过在 Web 应用程序的输入框、搜索框、登陆框等地方注入恶意的 SQL 语句&#xff0c;从而获取未授权的访问权限或者窃取敏感数据。攻击者利用注入的 SQL 语句执行恶意操作&#xff0c;例如…...

如何成为游戏主程

前言 前段时间有人在知乎上提问&#xff0c;如何成为主程&#xff0c;技术毋庸置疑是最重要的&#xff0c;但很多事情我认为主要是要有思路和品位。 1、技术 1、技术是程序员吃饭的手艺&#xff0c;打磨自己的手艺肯定无可厚非 2、保持对技术的热爱&#xff0c;不断学习&…...

SSM整合(XML方式)

文章目录 SSM整合之后xml方式1 系统环境1.1 软件环境1.2 项目环境1.3 配置web.xml1.4 配置jdbc.properties文件1.5 配置SpringMVC核心文件1.6 配置Spring的核心文件1.7 配置MyBatis的核心文件1.8 配置数据库1.9 配置文件位置 2 编写后端代码2.1 编写实体类2.2 编写Dao接口2.3 编…...

学习Vue:列表渲染(v-for)

在 Vue.js 中&#xff0c;实现动态列表的显示是非常常见的需求。为了达到这个目的&#xff0c;Vue 提供了 v-for 指令&#xff0c;它允许您迭代一个数组或对象&#xff0c;将其元素渲染为列表。然而&#xff0c;在使用 v-for 时&#xff0c;key 属性的设置也非常重要&#xff0…...

使用巴特沃兹滤波器的1D零相位频率滤波研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

ubuntu18.04安装cuda

卸载之前安装的驱动 sudo apt-get purge nvidia*安装驱动 方法1&#xff1a; 查看显卡适配的NVIDIA的驱动 ubuntu-drivers devices安装recommend推荐的版本 sudo apt-get install nvidia-driver-455方法2&#xff1a; 或者直接使用下面命令安装 sudo ubuntu-drivers au…...

【MFC】09.MFC视图-笔记

MFC视图窗口&#xff1a;CView类 显示数据/画面 我们之前的绘图消息&#xff0c;都是在框架类上画出来的 视图窗口就覆盖在框架窗口上 视图窗口本质上也是窗口&#xff0c;只是和框架窗口风格不同 CView类也继承于CWnd类 CView也能处理消息&#xff0c;因为它继承于CWnd类…...

【字节跳动青训营】后端笔记整理-2 | Go实践记录:猜谜游戏,在线词典,Socks5代理服务器

**本人是第六届字节跳动青训营&#xff08;后端组&#xff09;的成员。本文由博主本人整理自该营的日常学习实践&#xff0c;首发于稀土掘金&#xff1a;&#x1f517;Go实践记录&#xff1a;猜谜游戏&#xff0c;在线词典&#xff0c;Socks5代理服务器 | 青训营 我的go开发环境…...

GPT的第一个创作

嗨&#xff0c;大家好&#xff0c;我是赖兴泳&#xff01;今天&#xff0c;我要和大家聊一聊前端开发&#xff0c;就像我用音符创造音乐一样&#xff0c;前端开发也是创造美丽的用户界面的过程。 前端开发是构建网站和应用程序用户界面的关键部分。就像音乐家需要精心编排音符…...

Spring Boot 获取前端参数

Spring Boot 获取前端参数 在开发 Web 应用程序时&#xff0c;前端参数是非常重要的。Spring Boot 提供了多种方法来获取前端参数&#xff0c;本文将介绍其中的一些常用方法。 1. 使用 RequestParam 注解 RequestParam 注解是 Spring MVC 提供的一种常用方式&#xff0c;用于…...

java应用运行在docker,并且其他组件也在docker

docker启动redis容器 # create redis docker run -d --name redis-container -p 6379:6379 redis:latest创建java 应用 dockerfile FROM openjdk:17##Pre-create related directories RUN mkdir -p /data/etax/ms-app WORKDIR /data/etax/ms-appEXPOSE 10133 COPY ./target…...

Java真实面试题,offer已到手

关于学习 在黑马程序员刚刚开始的时候学习尽头非常足&#xff0c;到后面逐渐失去了一些兴趣&#xff0c;以至于后面上课会出现走神等问题&#xff0c;但是毕业时后悔晚矣。等到开始学习项目一的时候&#xff0c;思路总会比别人慢一些&#xff0c;不看讲义写不出来代码。 建议…...

在序列化、反序列化下如何保持单例(Singleton)模式

1、序列化、反序列化 在 Java 中&#xff0c;当一个对象被序列化后再被反序列化&#xff0c;通常情况下会创建一个新的对象实例。这是因为序列化将对象的状态保存到字节流中&#xff0c;而反序列化则是将字节流重新转化为对象。在这个过程中&#xff0c;通常会使用类的构造函数…...

【数据结构】二叉树篇|超清晰图解和详解:二叉树的最近公共祖先

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 你不能要求一片海洋&#xff0c;没有风暴&#xff0c;那不是海洋&#xff0c;是泥塘——毕淑敏 目录 一、题目二、题解三、代码 一、题目 …...

android ndk clang交叉编译ffmpeg动态库踩坑

1.ffmpeg默认使用gcc编译&#xff0c;在android上无法使用&#xff0c;否则各种报错&#xff0c;所以要用ndk的clang编译 2.下载ffmpeg源码 修改configure文件&#xff0c;增加命令 cross_prefix_clang 修改以下命令 cc_default"${cross_prefix}${cc_default}" cxx…...

简单记录牛客top101算法题(初级题C语言实现)BM24 二叉树的中序遍历 BM28 二叉树的最大深度 BM29 二叉树中和为某一值的路径

1. BM24 二叉树的中序/后续遍历 要求&#xff1a;给定一个二叉树的根节点root&#xff0c;返回它的中序遍历结果。                          输入&#xff1a;{1,2,#,#,3} 返回值&#xff1a;[2,3,1]1.1 自己的整体思路&#xff08;与二叉树的前序遍…...

前后端分离------后端创建笔记(05)用户列表查询接口(上)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…...

RabbitMQ 各类交换机

为什么要用交换机&#xff1f; 交换机用来路由消息。如果直发队列&#xff0c;这个消息就被处理消失了&#xff0c;那别的队列也需要这个消息怎么办&#xff1f;那就要用到交换机 交换机类型 1&#xff0c;fanout&#xff1a;广播 特点 广播所有消息​​&#xff1a;将消息…...