最近好久沒有寫部落格了,淺淺記錄下如何將OpenAI-Whisper
做成Web服務
吧🤣
介紹
在這篇指導性部落格中,我們將探討如何在Python
中結合使用FastAPI
和OpenAI-Whisper
。OpenAI-Whisper
是一個前沿的語音識別模型,而FastAPI
是一個高效能的現代Web框架
,專門用於構建API
。這兩種技術的結合,能夠幫助我們快速搭建一個高效的語音轉錄服務。
環境安裝
如想本地安裝可參考官網教程。如想將其做成web服務,我們需要準備好開發環境。請按照以下步驟安裝所需環境:
-
Python 3.10.10:前往Python官網下載並安裝。Windows使用者請確保在安裝過程中勾選“Add Python to PATH”,不然需自己配置環境變數。
-
Poetry:Poetry是一個Python的依賴管理和包管理工具。安裝指令如下,具體可以檢視Poetry安裝指南:
# Linux、macOS、Windows(WSL) curl -sSL https://install.python-poetry.org | python3 - # Windows(Powershell) (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py - # 或者 pip install poetry
-
Pycharm:Pycharm是最強大的Python編輯器,可以從JetBrains官網下載並安裝。
專案建立
Pycharm建立專案(推薦方式)
-
開啟
Pycharm
,選擇建立新專案。 -
在彈出的視窗中選擇安裝路徑,並設定專案相關配置。
-
點選建立以初始化新專案。
)
使用命令列建立專案
-
1. 使用Poetry建立專案:我們可以直接使用Poetry建立專案:
poetry new demo-py
-
2. 進入專案目錄:進入專案目錄準備後續操作:
cd demo-py
安裝依賴
使用Poetry
安裝FastAPI、Uvicorn(ASGI伺服器)和OpenAI-Whisper:
poetry add fastapi uvicorn whisper
Poetry依賴配置如下(可直接複製使用,不用手動add依賴):
[tool.poetry.dependencies]
python = "^3.10"
fastapi = "^0.111.1"
uvicorn = "^0.30.1"
openai-whisper = { git = "https://github.com/openai/whisper.git", rev = "v20231117" }
setuptools-rust = "^1.9.0"
numpy = "^1.26.4"
建立FastAPI應用
在專案目錄中建立一個新的Python檔案,例如main.py,並新增以下程式碼:
from fastapi import FastAPI, File, UploadFile, HTTPException
from fastapi.responses import JSONResponse
from tempfile import NamedTemporaryFile, TemporaryDirectory
import whisper
import torch
import os
from typing import List
# 檢查是否有NVIDIA GPU可用
torch.cuda.is_available()
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
# 載入Whisper模型
model = whisper.load_model("base", device=DEVICE)
app = FastAPI()
@app.post("/whisper/")
async def handler(files: List[UploadFile] = File(...)):
if not files:
raise HTTPException(status_code=400, detail="No files were provided")
# 對於每個檔案,儲存結果在一個字典列表中
results = []
# 使用TemporaryDirectory建立臨時目錄
with TemporaryDirectory() as temp_dir:
for file in files:
# 在臨時目錄中建立一個臨時檔案
temp_file_path = os.path.join(temp_dir, file.filename)
with open(temp_file_path, "wb") as temp_file:
# 將使用者上傳的檔案寫入臨時檔案
temp_file.write(file.file.read())
temp_file.flush() # 確保所有資料寫入磁碟
# 確保檔案在轉錄前已關閉
result = model.transcribe(temp_file_path)
# 儲存該檔案的結果物件
results.append({
'filename': file.filename,
'transcript': result['text'],
})
# 返回包含結果的JSON響應
return JSONResponse(content={'results': results})
執行FastAPI應用
使用Uvicorn
執行FastAPI應用:
poetry run uvicorn main:app --reload
在瀏覽器中開啟http://127.0.0.1:8000/docs
,你將看到自動生成的API文件,可以在這裡測試上傳音訊檔案並獲取轉錄結果。
點選“Try it out”上傳音影片檔案後點選“Execute”執行請求。
至此,我們已經成功整合了Whisper並將其作為服務提供。大家可以自行研究和擴充套件這個專案。
總結
透過這篇部落格,我們學習瞭如何在Python中使用FastAPI整合OpenAI-Whisper,並建立了一個簡單的語音轉錄服務。
如這篇部落格對你有所幫助可以貢獻一顆您的小⭐⭐! 專案倉庫地址ai-whisper