File size: 1,555 Bytes
23590ba ceda7cb 4943521 23590ba 981b713 4943521 981b713 4943521 981b713 ceda7cb 4943521 ceda7cb 4943521 ceda7cb 23590ba ceda7cb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
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()
|