api-stt / app.py
tudeplom's picture
Update app.py
7e5c40c verified
raw
history blame
2.3 kB
import os
import json
import numpy as np
from vosk import Model, KaldiRecognizer
from flask import Flask, request, jsonify
from flask_restx import Api, Resource
# Cấu hình Flask
app = Flask(__name__)
# Tạo đối tượng API với Swagger documentation
api = Api(app, version='1.0', title='Vosk STT API', description='API cho nhận diện giọng nói sử dụng Vosk')
# Kiểm tra và load model Vosk
MODEL_PATH = "model/vosk-model" # Thay thế bằng đường dẫn đến mô hình Vosk của bạn
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)
# API nhận dữ liệu âm thanh và trả kết quả nhận diện giọng nói
@api.route('/stt')
class SpeechToText(Resource):
def post(self):
"""
Nhận dữ liệu âm thanh và trả về kết quả nhận diện giọng nói.
"""
# Kiểm tra xem có tệp âm thanh không
if 'file' not in request.files:
return jsonify({"error": "Không có tệp âm thanh trong yêu cầu."}), 400
audio_file = request.files['file']
# Đọc dữ liệu âm thanh từ tệp
audio_data = audio_file.read()
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 (16-bit mono)
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}")
return jsonify({"text": text}) # Gửi kết quả nhận diện về client
else:
# Nếu không có kết quả nhận diện hoặc dữ liệu chưa đủ để nhận diện
return jsonify({"text": ""}) # Trả về chuỗi rỗng nếu không có kết quả
# Chạy Flask server
if __name__ == "__main__":
print("🚀 API Flask đang chạy tại http://localhost:5000")
app.run(host="0.0.0.0", port=5000, debug=True)