基于Whisper的批量语音听写示例
阅读
2025-01-05更新
最新编辑:本森级7号舰拉菲
阅读:
更新日期:2025-01-05
最新编辑:本森级7号舰拉菲
什么是Whisper
Whisper是由OpenAI开发的一个开源语音识别模型(Speech-to-Text)。它的目标是提供高效、准确的语音转文字服务,并且具有强大的多语言支持。Whisper 可以用于将音频文件中的语音转换为文本,并支持多种语言的语音识别,包括英语、中文、西班牙语、法语等多种语言。
项目地址:Github
Whisper的特点
- 多语言支持:Whisper 能够处理多种语言的语音输入,并识别其中的文本内容。它不仅支持主流语言(如英语、中文、西班牙语),还支持一些低资源语言和方言。
- 高准确率:Whisper 基于深度学习模型进行训练,能够处理不同的语音音质和噪音环境,因此在多种条件下表现得比较稳健。
- 自动语言检测:Whisper 可以自动检测语音的语言,而不需要你明确指定输入语言。
- 开源:Whisper 模型是开源的,任何人都可以使用和修改它。这使得 Whisper 成为开发语音识别应用的一个有力工具。
- 适用范围广泛:除了用于语音转文字,它还可以应用于字幕生成、语音搜索、语音命令等多个场景。
- 支持音频文件格式:Whisper 支持多种常见的音频格式,如 WAV、MP3、FLAC 等。
使用Whisper需了解
- 硬件要求:Whisper是基于深度学习模型的,因此需要一定的计算资源。使用时,你需要保证有足够的CPU或GPU能力,尤其是在处理大规模音频时。对于普通用户来说,CPU也能运行模型,但听写速度会非常慢,通常情况下建议搭配英伟达或者英特尔的独立GPU会更高效。
- 软件要求:Whisper提供了Python API,使用时系统需要配置好Python环境以及ffmpeg环境。
环境配置和安装
Python环境安装和配置
- 1.由于Whisper推荐使用Python3.8~3.11版本,这里我们下载64位3.11.9版本安装包,
- 官网安装包:python-3.11.9-amd64
- 2.下载好后双击安装包运行,在安装程序界面需勾选下方的
Add Python 3.x to PATH
将Python添加到系统变量中,然后点“Install Now”即可完成安装。
- 3.使用键盘上的Windows + R启动运行窗口并输入cmd打开命令提示符,在命令提示符输入
python
后回车,如窗口内看到类似Python 3.xxx的输出,就说明Python安装成功!
ffmpeg环境安装和配置
- 1.首先下载ffmpeg-7.1版本压缩包,双击打开并将里面的文件夹解压到任意位置你能记住的地方就行,
- 2.在桌面此电脑点击右键,选择属性,在弹出的窗口中选择高级系统设置,在高级选项卡下点击环境变量,
- 3.在上方的用户变量中点击Path再点击编辑按钮,
- 4.在弹出的窗口中点击新建,并将刚刚解压的ffmpeg文件夹下的bin目录完整的目录地址粘贴上去并点击确定保存即可。
- 4.同样打开命令提示符输入
ffmpeg -version
后回车,如窗口内看到类似版本输出信息,即说明配置成功。
Whisper安装
- 1.由于使用Whisper需要安装各种依赖的Python库,这里可以使用官方建议的Git方式自动安装相关依赖,首先打开命令提示符输入
pip install gitpython
后回车安装GitPython库,如最后出现类似Successfully installed....的输出则表示安装成功。 - 2.在命令提示符中输入
pip install git+https://github.com/openai/whisper.git
开始安装Whisper和它的依赖库,这个过程相对较长,如果最后出现类似Successfully built openai-whisper的输出则表示安装成功,如果出现报错,有可能是网络问题,可以尝试挂梯子或者重新再输入一遍刚才的命令重试。
- 3.当安装过程全部完成时我们可以尝试在命令提示符中输入
whisper --help
查看帮助信息,如果有类似下图输出则表明安装成功。
Whisper模型选择和下载
Whisper提供了6种模型可供选择,每种模型的大小、运行时对VRAM的需求、听写速度均有不同,这里可以按需选择。理论上越大的模型,听写准确率相对越高,但运行时VRAM的需求也会越大,听写速度也会越慢。
模型 | 模型大小 | VRAM需求 | 相对速度 |
---|---|---|---|
tiny | 39 M | ~1 GB | ~10x |
base | 74 M | ~1 GB | ~7x |
small | 244 M | ~2 GB | ~4x |
medium | 769 M | ~5 GB | ~2x |
large | 1550 M | ~10 GB | 1x |
turbo | 809 M | ~6 GB | ~8x |
Whisper会在你第一次运行脚本时自动下载你指定的模型,但是下载速度相对较慢,这里可以提前下载模型然后放到指定的目录内。上表提供了所有模型的下载地址,直接打开或复制到下载软件内即可下载。
- 带.en后缀的模型为只支持听写英语的模型,如果你只用来听写英语可以选择此类模型。
- turbo模型是large-v3的优化版本,可提供更快的转录速度和最小的准确性下降,可以理解为large-v3的青春版。
将下载好的.pt后缀的模型文件移动到C:\Users\用户名\.cache\whisper
目录下即可。
Whisper使用
支持的语言
语言简写 | 语言名称 |
---|---|
en | english |
zh | chinese |
ja | japanese |
de | german |
es | spanish |
ru | russian |
ko | korean |
fr | french |
pt | portuguese |
tr | turkish |
pl | polish |
ca | catalan |
nl | dutch |
ar | arabic |
sv | swedish |
it | italian |
id | indonesian |
hi | hindi |
fi | finnish |
vi | vietnamese |
he | hebrew |
uk | ukrainian |
el | greek |
ms | malay |
cs | czech |
ro | romanian |
da | danish |
hu | hungarian |
ta | tamil |
no | norwegian |
th | thai |
ur | urdu |
hr | croatian |
bg | bulgarian |
lt | lithuanian |
la | latin |
mi | maori |
ml | malayalam |
cy | welsh |
sk | slovak |
te | telugu |
fa | persian |
lv | latvian |
bn | bengali |
sr | serbian |
az | azerbaijani |
sl | slovenian |
kn | kannada |
et | estonian |
mk | macedonian |
br | breton |
eu | basque |
is | icelandic |
hy | armenian |
ne | nepali |
mn | mongolian |
bs | bosnian |
kk | kazakh |
sq | albanian |
sw | swahili |
gl | galician |
mr | marathi |
pa | punjabi |
si | sinhala |
km | khmer |
sn | shona |
yo | yoruba |
so | somali |
af | afrikaans |
oc | occitan |
ka | georgian |
be | belarusian |
tg | tajik |
sd | sindhi |
gu | gujarati |
am | amharic |
yi | yiddish |
lo | lao |
uz | uzbek |
fo | faroese |
ht | haitian creole |
ps | pashto |
tk | turkmen |
nn | nynorsk |
mt | maltese |
sa | sanskrit |
lb | luxembourgish |
my | myanmar |
bo | tibetan |
tl | tagalog |
mg | malagasy |
as | assamese |
tt | tatar |
haw | hawaiian |
ln | lingala |
ha | hausa |
ba | bashkir |
jw | javanese |
su | sundanese |
yue | cantonese |
示例脚本1
import os
import json
import whisper
from pathlib import Path
# 定义语音文件和输出文件夹
script_dir = os.path.dirname(os.path.abspath(__file__))
in_folder = Path(script_dir) / 'in'
p = Path(in_folder)
# 加载Whisper模型
model = whisper.load_model("large-v3") # 这里可以根据你的需要更换不同的模型
# 创建一个新的文件用于汇总输出
output_file = Path(script_dir) / "output.json" # 这里可以指定输出json文件文件名
# 用于存储所有文件的转录结果
transcription_results = []
# 遍历语音文件夹下的所有.mp3文件
for f in p.glob("*.mp3"): # 这里可以根据需要修改为不同的音频文件后缀,比如.wav
# 转录音频文件
result = model.transcribe(str(f), language="ja") # 这里可以指定听写的语言
# 将每个文件的转录结果以字典形式存储
transcription_results.append({
"File": f.name,
"Text": result['text']
})
# 将所有结果保存为JSON文件
with open(output_file, "w", encoding="utf-8") as json_out:
json.dump(transcription_results, json_out, ensure_ascii=False, indent=4)
print(f"转录结果已保存为: {output_file}")
这是一个最简单的示例,脚本会读取同级目录下的in文件夹内所有mp3文件并使用large-v3模型进行听写,这里指定了听写的语言为日语,并将听写后的结果以json的形式保存到脚本所在目录,文件名为output.json。
示例脚本2
import os
import json
import whisper
from pathlib import Path
# 加载提示词文件
def load_initial_prompt(file_path):
try:
with open(file_path, 'r', encoding='utf-8') as f:
prompts = f.read().splitlines()
return ",".join(prompts)
except FileNotFoundError:
print(f"错误: 文件 {file_path} 未找到")
return ""
except Exception as e:
print(f"错误: 读取文件时出现问题: {e}")
return ""
# 定义语音文件和输出文件夹
script_dir = os.path.dirname(os.path.abspath(__file__))
in_folder = Path(script_dir) / 'in'
p = Path(in_folder)
prompts_file = Path(script_dir) / "prompt_ja.txt" # 这里可以指定提示词文件
# 加载Whisper模型
model = whisper.load_model("large-v3") # 这里可以根据你的需要更换不同的模型
# 读取提示词并转换为字符串
initial_prompt = load_initial_prompt(prompts_file)
# 创建一个新的文件用于汇总输出
output_file = Path(script_dir) / "output.json" # 这里可以指定输出json文件文件名
# 用于存储所有文件的转录结果
transcription_results = []
# 遍历语音文件夹下的所有.mp3文件
for f in p.glob("*.mp3"): # 这里可以根据需要修改为不同的音频文件后缀,比如.wav
# 转录音频文件
result = model.transcribe(str(f), initial_prompt=initial_prompt, language="ja") # 这里可以指定听写语言
# 将每个文件的转录结果以字典形式存储
transcription_results.append({
"File": f.name,
"Text": result['text']
})
# 将所有结果保存为JSON文件
with open(output_file, "w", encoding="utf-8") as json_out:
json.dump(transcription_results, json_out, ensure_ascii=False, indent=4)
print(f"转录结果已保存为: {output_file}")
该示例是在前一个示例的基础上添加了提示词,whisper在听写时支持加载提示词,在某些特定场景下会提高特有词汇的准确率,比如游戏的一些特有词汇,该示例中脚本会读取同级目录下的prompt_ja.txt提示词文件,prompt_ja.txt文件的格式如下。建议可以将不同语言的提示词保存成不同的txt文件,并在听写时加载对应语言的提示词文件。