37 lines
1.0 KiB
Python
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=8000) |