OpenAI 开源的语音技术 Whisper 真棒!!!

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。

针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。

合集:

《大模型面试宝典》(2024版) 正式发布!
《AIGC 面试宝典》已圈粉无数!


在处理音频识别和翻译时,我们经常面临多样化的音频数据和处理多种语言的难题。传统的音频处理方法通常步骤繁杂,各个处理阶段的结果往往需要手动衔接和微调。

一个高效的自动语音识别(ASR)系统对于全球通讯和语言支持工具是极其关键的,尤其是在智能语音助手和电话语音翻译等领域。

然而,开发一个适用于广泛任务的模型,比如能够处理多种语言、进行语音翻译和语言识别,这仍是一个挑战。本篇文章Whisper,可能就是针对这些问题的新答案。

什么是 Whisper?

Whisper 是一个多功能的语音识别模型,通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务(multitask)监督数据对 Whisper 进行了训练,能够执行包括多种语言的语音识别、语音翻译以及语言辨识等多项任务。

该项目的核心之处在于使用了一种基于Transformer架构的序列到序列模型来训练处理不同的语音任务,并通过解码器来预测代表各种任务的特定标记(token),这一过程有望取代传统音频处理中的多个步骤,并实现对多任务的同时训练。

Whisper 提供5种模型以及英文单一版本来实现速度和精度的权衡,适应不同的需求。

开源项目地址:https://github.com/openai/whisper

如何使用

在 Python 3.9.9 和 PyTorch 1.10.1 环境下进行操作,同时需要依赖openAI’s tiktoken 包来进行快速的标记(tokenize)处理。安装方式如下命令:

pip install -U openai-whisper

更新到最新版本的命令如下:

pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

需要注意的是,这个项目还要求在系统上安装了命令行工具 ffmpeg,如果在安装过程中出现错误,可能需要安装 Rust 开发环境。安装好以后,以下是一个最简单的使用示例:

import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])

在实际应用中我们可以把它封装成API的接口通过HTTP的方式来调用,我们可以使用python的高性能的框架Fast API。

我们可以通过FastAPI的UPload File来实现上传音频文件

# FastAPI使用async/await提升并发性能
async def api_recognition(audio: UploadFile = File(..., description="audio file")):content = await audio.read()

模型默认使用的wav的音频格式,这个时候就需要使用到FFmpeg来对音频进行转换。可以使用到pydub库中的AudioSegment方法对音频进行转换,也是通过调用FFmpeg来进行实现的,感兴趣的同学可以自行了解。

sound = AudioSegment.from_file(io.BytesIO(content))
# 将音频导出为wav格式,参数为FFmpeg对应的参数
# -ar rate        set audio sampling rate (in Hz) 
# -ac channels    set number of audio channels
wav  = sound.export(format="wav",parameters=["-ac","1","-ar","16000"]) 

该模型支持的输入格式为:str, np.ndarray, torch.Tensor三种

audio: Union[str, np.ndarray, torch.Tensor]

这时我们需要将刚刚的音频字节流转换为np.ndarray格式,这里可以使用soundfile的read方法

我们可以使用curl来进行测试:

# curl -X POST -F "audio=@test.wav" http://127.0.0.1:8000/recognition
{"results":"支付宝到账 100万元","code":0}

完整示例代码

import whisper
from pydub import AudioSegment
import soundfile
import iomodel = whisper.load_model("base",download_root="./.cache/whisper")import uvicorn
from fastapi import FastAPI, File, UploadFile
app = FastAPI(title="whisper")@app.post("/recognition")
async def api_recognition(audio: UploadFile = File(..., description="audio file")):content = await audio.read()sound = AudioSegment.from_file(io.BytesIO(content))wav  = sound.export(format="wav",parameters=["-ac","1","-ar","16000"])speech, _ = soundfile.read(wav,dtype="float32")rec_result = model.transcribe(speech)ret = {"results": rec_result['text'], "code": 0}return retif __name__ == '__main__':uvicorn.run("example-whisper:app",host="0.0.0.0",workers=1)

