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()