File size: 1,735 Bytes
23590ba
 
cac01fd
6432060
fe652f1
23590ba
3b61113
23590ba
3b61113
981b713
 
6432060
981b713
6432060
981b713
 
3b61113
6432060
 
fe652f1
 
 
 
 
 
 
 
 
cac01fd
6432060
 
ceda7cb
 
6432060
cac01fd
 
ceda7cb
6432060
fe652f1
cac01fd
 
fe652f1
 
 
 
cac01fd
 
3b61113
cac01fd
 
4943521
ceda7cb
 
9225a67
cac01fd
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
47
48
49
50
51
52
53
54
55
56
import os
import json
import asyncio
from fastapi import FastAPI, WebSocket
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("❌ Model Vosk không tìm thấy!")

print("✅ Đ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")  # Phải là "/ws" (không phải "/")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    rec = KaldiRecognizer(model, 16000)
    result_text = ""

    print("🔵 Client đã kết nối WebSocket!")

    try:
        while True:
            message = await websocket.receive_bytes()  # Nhận bytes từ WebSocket
            print(f"📩 Nhận dữ liệu ({len(message)} bytes)")

            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ả về client
                print(f"📤 Gửi kết quả: {text}")
    except Exception as e:
        print(f"🔴 Lỗi WebSocket: {e}")
        await websocket.close(code=1011, reason="Lỗi xử lý dữ liệu")
    finally:
        print(f"✅ Văn bản cuối cùng: {result_text.strip()}")

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=7860)