总结

Whisper是OpenAI 发布的语音处理系统,在github拥有众多的追随者,此项目基于大规模弱监督的方法进行训练,为研究人员提供重要的研究工具,同时也为行业开发者提供了实用的开发工具,可以广泛应用于各种语音识别需求。

Whisper在处理不同语言方面展现出了卓越的性能,这与当前多样化和多任务处理的趋势相契合。该项目目前正处于积极开发阶段,并持续吸纳社区的意见和贡献,这使得它非常值得我们关注和尝试。

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

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

相关文章

字节豆包大模型API吞吐、函数调用能力、长上下文能力测试总结

离开模型能力谈API价格都是耍流氓,豆包大模型作为API最便宜的模型之一,最近向个人开发者开放了,花了300元和一些时间对模型的API吞吐、函数调用能力、长上下文能力等进行了深度测试,看看它的能力究竟适合做 AI 应用开发吗&#xf…

“代码铸梦:一位程序员的CSDN创作纪念日回望与展望“

缘起:一程代码,一场梦 在编码的世界里,每一次指尖的跳跃都是对未知的探索,每一个字符的敲击都是与逻辑的对话。我的创作之旅,始于一次偶然的实战项目经历。那时,面对复杂的业务逻辑和紧迫的截止日期&#…

【Anaconda】【Windows编程技术】【Python】Anaconda的常用命令及实操

一、Anaconda终端 在安装Anaconda后,电脑上会新增一个Anaconda终端,叫Anaconda Prompt,如下图: 我们选择“打开文件位置”,将快捷方式复制一份到桌面上,这样日后就可以从桌面上方便地访问Anaconda终端了&…

用python实现多文件多文本替换功能

用python实现多文件多文本替换功能 今天修改单位项目代码时由于改变了一个数据结构名称,结果有几十个文件都要修改,一个个改实在太麻烦,又没有搜到比较靠谱的工具软件,于是干脆用python手撸了一个小工具,发现python在…

微服务中的相关概念

