基于Python實(shí)現(xiàn)語(yǔ)音識(shí)別功能
1、簡(jiǎn)介
https://github.com/openai/whisper
1.1 whisper簡(jiǎn)介
Whisper 是一種通用的語(yǔ)音識(shí)別模型。它是在包含各種音頻的大型數(shù)據(jù)集上訓(xùn)練的,也是一個(gè)多任務(wù)模型,可以執(zhí)行多語(yǔ)言語(yǔ)音識(shí)別、語(yǔ)音翻譯和語(yǔ)言識(shí)別。
Open AI在2022年9月21日開(kāi)源了號(hào)稱其英文語(yǔ)音辨識(shí)能力已達(dá)到人類水準(zhǔn)的Whisper神經(jīng)網(wǎng)絡(luò),且它亦支持其它98種語(yǔ)言的自動(dòng)語(yǔ)音辨識(shí)。 Whisper系統(tǒng)所提供的自動(dòng)語(yǔ)音辨識(shí)(Automatic Speech Recognition,ASR)模型是被訓(xùn)練來(lái)運(yùn)行語(yǔ)音辨識(shí)與翻譯任務(wù)的,它們能將各種語(yǔ)言的語(yǔ)音變成文本,也能將這些文本翻譯成英文。
1.2 whisper模型
以下是可用模型的名稱及其相對(duì)于大型模型的近似內(nèi)存要求和推理速度;實(shí)際速度可能因許多因素而異,包括可用的硬件。
Size | Parameters | English-only model | Multilingual model | Required VRAM | Relative speed |
---|---|---|---|---|---|
tiny | 39 M | tiny.en | tiny | ~1 GB | ~32x |
base | 74 M | base.en | base | ~1 GB | ~16x |
small | 244 M | small.en | smal | l ~2 GB | ~6x |
medium | 769 M | medium.en | medium | ~5 GB | ~2x |
large | 1550 M | N/A | large | ~10 GB | 1x |
它自動(dòng)下載的模型緩存,如下:
2、安裝
2.1 whisper
pip install -U openai-whisper # pip install git+https://github.com/openai/whisper.git pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git pip install zhconv pip3 install wheel pip3 install torch torchvision torchaudio # 注:沒(méi)科學(xué)上網(wǎng)會(huì)下載有可能很慢,可以替換成國(guó)內(nèi)鏡像加快下載速度 pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
2.2 pytorch
選擇的是穩(wěn)定版,windows系統(tǒng),pip安裝方式,python語(yǔ)言、cpu版本的軟件。
pip3 install torch torchvision torchaudio
2.3 ffmpeg
https://github.com/BtbN/FFmpeg-Builds/releases
解壓后,找到bin文件夾下的“ffmpeg.exe”,將它復(fù)制到一個(gè)文件夾中,假設(shè)這個(gè)文件夾的路徑是"D:\software\ffmpeg",然后將"D:/software/ffmpeg"添加到系統(tǒng)環(huán)境變量PATH。
3、測(cè)試
3.1 命令測(cè)試
whisper audio.mp3
以上whisper audio.mp3的命令形式是最簡(jiǎn)單的一種,它默認(rèn)使用的是small模式的模型轉(zhuǎn)寫(xiě),我們還可以使用更高等級(jí)的模型來(lái)提高正確率。 比如:
whisper audio.mp3 --model medium whisper japanese.wav --language Japanese whisper chinese.mp4 --language Chinese --task translate whisper audio.flac audio.mp3 audio.wav --model medium whisper output.wav --model medium --language Chinese
同時(shí)默認(rèn)會(huì)生成5個(gè)文件,文件名和你的源文件一樣,但擴(kuò)展名分別是:.json、.srt、.tsv、.txt、.vtt。除了普通文本,也可以直接生成電影字幕,還可以調(diào)json格式做開(kāi)發(fā)處理。
常用參數(shù)如下:
--task: 指定轉(zhuǎn)錄方式,默認(rèn)使用 --task transcribe 轉(zhuǎn)錄模式,--task translate 則為 翻譯模式,目前只支持翻譯成英文。
--model:指定使用模型,默認(rèn)使用 --model small,Whisper 還有 英文專用模型,就是在名稱后加上 .en,這樣速度更快。
--language:指定轉(zhuǎn)錄語(yǔ)言,默認(rèn)會(huì)截取 30 秒來(lái)判斷語(yǔ)種,但最好指定為某種語(yǔ)言,比如指定中文是 --language Chinese。
--device:指定硬件加速,默認(rèn)使用 auto 自動(dòng)選擇,--device cuda 則為顯卡,cpu 就是 CPU, mps 為蘋果 M1 芯片。
--output_format:指定字幕文件的生成格式,txt,vtt,srt,tsv,json,all,指定多個(gè)可以用大括號(hào){}包裹,不設(shè)置默認(rèn)all。
-- output_dir: 指定字幕文件的輸出目錄,不設(shè)置默認(rèn)輸出到當(dāng)前目錄下。
--fp16:默認(rèn)True,使用16位浮點(diǎn)數(shù)進(jìn)行計(jì)算,可以在一定程度上減少計(jì)算和存儲(chǔ)開(kāi)銷,可能存在精度丟失,筆者CPU不支持,會(huì)出現(xiàn)下述警告,指定它為False就不會(huì)出現(xiàn)了,即采用32位浮點(diǎn)數(shù)進(jìn)行計(jì)算。
3.2 代碼測(cè)試:識(shí)別聲音文件
import whisper if __name__ == '__main__': model = whisper.load_model("tiny") result = model.transcribe("audio.mp3", fp16=False, language="Chinese") print(result["text"])
3.3 代碼測(cè)試:實(shí)時(shí)錄音識(shí)別
import whisper import zhconv import wave # 使用wave庫(kù)可讀、寫(xiě)wav類型的音頻文件 import pyaudio # 使用pyaudio庫(kù)可以進(jìn)行錄音,播放,生成wav文件 def record(time): # 錄音程序 # 定義數(shù)據(jù)流塊 CHUNK = 1024 # 音頻幀率(也就是每次讀取的數(shù)據(jù)是多少,默認(rèn)1024) FORMAT = pyaudio.paInt16 # 采樣時(shí)生成wav文件正常格式 CHANNELS = 1 # 音軌數(shù)(每條音軌定義了該條音軌的屬性,如音軌的音色、音色庫(kù)、通道數(shù)、輸入/輸出端口、音量等??梢远鄠€(gè)音軌,不唯一) RATE = 16000 # 采樣率(即每秒采樣多少數(shù)據(jù)) RECORD_SECONDS = time # 錄音時(shí)間 WAVE_OUTPUT_FILENAME = "./output.wav" # 保存音頻路徑 p = pyaudio.PyAudio() # 創(chuàng)建PyAudio對(duì)象 stream = p.open(format=FORMAT, # 采樣生成wav文件的正常格式 channels=CHANNELS, # 音軌數(shù) rate=RATE, # 采樣率 input=True, # Ture代表這是一條輸入流,F(xiàn)alse代表這不是輸入流 frames_per_buffer=CHUNK) # 每個(gè)緩沖多少幀 print("* recording") # 開(kāi)始錄音標(biāo)志 frames = [] # 定義frames為一個(gè)空列表 for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): # 計(jì)算要讀多少次,每秒的采樣率/每次讀多少數(shù)據(jù)*錄音時(shí)間=需要讀多少次 data = stream.read(CHUNK) # 每次讀chunk個(gè)數(shù)據(jù) frames.append(data) # 將讀出的數(shù)據(jù)保存到列表中 print("* done recording") # 結(jié)束錄音標(biāo)志 stream.stop_stream() # 停止輸入流 stream.close() # 關(guān)閉輸入流 p.terminate() # 終止pyaudio wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') # 以'wb‘二進(jìn)制流寫(xiě)的方式打開(kāi)一個(gè)文件 wf.setnchannels(CHANNELS) # 設(shè)置音軌數(shù) wf.setsampwidth(p.get_sample_size(FORMAT)) # 設(shè)置采樣點(diǎn)數(shù)據(jù)的格式,和FOMART保持一致 wf.setframerate(RATE) # 設(shè)置采樣率與RATE要一致 wf.writeframes(b''.join(frames)) # 將聲音數(shù)據(jù)寫(xiě)入文件 wf.close() # 數(shù)據(jù)流保存完,關(guān)閉文件 if __name__ == '__main__': model = whisper.load_model("tiny") record(3) # 定義錄音時(shí)間,單位/s result = model.transcribe("output.wav",language='Chinese',fp16 = True) s = result["text"] s1 = zhconv.convert(s, 'zh-cn') print(s1)
4、工具
4.1 WhisperDesktop
https://github.com/Const-me/Whisper
OpenAI 的 Whisper 自動(dòng)語(yǔ)音識(shí)別 (ASR) 模型的高性能 GPGPU 推理
This project is a Windows port of the whisper.cpp implementation.
Which in turn is a C++ port of OpenAI’s Whisper automatic speech recognition (ASR) model.
下載 WhisperDesktop 后,點(diǎn)擊運(yùn)行,然后加載模型文件,最后選擇文件即可進(jìn)行轉(zhuǎn)錄。由于支持 GPU 硬解,轉(zhuǎn)錄速度非常的快。
4.2 Buzz
https://github.com/chidiwilliams/buzz
Buzz 在您的個(gè)人計(jì)算機(jī)上離線轉(zhuǎn)錄和翻譯音頻。由 OpenAI 的 Whisper 提供支持。
另一款基于 Whisper 的圖形化軟件是 Buzz,相比 WhipserDesktop,Buzz 支持 Windows、macOS、Linux。
安裝如下:
(1)PyPI:
pip install buzz-captions python -m buzz
(2)Windows:
Download and run the file in the releases page…exe‘
Buzz 的安裝包體積稍大,同時(shí) Buzz 使用的是 .pt 后綴名的模型文件,運(yùn)行后軟件會(huì)自動(dòng)下載模型文件。
但最好是提前下好模型文件,然后放在指定的位置。
Mac:~/.cache/whisper Windows:C:\Users\<你的用戶名>\.cache\whisper
但 Buzz 使用的是 CPU 軟解 ,目前還不支持 GPU 硬解 。
4.3 Whisper-WebUI
https://github.com/jhj0517/Whisper-WebUI
基于 Gradio 的 Whisper 瀏覽器界面。你可以把它當(dāng)作一個(gè)簡(jiǎn)單的字幕生成器!
以上就是基于Python實(shí)現(xiàn)語(yǔ)音識(shí)別功能的詳細(xì)內(nèi)容,更多關(guān)于Python語(yǔ)音識(shí)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python實(shí)現(xiàn)語(yǔ)音識(shí)別和語(yǔ)音合成功能
- python之語(yǔ)音識(shí)別speech模塊
- python3實(shí)現(xiàn)語(yǔ)音轉(zhuǎn)文字(語(yǔ)音識(shí)別)和文字轉(zhuǎn)語(yǔ)音(語(yǔ)音合成)
- python語(yǔ)音識(shí)別的轉(zhuǎn)換方法
- 基于Python創(chuàng)建語(yǔ)音識(shí)別控制系統(tǒng)
- 基于Python實(shí)現(xiàn)語(yǔ)音識(shí)別和語(yǔ)音轉(zhuǎn)文字
- python語(yǔ)音識(shí)別whisper的使用
- Linux下利用python實(shí)現(xiàn)語(yǔ)音識(shí)別詳細(xì)教程
- Python實(shí)現(xiàn)語(yǔ)音識(shí)別vosk的示例代碼
相關(guān)文章
Python之tkinter文字區(qū)域Text使用及說(shuō)明
這篇文章主要介紹了Python之tkinter文字區(qū)域Text使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05關(guān)于Python自動(dòng)化操作Excel
這篇文章主要介紹了關(guān)于Python自動(dòng)化操作Excel, Python 是一種功能強(qiáng)大的編程語(yǔ)言,可以用于許多任務(wù),包括處理 Excel 文件,需要的朋友可以參考下2023-04-04Django 簡(jiǎn)單實(shí)現(xiàn)分頁(yè)與搜索功能的示例代碼
這篇文章主要介紹了Django 簡(jiǎn)單實(shí)現(xiàn)分頁(yè)與搜索功能的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11python實(shí)現(xiàn)添加圖片到word文檔中
這篇文章主要介紹了python實(shí)現(xiàn)添加圖片到word文檔中方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09python中while和for的區(qū)別總結(jié)
在本篇內(nèi)容里小編給大家分享的是關(guān)于python中while和for的區(qū)別以及相關(guān)知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)下。2019-06-06Python增強(qiáng)賦值和共享引用注意事項(xiàng)小結(jié)
這篇文章主要給大家介紹了關(guān)于Python增強(qiáng)賦值和共享引用注意事項(xiàng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05