使用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),运行以下命令来安装所有需要的库:

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

第二步:Python 代码

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

import os
import whisper
import moviepy.editor as mp
import argparse
import torchdef 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# 检查是否有可用的 GPUdevice = "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_pathtemp_audio_file = Noneif 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_fileprint(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. 执行命令

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

      python transcribe.py my_cantonese_video.mp4
      
    • 处理音频文件:

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

      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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

案例分享--汽车制动卡钳DIC测量

制动系统是汽车的主要组成部分,是汽车的主要安全部件之一。随着车辆性能的不断提高,车速不断提升,对车辆的制动系统也随之提出了更高要求,因此了解车辆制动系统中每个部件的动态行为成为了制动系统优化的主要途径,同时…

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …

SQL SERVER 数据库迁移的三种方法!

要将SQL Server从研发环境的把数据库结构(不含数据)迁移至生产环境,可通过以下几种方法实现。以下是具体操作步骤及适用场景: ⚙️ 一、使用SSMS图形界面生成结构脚本(推荐新手) 通过SQL Server Management Studio的生成脚本向导,仅导出数据库架构: ​​连接测试库​​…

C# 快速检测 PDF 是否加密,并验证正确密码

引言:为什么需要检测PDF加密状态? 在批量文档处理系统(如 OCR 文字识别、内容提取、格式转换)中,加密 PDF 无法直接操作。检测加密状态可提前筛选文件,避免流程因密码验证失败而中断。 本文使用 Free Spire…

(33)课54:3 张表的 join-on 连接举例,多表查询总结。数据库编程补述及游标综合例题。静态 sqL与动态sqL(可带参数)

(112)3 张表的 join-on 连接举例 : (113) 多表查询总结 : (114)数据库编程补述 : 综合例题 : 以上没有动手练习,不知道这样的语法是否…

再见 Navicat!一款开源的 Web 数据库管理工具!

大家好,我是 Java陈序员。 在日常的开发工作中,常常需要与各种数据库打交道。而为了提高工作效率,常常会使用一些可视化工具进行操作数据库。 今天,给大家介绍一款开源的数据库管理工具,无需下载安装软件&#xff0c…

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…

函数中的Callable

在编程中,​Callable(可调用对象)​​ 是指任何可以通过 () 操作符调用的对象。在函数和类设计的上下文中,Callable 通常指代可以被调用的实体,例如函数、方法、Lambda表达式或实现了 __call__ 方法的对象。以下是详细…

MySQL学习之触发器

文章目录 前言什么是触发器(Trigger)?触发器的特点 MySQL中触发器的用法创建NEW 与 OLD举例其他操作 注意事项后续内容参考目录 前言 阅读本文前请注意最后编辑时间,文章内容可能与目前最新的技术发展情况相去甚远。欢迎各位评论…

AIGC 基础篇 Python基础 04 for循环与while循环

今天,我们来讲Python里面的循环部分 1.for循环 for i in range(1,10,2):print(i) 这是一个简单但是完整的for循环,里面包含了for循环的所有结构 首先注意格式是“for 变量 in range(取得到的起始值,取不到的终点值,步长)” …

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…

每日算法 -【Swift 算法】三数之和最接近目标值

🚀 Swift 实现:三数之和最接近目标值(3Sum Closest) ✨ 前言 在算法学习过程中,经典的“三数之和”系列题目是很多人通往进阶路上的一道坎。今天我们来介绍其中一个非常实用的变种问题 —— 三数之和最接近目标值(3Sum Closest),并使用 Swift 实现一个高效的解法。 …

python打卡day50@浙大疏锦行

知识点回顾: resnet结构解析CBAM放置位置的思考针对预训练模型的训练策略 差异化学习率三阶段微调 ps:今日的代码训练时长较长,3080ti大概需要40min的训练时长 作业: 好好理解下resnet18的模型结构尝试对vgg16cbam进行微调策略 R…

虚幻引擎5-Unreal Engine笔记之SET节点的输出引脚获取设置后的最新变量值

虚幻引擎5-Unreal Engine笔记之SET节点的输出引脚获取设置后的最新变量值 code review! 一个变量的“SET”节点 retrieve 是动词,意思是“检索、获取、取回”。 retrieves 只是当主语是第三人称单数(比如 he、she、it 或单个人/物)时使用的…

编译原理实验 之 TINY 解释测试目标代码

文章目录 实验任务1任务2 本次的实验是在前三次TINYC的基础上的一个测试,所以完成前三次的实验是基础 编译原理 之 实验一 编译原理实验 之 Tiny C语言编译程序实验 语法分析 编译原理实验 之 TINY 之 语义分析(第二次作业 首先将新的文件复制到先前的…

CanFestival移植到STM32G4

文章目录 一、准备工作二、软件配置三、移植CanFestival参考 一、准备工作 1、获取Canfestival源码 2、Python下载 3、wxPython下载 4、CanFestival字典生成 5、安装参考 Python2.7.15及wxPython2.8百度云盘下载地址:https://pan.baidu.com/s/1bRS403m4B31m4ovSJ-_…

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…

第十三章 RTC 实时时钟

第十三章 RTC 实时时钟 目录 第十三章 RTC 实时时钟 1 RTC简介 1.1 主要特性 2 功能描述 2.1 概述 2.2 复位过程 2.3 读RTC寄存器 2.4 配置RTC寄存器 2.5 RTC标志的设置 3 RTC寄存器描述 3.1 RTC控制寄存器高位(RTC_CRH) 3.2 RTC控制寄存器低位(RTC_CRL) 3.3 RTC预…