File size: 2,454 Bytes
6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 e041db4 6b42290 |
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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
from flask import Flask, request, jsonify
import whisper
import os
app = Flask(__name__)
# Load the Whisper model
print("Loading Whisper model...")
model = whisper.load_model("tiny")
print("Whisper model loaded.")
def transcribe(audio_path):
print(f"Transcribing audio from: {audio_path}")
# Load audio and pad/trim it to fit 30 seconds
print("Loading and processing audio...")
audio = whisper.load_audio(audio_path)
audio = whisper.pad_or_trim(audio)
# Make log-Mel spectrogram and move to the same device as the model
print("Creating log-Mel spectrogram...")
mel = whisper.log_mel_spectrogram(audio).to(model.device)
# Detect the spoken language
print("Detecting language...")
_, probs = model.detect_language(mel)
language = max(probs, key=probs.get)
print(f"Detected language: {language}")
# Decode the audio
print("Decoding audio...")
options = whisper.DecodingOptions(fp16=False)
result = whisper.decode(model, mel, options)
print("Transcription complete.")
return result.text, language
@app.route('/transcribe', methods=['POST'])
def transcribe_audio():
print("Received request at /transcribe")
if 'audio' not in request.files:
print("Error: No audio file provided")
return jsonify({"error": "No audio file provided"}), 400
audio_file = request.files['audio']
# Save the uploaded audio file
audio_path = os.path.join("temp_audio", audio_file.filename)
os.makedirs("temp_audio", exist_ok=True)
audio_file.save(audio_path)
print(f"Audio file saved to: {audio_path}")
# Transcribe the audio
try:
transcription, language = transcribe(audio_path)
except Exception as e:
print(f"Error during transcription: {str(e)}")
return jsonify({"error": f"An error occurred: {str(e)}"}), 500
# Clean up the saved file
os.remove(audio_path)
print(f"Audio file removed from: {audio_path}")
# Return the transcription and detected language
print(f"Transcription: {transcription}, Language: {language}")
return jsonify({"transcription": transcription, "language": language}), 200
@app.route('/healthcheck', methods=['GET'])
def healthcheck():
print("Received request at /healthcheck")
return jsonify({"status": "API is running"}), 200
if __name__ == '__main__':
print("Starting Flask app...")
app.run(host="0.0.0.0", port=5000)
|