api-stt / app.py
tudeplom's picture
Update app.py
ceda7cb verified
raw
history blame
1.56 kB
import os
import wave
import json
import asyncio
import websockets
import uuid
from vosk import Model, KaldiRecognizer
# Thư mục chứa model
MODEL_PATH = "model/vosk-model"
# Kiểm tra model đã tải chưa
if not os.path.exists(MODEL_PATH):
raise Exception(f"\u274C Model Vosk không tìm thấy tại {MODEL_PATH}! Kiểm tra lại.")
# Load model
print("\u2705 Đang tải model Vosk...")
model = Model(MODEL_PATH)
async def recognize_audio(websocket, path):
print("🔵 Kết nối WebSocket mới...")
rec = KaldiRecognizer(model, 16000)
result_text = ""
try:
async for message in websocket:
if isinstance(message, bytes): # Kiểm tra nếu dữ liệu là bytes
if rec.AcceptWaveform(message):
result = json.loads(rec.Result())
text = result.get("text", "")
result_text += text + " "
await websocket.send(json.dumps({"text": text}))
else:
await websocket.send(json.dumps({"error": "Dữ liệu không hợp lệ"}))
except websockets.exceptions.ConnectionClosed:
print("🔴 Kết nối WebSocket đã đóng")
finally:
print(f"✅ Văn bản cuối cùng: {result_text.strip()}")
# Chạy server WebSocket
start_server = websockets.serve(recognize_audio, "0.0.0.0", 7860)
print("🚀 WebSocket STT server đang chạy trên ws://0.0.0.0:7860")
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()