Day29——晚课 语音识别实战

作者:

系列教程说明

这是「AI专家养成计划」系列教程的第58篇,共140篇。从AI零基础出发,每天进步一点点。晚课以实操为主,手把手教你做——读完这篇,你就能用开源工具Whisper完成语音转文字、字幕生成、会议记录等实用任务。

上篇回顾

今天我们早课学习了语音识别的原理和应用。三个核心要点:

  • 语音识别三步走:声音→信号→音素→文字,通过信号处理、声学模型和语言模型的配合,把语音转换成文字
  • 深度学习带来质变:端到端模型(如Whisper)让识别准确率突破97%,已接近人类水平
  • 五大应用场景:实时字幕、语音输入、智能助手、会议记录、医疗记录——语音识别正在改变我们与机器的交互方式

现在,我们进入实操环节。今晚的目标:用5个实操练习,亲手掌握语音识别的核心技能。


实操一:5分钟安装Whisper,转写你的第一段音频

什么是Whisper?

Whisper是OpenAI开源的语音识别模型,支持99种语言,是目前最强大的开源语音识别工具之一。免费、可离线使用、效果接近商业产品。

安装步骤

第1步:安装Python环境

确认你的电脑上有Python 3.8以上版本。打开终端(Mac/Linux)或命令提示符(Windows),输入:

`bash

python3 –version

`

如果显示版本号≥3.8,就可以继续。

第2步:安装Whisper

`bash

pip install openai-whisper

`

如果遇到权限问题,加上 --user

`bash

pip install openai-whisper –user

`

第3步:安装FFmpeg(音频处理工具)

Whisper需要FFmpeg来读取音频文件。

  • Macbrew install ffmpeg
  • Ubuntu/Debiansudo apt install ffmpeg
  • Windows:从 ffmpeg.org 下载,解压后把路径添加到系统环境变量

动手试试

找一段音频文件(MP3、WAV、M4A都行),在终端输入:

`bash

whisper your_audio.mp3 –language zh –model base

`

参数说明:

  • --language zh:指定中文(不指定的话Whisper会自动检测语言)
  • --model base:使用base模型(平衡速度和准确率)

运行后,Whisper会在同目录下生成 .txt.srt.json 等多个格式的转写结果。其中 .srt 是字幕文件,可以直接导入视频编辑软件。

💡 小技巧:如果你的电脑没有独立显卡,用 tiny 模型速度更快:

`bash

whisper your_audio.mp3 –language zh –model tiny

`


实操二:批量转写——一次性处理10个音频文件

工作中经常需要批量处理多个音频文件。用一个简单的Python脚本就能搞定。

创建批量转写脚本

新建一个文件 batch_transcribe.py,粘贴以下代码:

`python

import whisper

import os

import glob

# 加载模型(只加载一次,节省时间)

model = whisper.load_model(“base”)

# 设置音频文件目录

audio_dir = “./audio_files” # 把你的音频文件放在这个目录

output_dir = “./transcripts” # 转写结果保存到这个目录

# 创建输出目录

os.makedirs(output_dir, exist_ok=True)

# 获取所有音频文件

audio_extensions = [“*.mp3”, “*.wav”, “*.m4a”, “*.flac”, “*.ogg”]

audio_files = []

for ext in audio_extensions:

audio_files.extend(glob.glob(os.path.join(audio_dir, ext)))

print(f”找到 {len(audio_files)} 个音频文件”)

# 逐个转写

for i, audio_path in enumerate(audio_files, 1):

filename = os.path.splitext(os.path.basename(audio_path))[0]

output_path = os.path.join(output_dir, f”{filename}.txt”)

# 跳过已转写的文件

if os.path.exists(output_path):

print(f”[{i}/{len(audio_files)}] 跳过 {filename}(已存在)”)

continue

print(f”[{i}/{len(audio_files)}] 正在转写 {filename}…”)

result = model.transcribe(audio_path, language=”zh”)

# 保存纯文本

with open(output_path, “w”, encoding=”utf-8″) as f:

f.write(result[“text”])

# 保存带时间戳的文本

srt_path = os.path.join(output_dir, f”{filename}.srt”)

with open(srt_path, “w”, encoding=”utf-8″) as f:

for j, segment in enumerate(result[“segments”], 1):

start = segment[“start”]

end = segment[“end”]

text = segment[“text”].strip()

# 转换为SRT时间格式

start_str = f”{int(start//3600):02d}:{int((start%3600)//60):02d}:{int(start%60):02d},{int((start%1)*1000):03d}”

end_str = f”{int(end//3600):02d}:{int((end%3600)//60):02d}:{int(end%60):02d},{int((end%1)*1000):03d}”

f.write(f”{j}n{start_str} –> {end_str}n{text}nn”)

print(f” ✅ 完成,结果保存到 {output_path}”)

print(“n全部完成!”)

`

