| from flask import Flask, request, jsonify |
| from flask_cors import CORS |
| from faster_whisper import WhisperModel |
| import tempfile |
| import os |
|
|
| app = Flask(__name__) |
| CORS(app) |
|
|
| |
| model_size = "tiny" |
| device = "cpu" |
| compute_type = "int8" |
| model = WhisperModel(model_size, device=device, compute_type=compute_type) |
|
|
| @app.route('/transcribe', methods=['POST']) |
| def transcribe(): |
| if 'audio' not in request.files: |
| return jsonify({'error': 'No audio file'}), 400 |
| |
| file = request.files['audio'] |
| |
| |
| temp = tempfile.NamedTemporaryFile(delete=False, suffix='.wav') |
| file.save(temp.name) |
| temp.close() |
| |
| try: |
| |
| segments, _ = model.transcribe(temp.name, beam_size=5) |
| text = "".join([segment.text for segment in segments]) |
| return jsonify({'text': text}) |
| except Exception as e: |
| return jsonify({'error': str(e)}), 500 |
| finally: |
| os.unlink(temp.name) |
|
|
| @app.route('/health', methods=['GET']) |
| def health(): |
| return jsonify({'status': 'ok'}) |
|
|
| if __name__ == '__main__': |
| app.run(host='0.0.0.0', port=7860) |