一条瑾瑜的小站

一条瑾瑜的小站



python Whisper 模块学习

jinyu · 2025-10-24 · 11浏览 · python


Whisper是一种通用的语音识别模型。它是在包含各种音频的大型数据集上训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。 Open
AI在2022年9月21日开源了号称其英文语音辨识能力已达到人类水准的Whisper神经网络,且它亦支持其它98种语言的自动语音辨识。
Whisper系统所提供的自动语音辨识(Automatic Speech
Recognition,ASR)模型是被训练来运行语音辨识与翻译任务的,它们能将各种语言的语音变成文本,也能将这些文本翻译成英文。

1.在 Windows 系统上安装Whisper 模块

需要顺便安装需要的模块 如wheel,zhconv,torch 等

1.    pip install -U openai-whisper
2.    pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
3.    pip install zhconv
4.    pip3 install wheel
5.    pip3 install torch torchvision torchaudio

注:没科学上网会下载有可能很慢,可以替换成国内镜像加快下载速度

下载ffmpeg

https://github.com/BtbN/FFmpeg-Builds/releases

解压后,找到bin文件夹下的“ffmpeg.exe”,假设这个文件夹的路径是"D: \ffmpeg\bin ",然后将"D: /ffmpeg/bin "添加到系统环境变量PATH。

2.Whisper的基本使用:识别声音文件

注:第一次使用对应的模型时,会自动从互联网下载相关内容,如下图是正常情况。
文件存放位置为:C:\Users\Administrator(用户名).cache\whisper

import whisper
import os

if __name__ == '__main__':
    # 获取脚本所在目录的绝对路径
    script_dir = os.path.dirname(os.path.abspath(__file__))
    # 构建音频文件的绝对路径
    audio_path = os.path.join(script_dir, "output.wav")
    
    model = whisper.load_model("base")
    result = model.transcribe(audio_path, fp16=False, language="Chinese")
    print(result["text"])

我们会发现输出内容为繁体字,若需要显示简体中文需要安装相关转换库opencc

pip install opencc

import whisper
import os
import opencc

script_dir = os.path.dirname(os.path.abspath(__file__))
audio_path = os.path.join(script_dir, "test_talk_boy.mp3")

model = whisper.load_model("base")
result = model.transcribe(audio_path, language='Chinese', fp16=False)

cc = opencc.OpenCC("t2s")
res = cc.convert(result['text'])
print(res)


3.Whisper的基本使用:输出断句内容

在一个语音中,我们都会有一些停顿。但是,在识别结果中,这些停顿并没有被完全表示出来。我们可以如此修改代码,实现按断句输出结果:

import whisper
import opencc
import os

script_dir = os.path.dirname(os.path.abspath(__file__))
# 构建音频文件的绝对路径
audio_path = os.path.join(script_dir, "test_talk_boy.mp3")

model = whisper.load_model("base")
result = model.transcribe(audio_path,fp16=False,language='Chinese')
cc = opencc.OpenCC("t2s")

for i in result.items():
    print(i)

for i in result['segments']:
    res = cc.convert(i['text'])
    print(f"断句开始于{i['start']}秒,结束于{i['end']}秒,识别结果:{res}")


4.使用Whisper和pyaudio,实现实时录音识别

import whisper
import zhconv
import wave  # 使用wave库可读、写wav类型的音频文件
import pyaudio  # 使用pyaudio库可以进行录音,播放,生成wav文件


def record(time):  # 录音程序
    # 定义数据流块
    CHUNK = 1024  # 音频帧率(也就是每次读取的数据是多少,默认1024)
    FORMAT = pyaudio.paInt16  # 采样时生成wav文件正常格式
    CHANNELS = 1  # 音轨数(每条音轨定义了该条音轨的属性,如音轨的音色、音色库、通道数、输入/输出端口、音量等。可以多个音轨,不唯一)
    RATE = 16000  # 采样率(即每秒采样多少数据)
    RECORD_SECONDS = time  # 录音时间
    WAVE_OUTPUT_FILENAME = "./output.wav"  # 保存音频路径
    p = pyaudio.PyAudio()  # 创建PyAudio对象
    stream = p.open(format=FORMAT,  # 采样生成wav文件的正常格式
                    channels=CHANNELS,  # 音轨数
                    rate=RATE,  # 采样率
                    input=True,  # Ture代表这是一条输入流,False代表这不是输入流
                    frames_per_buffer=CHUNK)  # 每个缓冲多少帧
    print("* recording")  # 开始录音标志
    frames = []  # 定义frames为一个空列表
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):  # 计算要读多少次,每秒的采样率/每次读多少数据*录音时间=需要读多少次
        data = stream.read(CHUNK)  # 每次读chunk个数据
        frames.append(data)  # 将读出的数据保存到列表中
    print("* done recording")  # 结束录音标志

    stream.stop_stream()  # 停止输入流
    stream.close()  # 关闭输入流
    p.terminate()  # 终止pyaudio

    wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')  # 以’wb‘二进制流写的方式打开一个文件
    wf.setnchannels(CHANNELS)  # 设置音轨数
    wf.setsampwidth(p.get_sample_size(FORMAT))  # 设置采样点数据的格式,和FOMART保持一致
    wf.setframerate(RATE)  # 设置采样率与RATE要一致
    wf.writeframes(b''.join(frames))  # 将声音数据写入文件
    wf.close()  # 数据流保存完,关闭文件


if __name__ == '__main__':
    model = whisper.load_model("base")
    record(5)  # 定义录音时间,单位/s
    # 根据设备是否支持FP16设置参数,避免警告
    result = model.transcribe("output.wav", language='Chinese', fp16=False)
    s = result["text"]
    s1 = zhconv.convert(s, 'zh-cn')
    print(s1)







comment 评论区

添加新评论





  • ©2025 bilibili.com

textsms
内容不能为空
account_circle
昵称不能为空
email
邮件地址格式错误
web
beach_access
验证码不能为空
keyboard发表评论


star_outline 咱快来抢个沙发吧!




©2025 一条瑾瑜的小站

Theme Romanticism2.1 by Akashi
本站已在国内备案: 赣ICP备2025057350号