使用Whisper本地部署实现香港版粤语+英语混合语音转文字方案

今天要一个非常好的朋友有个工作,就是要把医院医生诊断的说话记录转成文字,之前都是她本人一句一句的听,然后记录下来的,我想通过ai 来解决这个问题。

她的需求如下:

  • 不能把数据传到网上,隐私问题所以需要本地部署
  • 不能成本太高要不然就没意义了,所以希望一般的电脑能跑起来,最少最新的mac能跑起来
  • 最好容易上手的不要有学习成本

据调研要实现这个功能,目前最强大且最方便的方案是使用 OpenAI 开发的 Whisper 模型。Whisper 在处理多种语言,甚至是同一句话中夹杂不同语言(例如英语和粤语混合)的场景下,表现非常出色。

这个方案的优点是:

  • 免费和开源:你可以在自己的电脑上运行,不需要支付 API 费用。
  • 高准确率:对于发音清晰的音频,转录效果非常好。
  • 自动语言检测:你不需要告诉它这是什么语言,它会自动识别并转录。
  • 支持视频和音频:代码会自动从视频中提取音轨进行处理。
  • 本地运行:保护你的数据隐私。

下面我将为你提供一个完整的、可运行的 Python 代码,并详细解释如何设置环境和使用它。


第一步:环境准备

在运行代码之前,你需要安装一些必要的软件和 Python 库。

  1. 安装 Python

    如果你的电脑还没有 Python,请先从 python.org 下载并安装最新版本的 Python (例如 3.9+)。

  2. 安装 FFmpeg

    Whisper 和处理视频的库需要 ffmpeg 这个强大的音视频处理工具。

    • Windows : 从 FFmpeg 官网 下载,解压后将其 bin 目录的路径添加到系统的环境变量 PATH 中。
    • macOS : 使用 Homebrew 安装:brew install ffmpeg
    • Linux (Ubuntu/Debian) : 使用 apt 安装:sudo apt update && sudo apt install ffmpeg
  3. 安装 Python 库

    打开你的终端(Terminal)或命令提示符(Command Prompt),运行以下命令来安装所有需要的库:

    bash 复制代码
    pip install openai-whisper moviepy torch
    • openai-whisper: 核心的语音转文字库。
    • moviepy: 用于从视频文件中提取音频。
    • torch: Whisper 依赖的深度学习框架。

第二步:Python 代码

将下面的代码保存为一个 Python 文件,例如 transcribe.py

python 复制代码
import os
import whisper
import moviepy.editor as mp
import argparse
import torch