使用方法

`bash

# 1. 创建音频目录

mkdir -p audio_files transcripts

# 2. 把音频文件放到 audio_files 目录

cp ~/your_audio/*.mp3 audio_files/

# 3. 运行脚本

python3 batch_transcribe.py

`

脚本会自动跳过已经转写过的文件,所以中断后可以重新运行,不会重复处理。


实操三:实时语音识别——让AI边听边写

Whisper擅长处理录音文件,但如果你想实时识别正在说的话(比如边开会边记录),需要另一个工具。

方案一:Whisper + 实时录音(简单方案)

`python

import whisper

import sounddevice as sd

import numpy as np

import tempfile

import scipy.io.wavfile as wav

model = whisper.load_model(“base”)

print(“🎤 实时语音识别(按 Ctrl+C 停止)”)

print(“说话后等待2秒,AI会自动识别…n”)

try:

while True:

# 录制3秒音频

duration = 3 # 秒

print(“🎙️ 正在听…”, end=””, flush=True)

audio = sd.rec(int(duration * 16000), samplerate=16000, channels=1, dtype=’float32′)

sd.wait()

# 保存为临时文件

with tempfile.NamedTemporaryFile(suffix=”.wav”, delete=False) as f:

wav.write(f.name, 16000, (audio * 32767).astype(np.int16))

# 转写

result = model.transcribe(f.name, language=”zh”)

text = result[“text”].strip()

if text:

print(f”r📝 {text}”)

else:

print(“r(未检测到语音)”)

except KeyboardInterrupt:

print(“nn结束识别”)

`

安装依赖:

`bash

pip install sounddevice scipy

`

方案二:使用FunASR(阿里开源,更适合中文)

FunASR对中文的优化比Whisper更好,而且支持标点恢复和说话人识别。

`bash

# 安装

pip install funasr

`

`python

from funasr import AutoModel

# 加载模型(首次运行会自动下载)

model = AutoModel(

model=”paraformer-zh”, # 中文语音识别模型

vad_model=”fsmn-vad”, # 语音活动检测

punc_model=”ct-punc”, # 标点恢复

)

# 转写音频文件

result = model.generate(input=”your_audio.mp3″)

print(result[0][“text”])

`

FunASR的优势

  • 自动加标点(Whisper的中文标点不太准)
  • 支持语音活动检测(自动跳过静音段)
  • 中文准确率比Whisper base模型更高

实操四:会议记录自动化——从录音到纪要的完整流程

这是最实用的项目。把一场1小时的会议录音,自动变成结构化的会议纪要。

完整代码

`python

import whisper

import json

from datetime import timedelta

def meeting_to_minutes(audio_path, output_path=”meeting_minutes.md”):

“””

会议录音 → 结构化纪要

“””

print(“📥 步骤1/3:加载Whisper模型…”)

model = whisper.load_model(“medium”) # medium模型准确率更高

print(“🎤 步骤2/3:转写会议录音(这可能需要几分钟)…”)

result = model.transcribe(

audio_path,

language=”zh”,

word_timestamps=True, # 启用词级时间戳

initial_prompt=”以下是一场工作会议的记录。” # 提示上下文,提升准确率

)

# 提取带时间戳的段落

segments = result[“segments”]

print(“📝 步骤3/3:生成会议纪要…”)

with open(output_path, “w”, encoding=”utf-8″) as f:

f.write(“# 会议纪要nn”)

f.write(f”生成时间:{timedelta(seconds=0)} – {timedelta(seconds=int(segments[-1][‘end’]))}nn”)

f.write(“—nn”)

# 按时间段输出(每5分钟一段)

current_minute = 0

f.write(f”## 📌 第1段(0:00 – 5:00)nn”)

for seg in segments:

minute = int(seg[“start”] // 60)

# 每5分钟换一段

if minute >= current_minute + 5:

current_minute = minute

f.write(f”n## 📌 第{current_minute // 5 + 1}段({current_minute}:00 – {current_minute + 5}:00)nn”)

# 输出带时间戳的文字

start = str(timedelta(seconds=int(seg[“start”])))

text = seg[“text”].strip()

f.write(f”[{start}] {text}nn”)

# 生成摘要提示

f.write(“—nn”)

f.write(“## 💡 AI建议nn”)

f.write(“以上内容由Whisper自动生成。建议用ChatGPT进一步处理:nn”)

f.write(“`n”)

