大家好,我是風箏
#兩年前,將音訊視訊檔案轉換為文字內容的需求難以實現,但如今只需幾分鐘便可輕鬆解決。
據說一些公司為了獲取訓練數據,已經對抖音、快手等短視頻平台上的視頻進行了全面爬取,然後將視頻中的音頻提取出來轉換成文本形式,用作大數據模型的訓練語料。
如果您需要將視訊或音訊檔案轉換為文字,可以嘗試今天提供的這個開源解決方案。例如,可以搜尋影視節目的對話出現的具體時間點。
話不多說,進入正題。
這個方案就是OpenAI 開源的Whisper,當然是用Python 寫的了,只需要簡單安裝幾個包,然後幾行程式碼一寫,稍等片刻(根據你的機器性能和音視頻長度不一),最終的文字內容就出來了,就是這麼簡單。
GitHub 倉庫位址:https://github.com/openai/whisper
儘管已經相當簡化,但對於程序員而言仍不夠精簡。畢竟,程式設計師往往偏愛簡潔有效率。雖然安裝和呼叫Whisper已經相對容易,但仍需要單獨安裝PyTorch、ffmpeg,甚至Rust。
因此,Fast-Whisper應運而生,它比Whisper更快、更簡潔。 Fast-Whisper並非只是對Whisper進行簡單封裝,而是透過採用CTranslate2重新建構了OpenAI的Whisper模型。 CTranslate2是Transformer模型的高效推理引擎。
總結一下,也就是比 Whisper 更快,官方的說法是比 Whisper 快了 4-8 倍。不僅能支援 GPU ,還能支援 CPU,連我這台破 Mac 也能用。
GitHub 倉庫位址:https://github.com/SYSTRAN/faster-whisper
使用起來就兩步驟。
pip install faster-whisper
from faster_whisper import WhisperModelmodel_size = "large-v3"# Run on GPU with FP16model = WhisperModel(model_size, device="cuda", compute_type="float16")# or run on GPU with INT8# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")# or run on CPU with INT8# model = WhisperModel(model_size, device="cpu", compute_type="int8")segments, info = model.transcribe("audio.mp3", beam_size=5)print("Detected language '%s' with probability %f" % (info.language, info.language_probability))for segment in segments:print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
客戶端用 Swift ,只支援 Mac 端。
選則一個影片;from flask import Flask, request, jsonifyfrom faster_whisper import WhisperModelapp = Flask(__name__)model_size = "large-v2"model = WhisperModel(model_size, device="cpu", compute_type="int8")@app.route('/transcribe', methods=['POST'])def transcribe():# Get the file path from the requestfile_path = request.json.get('filePath')# Transcribe the filesegments, info = model.transcribe(file_path, beam_size=5, initial_prompt="简体")segments_copy = []with open('segments.txt', 'w') as file:for segment in segments:line = "%.2fs|%.2fs|[%.2fs -> %.2fs]|%s" % (segment.start, segment.end, segment.start, segment.end, segment.text)segments_copy.append(line)file.write(line + '\n')# Prepare the responseresponse_data = {"language": info.language,"language_probability": info.language_probability,"segments": []}for segment in segments_copy:response_data["segments"].append(segment)return jsonify(response_data)if __name__ == '__main__':app.run(debug=False)
以上是真快!幾分鐘就把視訊語音辨識為文字了,不到10行程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!