def transcribe_mixed_language_audio(file_path: str, model_size: str = "medium"):
    """
    转录包含英语和粤语混合的音频或视频文件。

    参数:
    file_path (str): 输入的视频或音频文件路径。
    model_size (str): 要使用的 Whisper 模型大小 (例如 "tiny", "base", "small", "medium", "large")。
    """
    # 检查文件是否存在
    if not os.path.exists(file_path):
        print(f"错误:文件 '{file_path}' 不存在。")
        return

    # 检查是否有可用的 GPU
    device = "cuda" if torch.cuda.is_available() else "cpu"
    print(f"将使用 '{device}' 设备进行转录。")

    # --- 1. 如果是视频文件,先提取音频 ---
    is_video = file_path.lower().endswith(('.mp4', '.mov', '.avi', '.mkv'))
    audio_path = file_path
    temp_audio_file = None

    if is_video:
        print(f"检测到视频文件,正在提取音频...")
        try:
            video_clip = mp.VideoFileClip(file_path)
            # 创建一个临时的音频文件名
            base_name = os.path.splitext(os.path.basename(file_path))[0]
            temp_audio_file = f"temp_audio_{base_name}.mp3"
            video_clip.audio.write_audiofile(temp_audio_file)
            audio_path = temp_audio_file
            print(f"音频已成功提取到 '{audio_path}'")
        except Exception as e:
            print(f"提取音频时出错: {e}")
            return

    # --- 2. 加载 Whisper 模型并进行转录 ---
    try:
        print(f"正在加载 Whisper 模型 '{model_size}'... (初次加载可能需要下载模型,请耐心等待)")
        model = whisper.load_model(model_size, device=device)

        print("模型加载完成,开始转录音频... (这可能需要很长时间,取决于文件大小和你的电脑性能)")
        # 转录时指定 language=None,让 Whisper 自动检测语言
        result = model.transcribe(audio_path, language=None, fp16=torch.cuda.is_available())

        transcribed_text = result["text"]
        print("\n--- 转录完成 ---\n")
        print(transcribed_text)

        # --- 3. 将结果保存到文本文件 ---
        output_txt_path = os.path.splitext(file_path)[0] + ".txt"
        with open(output_txt_path, 'w', encoding='utf-8') as f:
            f.write(transcribed_text)
        print(f"\n转录结果已保存到: {output_txt_path}")

    except Exception as e:
        print(f"转录过程中发生错误: {e}")
    finally:
        # --- 4. 清理临时文件 ---
        if temp_audio_file and os.path.exists(temp_audio_file):
            os.remove(temp_audio_file)
            print(f"已删除临时音频文件: {temp_audio_file}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="将英语/粤语混合的视频或音频文件转录为文字。")
    parser.add_argument("file", type=str, help="要转录的视频或音频文件路径。")
    parser.add_argument("--model", type=str, default="medium", 
                        choices=["tiny", "base", "small", "medium", "large", "large-v2", "large-v3"],
                        help="选择要使用的 Whisper 模型大小 (默认为 'medium')。")
    
    args = parser.parse_args()
    transcribe_mixed_language_audio(args.file, args.model)

第三步:如何运行代码

  1. 准备文件 :将你要转录的视频(例如 my_cantonese_video.mp4)或音频(例如 my_cantonese_audio.mp3)文件放在与 transcribe.py 相同的文件夹下,或者记住它的完整路径。

  2. 打开终端/命令提示符 :导航到你保存 transcribe.py 的文件夹。

  3. 执行命令

    • 基本用法(处理视频):

      bash 复制代码
      python transcribe.py my_cantonese_video.mp4
    • 处理音频文件:

      bash 复制代码
      python transcribe.py my_cantonese_audio.mp3
    • 选择不同大小的模型 (例如使用 large-v3 模型以获得更高精度):

      bash 复制代码
      python transcribe.py my_cantonese_video.mp4 --model large-v3

运行过程说明:

  • 程序首先会检查你提供的是视频还是音频。
  • 如果是视频,它会先提取音频,并保存为一个临时的 .mp3 文件。
  • 接着,它会加载 Whisper 模型。第一次运行某个模型时,程序会自动下载模型文件,可能需要几分钟。
  • 然后,它会开始转录,这个过程可能非常耗时,具体时间取决于你的电脑性能(CPU/GPU)和文件时长。
  • 转录完成后,它会在屏幕上打印出结果,并同时将结果保存到一个与原文件同名的 .txt 文件中。
  • 最后,它会自动删除之前创建的临时音频文件。

模型选择和性能建议

Whisper 提供了不同大小的模型,这直接影响到速度和准确率:

模型 (--model) 参数量 速度 准确率 推荐场景
tiny ~39M 最快 一般 快速预览,对准确率要求不高
base ~74M 很快 较好 纯净背景下的标准语音
small ~244M 中等 通用场景,性能和效果的平衡点
medium ~769M 较慢 很好 强烈推荐用于混合语言或有噪音的场景
large-v3 ~1.55B 最慢 最佳 追求最高准确率,且有耐心或有好的硬件
  • 对于英语和粤语混合的场景,建议至少使用 medium 模型 ,因为它在处理多语言和口音方面表现更稳定。如果你的电脑配置很好(特别是拥有 NVIDIA 显卡),使用 large-v3 模型会得到最佳效果。

  • GPU 加速 :如果你有 NVIDIA 显卡并且正确安装了 CUDA,代码会自动使用 GPU 进行计算,速度会比用 CPU 快几十倍。如果没有,它会回退到使用 CPU,速度会慢很多。

  • 补充升级后的 whisper-ctranslate2 your_audio_file.m4a --device cpu --model large-v3

相关推荐
栗子不爱栗子2 小时前
从理解AI到驾驭文字:一位技术爱好者的写作工具探索手记
python·学习·ai
SuperHeroWu75 小时前
【AI大模型入门指南】概念与专有名词详解 (一)
人工智能·ai·大模型·入门·概念
chanalbert12 小时前
AI Agent核心技术深度解析:Function Calling与ReAct对比报告
人工智能·ai·语言模型
不叫猫先生12 小时前
Bright Data网页抓取工具实战:BOSS直聘爬虫 + PandasAI分析洞察前端岗位市场趋势
爬虫·python·ai·代理
仙人掌_lz14 小时前
四大LLM 微调开源工具包深度解析
人工智能·python·ai·开源·llm
咧咧小侠15 小时前
使用 Python 构建并调用 ComfyUI 图像生成 API:完整实战指南
开发语言·python·ai·aigc
滴答滴答嗒嗒滴15 小时前
TensorZero:开源 LLM 应用优化与可观测性平台
人工智能·ai·开源·llm·大语言模型·tensorzero
ExperDot16 小时前
我整理了 10 条 AI 聊天应用的需求
ai·产品设计·产品需求
AI360labs_atyun1 天前
2025 高考:AI 都在哪些地方发挥了作用
人工智能·科技·ai·高考
AlfredZhao1 天前
曾经风光无限的 Oracle DBA 已经落伍了吗?
ai·vector·embedding·onnx·hnsw·ivf