f.write(“请根据以下会议转写内容,生成结构化的会议纪要,包含:n”)

f.write(“1. 会议主题n”)

f.write(“2. 参会人员(如果能识别)n”)

f.write(“3. 主要讨论内容(分点列出)n”)

f.write(“4. 决策事项n”)

f.write(“5. 待办事项(含负责人和截止时间)n”)

f.write(“`n”)

print(f”n✅ 会议纪要已保存到 {output_path}”)

print(f”📊 共转写 {len(segments)} 个段落,总时长 {timedelta(seconds=int(segments[-1][‘end’]))}”)

# 使用方法

meeting_to_minutes(“meeting_recording.mp3”)

`

使用步骤

`bash

# 1. 录制会议(用手机录音机App即可)

# 2. 把录音文件传到电脑

# 3. 运行脚本

python3 meeting_minutes.py

# 4. 把生成的markdown文件内容粘贴到ChatGPT,让它帮你整理成正式纪要

`

💡 进阶技巧

在调用Whisper时,initial_prompt 参数非常有用。它告诉AI”上下文是什么”,可以显著提升专业术语的识别准确率。

`python

# 如果是技术会议

result = model.transcribe(audio, initial_prompt=”以下是一场技术评审会议,涉及微服务架构、Kubernetes部署、CI/CD流水线。”)

# 如果是医学会议

result = model.transcribe(audio, initial_prompt=”以下是一场科室会诊,涉及患者病史、诊断、治疗方案。”)

`


实操五:搭建你的私有语音助手(开源方案)

如果你想在自己的电脑上搭建一个完全离线、不依赖任何云服务的语音助手,可以试试这个组合:

技术栈

  • 语音识别(ASR):Whisper(已安装)
  • 语音合成(TTS):Piper(开源,下节课会详细讲)
  • 大语言模型(LLM):Ollama + Llama3(本地运行)
  • 语音活动检测(VAD):Silero VAD(判断什么时候有人在说话)

安装Ollama

`bash

# Mac/Linux

curl -fsSL https://ollama.com/install.sh | sh

# 下载一个轻量模型

ollama pull llama3.2:3b

`

最简语音助手代码

`python

import whisper

import sounddevice as sd

import numpy as np

import tempfile

import scipy.io.wavfile as wav

import requests

import json

# 加载Whisper

asr_model = whisper.load_model(“base”)

# Ollama API地址

OLLAMA_URL = “http://localhost:11434/api/generate”

def listen():

“””录制3秒音频并转写”””

audio = sd.rec(int(3 * 16000), samplerate=16000, channels=1, dtype=’float32′)

sd.wait()

with tempfile.NamedTemporaryFile(suffix=”.wav”, delete=False) as f:

wav.write(f.name, 16000, (audio * 32767).astype(np.int16))

result = asr_model.transcribe(f.name, language=”zh”)

return result[“text”].strip()

def think(text):

“””用Ollama思考”””

response = requests.post(OLLAMA_URL, json={

“model”: “llama3.2:3b”,

“prompt”: f”你是一个友善的语音助手。用户说:{text}n请用简短的中文回答:”,

“stream”: False

})

return response.json()[“response”]

# 主循环

print(“🤖 语音助手已启动(按 Ctrl+C 退出)”)

print(“对着麦克风说话,我会回答你…n”)

try:

while True:

print(“🎙️ 在听…”, end=””, flush=True)

text = listen()

if not text:

print(“r(没听清,请再说一次)”)

continue

print(f”r👤 你说:{text}”)

answer = think(text)

print(f”🤖 AI:{answer}n”)

except KeyboardInterrupt:

print(“n再见!”)

`

这个语音助手完全在本地运行,不需要联网,不需要API Key。你的对话内容不会离开你的电脑。


今日总结

  1. Whisper是最佳起点:免费开源、支持中文、效果接近商业产品,5分钟就能完成第一次语音转文字
  2. 批量处理用脚本:一段Python代码就能批量转写多个音频文件,自动生成纯文本和字幕文件
  3. ASR+LLM是黄金组合:Whisper负责”听”,ChatGPT/Ollama负责”理解”和”整理”——这就是语音助手的核心架构

今日行动项

  1. 安装Whisper并转写一段音频(15分钟):找一段播客或会议录音,用 whisper 命令转写,看看效果如何
  2. 尝试批量转写脚本(10分钟):准备3-5个音频文件,运行批量转写脚本,对比不同音频的识别效果
  3. 用ChatGPT整理转写结果(10分钟):把Whisper的转写文本粘贴到ChatGPT,让它帮你生成摘要或会议纪要

📖 地铁深读:语音识别的”内卷”——Whisper vs 各路对手

这个板块专为地铁通勤设计,每篇5-10分钟。不想深读可以跳过,不影响主线学习。

Whisper凭什么封神?

2022年9月,OpenAI发布Whisper时,语音识别领域已经”卷”了很多年。Google有自家的USM,Meta有wav2vec 2.0,阿里有Paraformer。但Whisper一出来,直接改变了游戏规则。

Whisper的秘密武器不是算法有多花哨,而是数据量。它用了68万小时的多语言音频数据训练——这个数据量是之前最大开源数据集的几十倍。而且这些数据来自互联网,包含了各种口音、噪音、语速的真实场景。

关键洞察:在深度学习时代,数据规模往往比算法创新更重要。Whisper的架构并不复杂(标准的Transformer encoder-decoder),但68万小时的训练数据让它”见多识广”,遇到什么口音都不怕。

中文语音识别的”内战”

在中文领域,Whisper并不是唯一的选项。来看看主要选手:

FunASR(阿里达摩院)

  • 优势:中文优化极好,支持标点恢复、说话人分离
  • 劣势:多语言支持不如Whisper
  • 适合:纯中文场景(会议记录、客服录音)

SenseVoice(FunASR团队2024年新作)

  • 优势:支持50+语言,情绪识别,速度比Whisper快5倍
  • 劣势:社区生态不如Whisper成熟
  • 适合:需要情绪分析的场景(客服质检、访谈分析)

WeNet(出门问问+西工大)

  • 优势:工业级部署方案,支持流式识别
  • 劣势:上手门槛较高
  • 适合:需要嵌入到产品中的开发者

一个有趣的实验

如果你想亲自对比这些模型,可以试试这个方法:

`bash

# 准备同一段音频

audio=”test.mp3″

# Whisper

whisper $audio –language zh –model base

# FunASR(需要安装)

python3 -c “

from funasr import AutoModel

model = AutoModel(model=’paraformer-zh’, vad_model=’fsmn-vad’, punc_model=’ct-punc’)

result = model.generate(input=’$audio’)

print(result[0][‘text’])

`

把两段结果放在一起对比,你会发现:

  • Whisper的英文混杂识别更好(比如”这个API返回了error”)
  • FunASR的中文标点更准(自动加逗号、句号)
  • 在专业术语方面,两者各有胜负

语音识别的下一个前沿

当前语音识别的主要战场已经从”准确率”转向了”实时性”和”多模态”:

  1. 流式识别:边听边转写,延迟<500ms。这对直播字幕、实时翻译至关重要
  2. 端侧部署:把模型装进手机和IoT设备,不需要联网就能识别。Whisper tiny只有39MB,已经可以在手机上跑
  3. 多模态理解:不仅听”说了什么”,还理解”怎么说的”——语气、情绪、意图。这是通往真正智能语音助手的关键一步

推荐学习资源

  • Whisper GitHub:github.com/openai/whisper — 官方仓库,包含模型和论文
  • FunASR GitHub:github.com/modelscope/FunASR — 阿里开源的语音识别工具包
  • HuggingFace ASR排行榜:huggingface.co/spaces/hf-audio/open_asr_leaderboard — 实时对比各模型准确率
  • 《动手学深度学习》语音识别章节:d2l.ai — 李沐团队的免费教材,讲解语音识别原理

进阶思考题

  1. Whisper用了68万小时数据训练,但这些数据来自互联网,可能存在版权争议。如果你要训练一个商业语音识别模型,数据来源问题怎么解决?
  2. 流式识别(边听边写)和离线识别(听完再写)的准确率通常有2-5%的差距。你能想到是什么原因导致的吗?

下篇预告

明天早上8点:Day30——语音合成:让AI开口说话

明天下午5点:Day30——语音合成实战

今天我们学会了让AI”听”,明天反过来——让AI”说”。文字转语音(TTS)技术已经能生成以假乱真的人声,甚至能克隆你的声音。我们将了解这项技术的原理、工具和伦理边界。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注