语音识别教程:Whisper

语音识别教程:Whisper

一、前言

最近看国外教学视频的需求,有些不是很适应,找了找AI字幕效果也不是很好,遂打算基于Whisper和GPT做一个AI字幕给自己。

二、具体步骤

1、安装FFmpeg

Windows:

  1. 进入 https://github.com/BtbN/FFmpeg-Builds/releases,点击 windows版本的FFMPEG对应的图标,进入下载界面点击 download 下载按钮。

  2. 解压下载好的zip文件到指定目录(放到你喜欢的位置)

  3. 将解压后的文件目录中 bin 目录(包含 ffmpeg.exe )添加进 path 环境变量中

  4. DOS 命令行输入 ffmpeg -version, 出现以下界面说明安装完成:

2、安装Whisper模型

运行以下程序,会自动安装Whisper-small的模型,并识别音频audio.mp3 输出识别到的文本。(如果没有科学上网的手段请手动下载)

python 复制代码
import whisper
model = whisper.load_model("small")
result = model.transcribe("audio.mp3")
print(result["text"])

运行结果如下

三、其他

实时录制音频并转录

python 复制代码
import pyaudio
import wave
import numpy as np
from pydub import AudioSegment
from audioHandle import addAudio_volume,calculate_volume
from faster_whisper import WhisperModel

model_size = "large-v3"

# Run on GPU with FP16
model = WhisperModel(model_size, device="cuda", compute_type="float16")

def GetIndex():
    p = pyaudio.PyAudio()
    # 要找查的设备名称中的关键字
    target = '立体声混音'
    for i in range(p.get_device_count()):
        devInfo = p.get_device_info_by_index(i)
        # if devInfo['hostApi'] == 0:
        if devInfo['name'].find(target) >= 0 and devInfo['hostApi'] == 0:
            print(devInfo)
            print(devInfo['index'])
            return devInfo['index']
    return -1
# 配置
FORMAT = pyaudio.paInt16  # 数据格式
CHANNELS = 1 # 声道数
RATE = 16000  # 采样率
CHUNK = 1024  # 数据块大小
RECORD_SECONDS = 5  # 录制时长
WAVE_OUTPUT_FILENAME = "output3.wav"  # 输出文件
DEVICE_INDEX = GetIndex() # 设备索引,请根据您的系统声音设备进行替换
if DEVICE_INDEX==-1:
    print('请打开立体声混音')
audio = pyaudio.PyAudio()

# 开始录制
stream = audio.open(format=FORMAT, channels=CHANNELS,
                    rate=RATE, input=True,
                    frames_per_buffer=CHUNK, input_device_index=DEVICE_INDEX)
data = stream.read(CHUNK)
print("recording...")

frames = []

moreDatas=[]
maxcount=3
count=0
while True:
    # 初始化一个空的缓冲区

    datas = []
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):

        data = stream.read(CHUNK)

        audio_data = np.frombuffer(data, dtype=np.int16)
        datas.append(data)


        # 计算音频的平均绝对值
        volume = np.mean(np.abs(audio_data))
        # 将音量级别打印出来
        print("音量级别:", volume)
    moreDatas.append(datas)

    if len(moreDatas)>maxcount:
        moreDatas.pop(0)
    newDatas=[i for j in moreDatas for i in j]
    buffers=b''
    for buffer in newDatas:
        buffers+=buffer

    print('开始识别')
    buffers=np.frombuffer(buffers, dtype=np.int16)
   # a = np.ndarray(buffer=np.array(datas), dtype=np.int16, shape=(CHUNK,))
    segments, info = model.transcribe(np.array(buffers), language="en")
    text=''
    for segment in segments:
        print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
        text+=segment.text
    print(text)
print("finished recording")

# 停止录制
stream.stop_stream()
stream.close()
audio.terminate()

# 保存录音
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(audio.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()


#addAudio_volume(WAVE_OUTPUT_FILENAME)
相关推荐
qq_2529413168几秒前
航拍羊群目标检测数据集 | 航拍羊群 智慧畜牧业 动物检测 无人机巡检5010期
人工智能·yolo·目标检测·计算机视觉·无人机·羊群识别·羊群
A.说学逗唱的Coke2 分钟前
【AI·Coding】多工具协作实战:同一个项目如何无缝切换 Qoder / Claude Code / Codex / Cursor / Trae
人工智能
Wang's Blog6 分钟前
Vibe Coding一人即团队系列40: 基于Git历史与自定义Skill的自动化周报生成实践
人工智能·自动化
187877086098 分钟前
Hip-Hop 音乐制作工具推荐:从 Beat、录音到混音的实用选型
人工智能
cqsztech9 分钟前
Oracle ai database 26ai rac 通过gold image 更新季度补
数据库·人工智能·oracle
Wang's Blog14 分钟前
Vibe Coding一人即团队系列42: 跨端App开发前期准备与工具链搭建
人工智能
aiot1891893521817 分钟前
机场候机大厅高空场景技术红线!蓝牙AOA不能做手机导航??!!
大数据·网络·人工智能·蓝牙aoa
geneculture18 分钟前
驻行载器 + 双字棋盘 = AI、AGI 及 ASI 的配套GXPS
人工智能·信息科学·哲学与科学统一性·邹晓辉融智学·驻行载器·双字棋盘·全域测序定位智慧系统
穆利堂-movno120 分钟前
郑州新网软件科技有限公司AI 数据源错误纠正反馈
大数据·数据库·人工智能
苏苏susuus21 分钟前
怎样研究大模型——以Qwen为例
人工智能