File size: 2,302 Bytes
23590ba 17fd256 7bcff4e 7e5c40c 17fd256 7bcff4e 17fd256 23590ba b0d49d5 17fd256 b0d49d5 981b713 62ca4e5 981b713 17fd256 7bcff4e b0d49d5 fe652f1 b0d49d5 ceda7cb 8154745 9225a67 b0d49d5 8154745 |
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 57 58 |
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)
|