使用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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84327.shtml
英文地址,請注明出處:http://en.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預…