Eureka Eureka 是由 Netflix 开发的一个服务发现和注册中心,广泛应用于微服务架构中。Eureka 主要用于管理和协调分布式服务的注册和发现,确保各个服务之间能够方便地找到并通信。它是 Netflix OSS(Netflix Open Source Software&#xff09…

【绝对有用】c++线程池相关技术点二

这行代码是C多线程编程中的一种常见用法,具体地,它使用std::thread创建一个新的线程,并将该线程加入到一个std::vectorstd::thread容器中。下面是对这行代码的详细解释: threads:这是一个std::vectorstd::thread类型的…

C#心跳机制客户端

窗体(richTextBox右显示聊天) 步骤 点击链接按钮 tcpclient客户端步骤 1创建客户端对象 2连接服务器connect 3创建网络基础流发消息 .write发消息 4 创建网络基础流接消息 .read接消息 5 断开连接…

062、Python 解决命名冲突的两种方式

如下,在一个包里的两个模块分别定义了一个名称一样的函数: 包结构与模块内容: my_package/__init__.pymodule1.pymodule2.py模块一代码:module1.py def say_Hello():print("Hi!")模块二代码:module2.py …

python库离线安装方法(pyqt5离线安装方法)

在某些情况下,我们的计算机是无法联网的。 网上大部分方法: 这些方法都有个问题,就是库是需要依赖其它库的,你不知道它需要依赖什么库,就是提供了依赖库的列表也麻烦,依赖库也是有对应版本要求的&#xf…

自制调色小工具给图片加滤镜,修改图片红、绿、蓝通道及亮度,修改图片颜色

上篇: 上篇我们给地图添加了锐化、模糊等滤镜,这篇来写一个小工具给图片调色。 调色比锐化等滤镜要简单许多,直接拿到像素值修改即可。不需要用到卷积核。。。(*^▽^*) 核心原理就是图像结构,使用context.getImageData获取图像像…

JavaScript练手小技巧:JS 随机数小技巧

JS 里利用 Math.random() 可以产生0-1 之间的随机小数。如: let num1 Math.random(); // 0-1之间的随机数console.log(num1);// 0.05563019650398182 可以用随机数做一些有趣的事情。 一、指定范围的随机整数 // 随机整数function randomInt(min, max) {return …

cad怎么转成pdf文件?方法很简单!

cad怎么转成pdf文件?在数字化时代,CAD图纸的转换与共享已成为日常工作中的常态。无论是建筑设计师、工程师还是学生,都可能遇到需要将CAD文件转换为PDF格式的需求。本文将为您推荐三款高效的CAD转PDF软件,让您轻松实现文件格式的转…

【代码随想录算法训练Day35】LeetCode 1005. K 次取反后最大化的数组和、LeetCode 134.加油站、LeetCode 135.分发糖果

Day35 贪心第三天 LeetCode 1005. K 次取反后最大化的数组和 两步贪心,解决问题: 1.优先取反绝对值最大的负数 2.如果所有的数都非负了,就用绝对值最小的整数消耗掉剩余的k。 class Solution { public:static bool cmp(int a,int b){retur…

C++ 48 之 继承的基本语法

#include <iostream> #include <string> using namespace std;// 定义一个基类&#xff0c;把公共的部分写在这里&#xff0c;以后让别的类继承即可 class BasePage{ public:void header(){cout << "公共的头部"<< endl;}void footer(){cout…

STM32单片机-BKP和RTC

STM32单片机-BKP和RTC 一、Unix时间戳1.1 时间戳转换 二、BKP(备份寄存器)三、RTC(实时时钟)3.1 RTC工作原理 四、代码部分4.1 BKP备份寄存器4.2 RTC实时时钟 一、Unix时间戳 Unix时间戳定义为从伦敦时间的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒时间戳…

vue3使用echarts简单教程~~概念篇

没写过 写着玩玩 不足的地方还望小伙伴补充~~ 概念篇 文档奉上&#xff1a;数据集 - 概念篇 - 使用手册 - Apache EChartshttps://echarts.apache.org/handbook/zh/concepts/dataset <template><div id"main" style"width: 600px; height: 400px&…

集合进阶:增强for循环和lambda表达式

一.增强for遍历 1.增强for的底层是迭代器,为了简化迭代器的代码书写的。 2.他是JDK5之后出现的,其内部原理就是一个lterrator迭代器。 3.所有的单列集合和数组才能用增强for进行遍历 二.格式 for(元素的数据类型 变量名;数组或者集合){} 三.代码 Collection<String>…

72-UDP协议工作原理及实战

#ifndef UDPCOMM_H #define UDPCOMM_H#include <QMainWindow> #include <QUdpSocket> // 用于发送和接收UDP数据报 #include <QtNetwork>QT_BEGIN_NAMESPACE namespace Ui { class udpComm; } QT_END_NAMESPACEclass udpComm : public QMainWindow {Q_OBJECT…

定个小目标之刷LeetCode热题(23)

今天写这道题&#xff0c;背过八股文的都应该知道LRU算法缓存的基本原理&#xff0c;在 Java 语言中&#xff0c;同样有类似的数据结构 LinkedHashMap&#xff0c;本题我们采用自己创建哈希表双链表的形式简单实现一下 对于get操作&#xff1a;通过cache.get(key)获取&#xff…

格雷母线定位与控制系统:确保机车平稳运行的关键

微深节能的格雷母线高精度位移检测系统是一种高精度的位置检测设备&#xff0c;它通过发射和接收信号来确定移动物体的实时位置。在机车定位系统中&#xff0c;格雷母线被安装在固定的轨道上&#xff0c;而机车上的检测装置则负责读取这些信号&#xff0c;从而准确计算出机车的…