api-stt / app.py
tudeplom's picture
Update app.py
29951cd verified
raw
history blame
1.77 kB
import os
import json
import asyncio
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.middleware.cors import CORSMiddleware
from vosk import Model, KaldiRecognizer
import uvicorn
# Kiểm tra model
MODEL_PATH = "model/vosk-model"
if not os.path.exists(MODEL_PATH):
raise Exception("\u274c Model Vosk không tìm thấy!")
print("\u2705 Đang tải model Vosk...")
model = Model(MODEL_PATH)
# Tạo app FastAPI
app = FastAPI()
# Cấu hình CORS để hỗ trợ WebSocket
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Cho phép tất cả nguồn
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.websocket("/ws") # Đường dẫn WebSocket
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
rec = KaldiRecognizer(model, 16000)
result_text = ""
print("\U0001F535 Client đã kết nối WebSocket!")
try:
while True:
message = await websocket.receive_bytes() # Nhận dữ liệu
if rec.AcceptWaveform(message):
result = json.loads(rec.Result())
text = result.get("text", "")
result_text += text + " "
await websocket.send_json({"text": text}) # Gửi kết quả
print(f"\U0001F4E4 Gửi kết quả: {text}")
except WebSocketDisconnect:
print("\U0001F534 Client đã ngắt kết nối!")
except Exception as e:
print(f"\u274c Lỗi WebSocket: {e}")
await websocket.close(code=1011, reason="Lỗi xử lý dữ liệu")
finally:
print(f"\u2705 Văn bản cuối cùng: {result_text.strip()}")
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860)