stt-vosk-api/app.py

37 lines
1.0 KiB
Python

import eventlet
eventlet.monkey_patch()
from flask import Flask, send_from_directory
from flask_socketio import SocketIO
from vosk import Model, KaldiRecognizer
import json
import os
from dotenv import load_dotenv
load_dotenv()
app = Flask(__name__, static_folder='static')
socketio = SocketIO(app, cors_allowed_origins="*", async_mode='eventlet')
# Load the model
model = Model("model")
@app.route('/')
def serve_index():
return send_from_directory('static', 'index.html')
@socketio.on('audio_stream')
def handle_audio_stream(audio_data):
recognizer = KaldiRecognizer(model, 16000)
recognizer.SetWords(True)
if recognizer.AcceptWaveform(audio_data):
result = json.loads(recognizer.Result())
socketio.emit('transcription', result.get('text', ''))
else:
partial = json.loads(recognizer.PartialResult())
socketio.emit('partial_transcription', partial.get('partial', ''))
if __name__ == '__main__':
os.makedirs('static', exist_ok=True)
socketio.run(app, host='0.0.0.0', port=5000)