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

【OpenAI】第六节(语音生成与语音识别技术)从 ChatGPT 到 Whisper 的全方位指南

前言

在人工智能的浪潮中,语音识别技术正逐渐成为我们日常生活中不可或缺的一部分。随着 OpenAI 的 Whisper 模型的推出,语音转文本的过程变得前所未有的简单和高效。无论是从 YouTube 视频中提取信息,还是将播客内容转化为文本,Whisper 都能帮助我们轻松实现这一目标。今天,我们将深入探讨 Whisper 的强大功能,并提供详细的使用教程,让你能够快速上手这一技术。🌟

文章目录

    • 前言
    • 一、Whisper 简介
      • Whisper 的优势
    • 二、Whisper 可用的模型和语言
      • 语言支持
    • 三、开源 Whisper 本地转录
      • 3.1、安装 pytube 库
      • 3.2、下载音频 MP4 文件
      • 3.3、安装 Whisper 库
    • 四、在线 Whisper API 转录
      • 4.1、Whisper API 接口调用
      • 4.2、使用 Prompt 参数优化
      • 4.3、其它参数介绍
      • 4.4、转录过程翻译功能
      • 4.5、分割音频处理大文件
    • 五、获取OpenAI-api的方法
    • 六、总结

一、Whisper 简介

Whisper 是 OpenAI 开发的一款先进的语音识别系统,经过 680,000 小时的多语言和多任务监督数据训练,具备了强大的鲁棒性。它不仅支持多种语言的转录,还能将这些语言翻译成英语。与其他 AI 模型不同,Whisper 是一个开源模型,开发者可以自由使用和修改。

Whisper 的优势

  • 开源免费:开发者可以自由使用和修改代码。
  • 多语言支持:包括中文、英文等多种语言。
  • 高准确率:在多种场景下表现优于市面上许多音频转文字工具。
    在这里插入图片描述

二、Whisper 可用的模型和语言

Whisper 提供了五种不同尺寸的模型,适用于不同的应用场景。以下是可用型号及其大致的内存需求和相对速度:

  • tiny:适合快速测试,内存占用小。
  • base:适合一般应用,速度和准确性平衡。
  • small:适合对准确性有一定要求的应用。
  • medium:适合需要较高准确率的场景。
  • large:适合对准确性要求极高的应用,但需要较大的显存。

语言支持

Whisper 支持多种语言的转录,具体性能因语言而异。通过使用 Fleurs 数据集,Whisper 在不同语言上的表现可以通过单词错误率(WER)进行评估,数字越小,性能越好。

三、开源 Whisper 本地转录

3.1、安装 pytube 库

在开始使用 Whisper 进行转录之前,我们需要安装 pytube 库,以便从 YouTube 下载音频。

pip install --upgrade pytube

3.2、下载音频 MP4 文件

以“100 秒学习 Python”视频为例,视频地址为:https://www.youtube.com/watch?v=x7X9w_GIm1s。

import pytubevideo = "https://www.youtube.com/watch?v=x7X9w_GIm1s"
data = pytube.YouTube(video)
audio = data.streams.get_audio_only()
audio.download()

3.3、安装 Whisper 库

接下来,我们需要安装 Whisper 库:

pip install git+https://github.com/openai/whisper.git -q

加载模型并转录音频文件:

import whispermodel = whisper.load_model("base")
text = model.transcribe("Python in 100 Seconds.mp4")
print(text['text'])

四、在线 Whisper API 转录

4.1、Whisper API 接口调用

OpenAI 提供的 Whisper API 使用非常简单,只需调用 transcribe 函数即可将音频文件转录成文字:

