import os import json import numpy as np from vosk import Model, KaldiRecognizer from flask import Flask from flask_socketio import SocketIO, emit # Cấu hình Flask & WebSocket app = Flask(__name__) socketio = SocketIO(app, cors_allowed_origins="*") # Kiểm tra và load model Vosk 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 bộ nhận diện giọng nói rec = KaldiRecognizer(model, 16000) # Xử lý dữ liệu âm thanh nhận từ client @socketio.on("audio_chunk") def handle_audio(audio_data): print(f"📩 Nhận dữ liệu âm thanh: {len(audio_data)} bytes") # Chuyển đổi dữ liệu âm thanh thành numpy array audio_np = np.frombuffer(audio_data, dtype=np.int16) # Nhận diện giọng nói if rec.AcceptWaveform(audio_np.tobytes()): result = json.loads(rec.Result()) text = result.get("text", "") print(f"📤 Kết quả nhận diện: {text}") emit("stt_result", {"text": text}) # Gửi kết quả về client theo thời gian thực # Chạy Flask server if __name__ == "__main__": socketio.run(app, host="0.0.0.0", port=5000, debug=True, allow_unsafe_werkzeug=True)