基于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文件,并在听写时加载对应语言的提示词文件。


沪公网安备 31011002002714 号