import openai, osos.environ['OPENAI_API_KEY'] = "your-openai-api-key"
openai.api_key = os.getenv("OPENAI_API_KEY")audio_file = open("./data/generative_ai_topics_clip.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
print(transcript['text'])

4.2、使用 Prompt 参数优化

通过在转录过程中加入 Prompt 参数,可以提高转录的准确性:

audio_file = open("./data/generative_ai_topics_clip.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file, prompt="这是一段中文播客内容。")
print(transcript['text'])

4.3、其它参数介绍

除了模型名称、音频文件和 Prompt,transcribe 接口还支持以下参数:

  • response_format:返回文件格式(JSON、TEXT、SRT、VTT)。
  • temperature:调整采样概率分布(0-1 之间)。
  • language:指定音频语言。

4.4、转录过程翻译功能

Whisper API 还提供了“translation”接口,可以在转录的同时将语音翻译成英文:

audio_file = open("./data/generative_ai_topics_clip.mp3", "rb")
translated_prompt = "This is a podcast discussing ChatGPT and PaLM model."
transcript = openai.Audio.translate("whisper-1", audio_file, prompt=translated_prompt)
print(transcript['text'])

4.5、分割音频处理大文件

对于超过 25MB 的音频文件,可以使用 PyDub 库进行分割:

from pydub import AudioSegmentpodcast = AudioSegment.from_mp3("./data/generative_ai_topics_long.mp3")
ten_minutes = 15 * 60 * 1000
total_length = len(podcast)start = 0
index = 0
while start < total_length:end = start + ten_minutesif end < total_length:chunk = podcast[start:end]else:chunk = podcast[start:]with open(f"./data/generative_ai_topics_{index}.mp3", "wb") as f:chunk.export(f, format="mp3")start = endindex += 1

然后逐个转录音频文件:

prompt = "这是一段Onboard播客,里面会聊到ChatGPT以及PALM这个大语言模型。"
for i in range(index):clip = f"./data/generative_ai_topics_{i}.mp3"audio_file = open(clip, "rb")transcript = openai.Audio.transcribe("whisper-1", audio_file, prompt=prompt)if not os.path.exists("./data/transcripts"):os.makedirs("./data/transcripts")with open(f"./data/transcripts/generative_ai_topics_{i}.txt", "w") as f:f.write(transcript['text'])sentences = transcript['text'].split("。")prompt = sentences[-1]

五、获取OpenAI-api的方法

【OpenAI】第一节(OpenAI API)获取OpenAI API KEY的两种方式,开发者必看全方面教程!

六、总结

OpenAI 的 Whisper 模型为语音识别提供了一个强大而灵活的解决方案。无论是通过 API 还是使用开源模型,用户只需简单几行代码即可实现音频转录。通过传入 Prompt 参数,用户可以显著提高转录的准确性,减少错误和遗漏。

虽然 OpenAI 的 API 接口对单个转录文件的大小有限制,但我们可以通过 Python 包如 PyDub 将音频文件切分成多个小片段来解决这一问题。转录后的结果可以与 ChatGPT 和其他工具结合使用,实现文本总结和信息提取。

这种技术组合不仅提高了我们处理音频内容的效率,还为我们创造了更多从海量信息中获取有价值内容的机会。AI 为我们带来了无限的可能性,期待未来更多创新应用的出现。🌈

相关文章:

【OpenAI】第六节(语音生成与语音识别技术)从 ChatGPT 到 Whisper 的全方位指南

前言 在人工智能的浪潮中&#xff0c;语音识别技术正逐渐成为我们日常生活中不可或缺的一部分。随着 OpenAI 的 Whisper 模型的推出&#xff0c;语音转文本的过程变得前所未有的简单和高效。无论是从 YouTube 视频中提取信息&#xff0c;还是将播客内容转化为文本&#xff0c;…...

Docker 下备份恢复oracle

1.docker导出容器镜像 ##docker save -o 导出后的镜像名称.tar 容器名称|镜像id docker save -o oracle_11g.tar 3fa112fd3642 2.下载镜像上传镜像略 3.加载镜像 ##docker load -i <archive_file> docker load -i oracle11g11201.tar 4.添加版本号…...

oneplus3t-android_framework

0.确认oneplus6 root正常 oneplus6 root材料 oneplus6手机恢复出厂设置 &#xff0c; 或者 线刷 enchilada_22_K.52_210716_repack--HOS-10.0.11.zip &#xff1a; https://gitee.com/OnePlus6-brick-enchilada_22_K_52_210716_repack-HOS-10_0_11-zip OnePlus6Hydrogen_22…...

偷懒总结篇|贪心算法|动态规划|单调栈|图论

由于这周来不及了&#xff0c;先过一遍后面的思路&#xff0c;具体实现等下周再开始详细写。 贪心算法 这个图非常好 122.买卖股票的最佳时机 II(妙&#xff0c;拆分利润) 把利润分解为每天为单位的维度&#xff0c;需要收集每天的正利润就可以&#xff0c;收集正利润的区间…...

C语言初阶七:C语言操作符详解(1)

#1024程序员节|征文# 这篇文章是对之前文章中操作符的补充&#xff0c;可以看之前的文章&#xff1a;C语言初阶&#xff1a;六.算数操作_如何用编程表示除法-CSDN博客 C语言操作符是用于执行各种运算和操作的符号。包括算术操作符&#xff08;如、-、*、/、%&#xff09;&#…...

GO excelize 读取excel进行时间类型转换(自动转换)

GO excelize 读取excel进行时间类型转换&#xff08;自动转换&#xff09; 需求分析 需求&#xff1a;如何自动识别excel中的时间类型数据并转化成对应的 "Y-m-d H:i:s"类型数据。 分析&#xff1a;excelize在读取excel时&#xff0c;GetRows() 返回的都是字符串类…...

【算法与数据结构】二分查找思想

#1024程序员节&#xff5c;征文# 正文&#xff1a; 二分查找&#xff08;binary search&#xff09;是一种基于分治策略的高效搜索算法。它利用数据的有序性&#xff0c;每轮缩小一半搜索范围&#xff0c;直至找到目标元素或搜索区间为空为止&#xff0c;其实有时候数据没有序…...

PHP PDO:安全、灵活的数据持久层解决方案

PHP PDO&#xff1a;安全、灵活的数据持久层解决方案 PHP PDO&#xff08;PHP Data Objects&#xff09;是一个轻量级的、具有兼容接口的数据持久层抽象层。它提供了一个统一的API来访问多种数据库系统&#xff0c;如MySQL、PostgreSQL、SQLite、Oracle等。PDO扩展在PHP 5.1.0…...

九、Linux实战案例:项目部署全流程深度解析

Linux实战案例&#xff1a;项目部署全流程深度解析 在当今信息技术领域&#xff0c;Linux服务器凭借其卓越的稳定性、安全性以及强大的性能表现&#xff0c;被广泛应用于各类项目部署场景之中。本文将全面深入地介绍如何将一个项目成功部署至Linux服务器的完整流程&#xff0c…...

GIS常见前端开发框架

#1024程序员节&#xff5c;征文# 伴随GIS的发展&#xff0c;陆续出现了众多开源地图框架&#xff0c;这些地图框架与众多行业应用融合&#xff0c;极大地拓展了GIS的生命力&#xff0c;这里介绍几个常见的GIS前端开发框架&#xff0c;排名不分先后。 1.Leaflet https://leafl…...

Java | Leetcode Java题解之第506题相对名次

题目&#xff1a; 题解&#xff1a; class Solution {public String[] findRelativeRanks(int[] score) {int n score.length;String[] desc {"Gold Medal", "Silver Medal", "Bronze Medal"};int[][] arr new int[n][2];for (int i 0; i &…...

数据结构 - 堆

今天我们将学习新的数据结构-堆。 01定义 堆是一种特殊的二叉树&#xff0c;并且满足以下两个特性&#xff1a; &#xff08;1&#xff09;堆是一棵完全二叉树&#xff1b; &#xff08;2&#xff09;堆中任意一个节点元素值都小于等于&#xff08;或大于等于&#xff09;左…...

html----图片按钮,商品展示

源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图标</title><style>.box{width:…...

YOLOv11改进策略【卷积层】| ECCV-2024 小波卷积WTConv 增大感受野,降低参数量计算量,独家创新助力涨点

一、本文介绍 本文记录的是利用小波卷积WTConv模块优化YOLOv11的目标检测网络模型。WTConv的目的是在不出现过参数化的情况下有效地增加卷积的感受野,从而解决了CNN在感受野扩展中的参数膨胀问题。本文将其加入到深度可分离卷积中,有效降低模型参数量和计算量,并二次创新C3…...

redis高级篇之redis源码分析List类型quicklist底层演变 答疑159节

(1)ziplist压缩配置:list-compress-depth 0 表示一个quicklist两端不被压缩的节点个数。这里的节点是指quicklist双向链表的节点&#xff0c;而不是指ziplist里面的数据项个数参数list-compress-depth的取值含义如下: 0:是个特殊值&#xff0c;表示都不压缩。这是Redis的默认值…...

Elasticsearch 与 Lucene 的区别和联系

Elasticsearch 与 Lucene 的区别和联系 Elasticsearch 与 Lucene 的区别和联系一、知识背景Elasticsearch 简介Lucene 简介 二、Elasticsearch 和 Lucene 的区别适用场景性能优势和劣势架构设计的异同点 三、Elasticsearch和Lucene的联系四、Elasticsearch和Lucene的应用案例及…...

OpenCV视觉分析之运动分析(5)背景减除类BackgroundSubtractorMOG2的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 基于高斯混合模型的背景/前景分割算法。 该类实现了在文献[320]和[319]中描述的高斯混合模型背景减除。 cv::BackgroundSubtractorMOG2 类是 O…...

【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据

【SAP Hana】X-DOC&#xff1a;数据仓库ETL如何抽取SAP中的CDS视图数据 1、无参CDS对应数据库视图2、有参CDS对应数据库表函数3、封装有参CDS为无参CDS&#xff0c;从而对应数据库视图 1、无参CDS对应数据库视图 select * from ZFCML_REP_V where mandt 300;2、有参CDS对应数…...

WPF的UpdateSourceTrigger属性

在WPF中&#xff0c;UpdateSourceTrigger属性用于控制数据绑定中何时将绑定目标&#xff08;通常是UI元素&#xff09;的值更新回绑定源&#xff08;通常是数据对象&#xff09;。这个属性有以下几个值&#xff1a; Default&#xff1a;这是默认值&#xff0c;对于不同的绑定目…...

2024-09-25 环境变量,进程地址空间

一、认识常见的环境变量 1. echo $HOME 输出当前用户对应的家目录 当用户登录系统时&#xff0c;流程如下&#xff1a; &#xff08;1&#xff09;用户登录系统后&#xff0c;系统启动Shell程序。 &#xff08;2&#xff09;启动bash shell&#xff0c;准备接收用户指令。 &a…...

中国移动机器人将投入养老场景;华为与APUS共筑AI医疗多场景应用

AgeTech News 一周行业大事件 华为与APUS合作&#xff0c;共筑AI医疗多场景应用 中国移动展出人形机器人&#xff0c;预计投入养老等场景 作为科技与奥富能签约&#xff0c;共拓智能适老化改造领域 天与养老与香港科技园&#xff0c;共探智慧养老新模式 中山大学合作中国…...

青少年编程能力等级测评CPA C++ 四级试卷(1)

青少年编程能力等级测评CPA C 四级试卷&#xff08;1&#xff09; 一、单项选择题&#xff08;共15题&#xff0c;每题3分&#xff0c;共45分&#xff09; CP4_1_1.在面向对象程序设计中&#xff0c;与数据构成一个相互依存的整体的是&#xff08; &#xff09;。 A. 对数据…...

树上任意两点的距离

题目描述 给出 n 个点的一棵树&#xff0c;多次询问两点之间的最短距离。 注意&#xff1a;边是双向的。 输入描述 第一行为两个整数 n 和 m。n 表示点数&#xff0c;m 表示询问次数&#xff1b; 下来 n−1 行&#xff0c;每行三个整数 x,y,k&#xff0c;表示点 x 和点 y 之间…...

【 thinkphp8 】00008 thinkphp8数据查询,常用table,name方法,进行数据查询汇总

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【 t…...

Git的命令合集

关于Git的一些命令合集&#xff0c;会慢慢更新&#xff01; 20241024程序员节开始写的&#xff0c;记录一下~~ git查看log、查看详细提交记录 会显示之前的提交记录 , 排序由近及远 git log log按q退出 git回退到某个commit命令&#xff1a; 退到/进到指定commit的sha码&…...

博客搭建之路:hexo搜索引擎收录

文章目录 hexo搜索引擎收录以百度为例 hexo搜索引擎收录 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 写博客的目的肯定不是就只有自己能看到&#xff0c;想让更多的人看到就需要可以让搜索引擎来收录对应的文章。hexo支持生成站点地图sitemap 在hexo下的_config.yml中配置站点…...

创建Windows系统还原点

系统保护...

Linux等保测评需要用到的命令

三权设置 查看账户情况 cd /home/ ll 设置审计账户 useradd shenji passwd shenji 修改密码 passwd新密码 设置管理账户 useradd guanli passwd guanli compgen -u 查看用户 切换到root账户 su root 设置审计用户权限 vim /etc/sudoers shenji ALL (root) NOPASSWD:…...

PostgreSQL的学习心得和知识总结(一百五十六)|auto_explain — log execution plans of slow queries

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…...

数据结构模板代码合集(不完整)

P3368 【模板】树状数组 2 #include <bits/stdc.h> using namespace std; const int maxn 5e5 7;int n, m, s, t; int ans; int a[maxn]; struct node{int l, r;int num; }tr[maxn * 4];void build(int p, int l, int r){tr[p] {l, r, 0};if(l r){tr[p].num a[l];r…...

本科毕业论文答辩稿网站开发/爱站关键词挖掘工具

1. 问题描述&#xff1a; 这里有一个非负整数数组 arr&#xff0c;你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时&#xff0c;你可以跳到 i arr[i] 或者 i - arr[i]。请你判断自己是否能够跳到对应元素值为 0 的任意下标处。 注意&#xff0c;不管是什么情况下…...

如何制作表白小程序/百度竞价推广关键词优化

SELECT 新字段类型 ,表名 case when a.colorder1 then d.name else end,表说明 case when a.colorder1 then isnull(f.value,) else end,字段序号 a.colorder,字段名 a.name,字段类型 b.name,占用字节数 a.length,标识 case when COLUMNPROPERTY( a.id,a.name,IsIden…...

怎么形容网站做的好/兰州网站开发公司

文章目录前言用法前言 用于创建对DOM元素的引用。它还可以用于存储组件之间共享的变量&#xff0c;这些变量不会在组件重新渲染时发生更改。 用法 useRef() 可以接收一个初始值&#xff0c;返回一个包含 current 属性的对象&#xff0c;这个属性可以存储任意可变值&#xff…...

南宁小程序定制开发/seo基础入门教程

第一步&#xff1a;在窗体中添加一个PanelControl控件&#xff0c;该控件包含在工具箱中的DX.14.1: Navigation & Layout组件中。将该控件的Dock属性设置为“Fill”&#xff08;此时该控件可以随着窗体缩放&#xff09;。 第二步&#xff1a;在PanelControl控件中添加一个…...

wordpress 支持 手机版/5g站长工具查询

关键词&#xff1a;搜救小车 stc89c52 避障 机械臂摘要&#xff1a;由于灾害现场搜救人员难以迅速展开救援工作,设计出本小车,小车以STC89C52单片机为核心控制器,采用WIFI模块进行人机互交,体感、声感和光感模块辨别位置,机械手执行用户操作,红外和超声波组合进行避障。小车…...

宁津网站建设/灰色行业推广

主板都有什么类型呢&#xff1f;不同主板之间有什么区别吗&#xff1f;不同类型的主板都有什么用呢&#xff1f;装机的时候&#xff0c;主板的大小不仅和机箱有关&#xff0c;也和其他硬件以及自己的性能、功能需求有很大的关系&#xff0c;因此选择一个正确类型的主板至关重要…...