Update app.py
Browse files
app.py
CHANGED
|
@@ -42,7 +42,7 @@ try:
|
|
| 42 |
import tempfile
|
| 43 |
import torchaudio
|
| 44 |
import soundfile as sf
|
| 45 |
-
from flask import Flask, request, jsonify, send_file
|
| 46 |
from flask_cors import CORS
|
| 47 |
from transformers import Wav2Vec2ForCTC, AutoProcessor, VitsModel, AutoTokenizer
|
| 48 |
from transformers import MarianMTModel, MarianTokenizer
|
|
@@ -533,21 +533,27 @@ def evaluate_pronunciation():
|
|
| 533 |
return jsonify({"error": "No audio file uploaded"}), 400
|
| 534 |
|
| 535 |
audio_file = request.files["audio"]
|
| 536 |
-
|
| 537 |
-
language = request.form.get("language", "
|
| 538 |
|
| 539 |
-
#
|
| 540 |
-
|
| 541 |
-
"
|
| 542 |
-
"
|
| 543 |
-
|
| 544 |
-
|
| 545 |
-
|
| 546 |
-
|
| 547 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 548 |
|
| 549 |
lang_code = LANGUAGE_CODES.get(language, language)
|
| 550 |
-
logger.info(f"🔄 Evaluating pronunciation
|
| 551 |
|
| 552 |
# Save the uploaded file temporarily
|
| 553 |
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
|
|
@@ -571,19 +577,6 @@ def evaluate_pronunciation():
|
|
| 571 |
logger.error(f"❌ Audio processing failed: {str(e)}")
|
| 572 |
return jsonify({"error": f"Audio processing failed: {str(e)}"}), 500
|
| 573 |
|
| 574 |
-
# Find reference audio files
|
| 575 |
-
reference_dir = os.path.join(REFERENCE_AUDIO_DIR, reference_word)
|
| 576 |
-
if not os.path.exists(reference_dir):
|
| 577 |
-
logger.warning(f"⚠️ Reference directory not found: {reference_dir}")
|
| 578 |
-
return jsonify({"error": f"Reference audio for {reference_word} not found"}), 404
|
| 579 |
-
|
| 580 |
-
reference_files = glob.glob(os.path.join(reference_dir, "*.wav"))
|
| 581 |
-
if not reference_files:
|
| 582 |
-
logger.warning(f"⚠️ No reference audio files found in {reference_dir}")
|
| 583 |
-
return jsonify({"error": f"No reference audio found for {reference_word}"}), 404
|
| 584 |
-
|
| 585 |
-
logger.info(f"📊 Found {len(reference_files)} reference files for '{reference_word}'")
|
| 586 |
-
|
| 587 |
# Transcribe user audio
|
| 588 |
try:
|
| 589 |
# Process audio for ASR
|
|
@@ -663,7 +656,7 @@ def evaluate_pronunciation():
|
|
| 663 |
"score": best_score,
|
| 664 |
"feedback": feedback,
|
| 665 |
"transcription": user_transcription,
|
| 666 |
-
"
|
| 667 |
"details": results
|
| 668 |
})
|
| 669 |
|
|
|
|
| 42 |
import tempfile
|
| 43 |
import torchaudio
|
| 44 |
import soundfile as sf
|
| 45 |
+
from flask import Flask, request, jsonify, send_file, g
|
| 46 |
from flask_cors import CORS
|
| 47 |
from transformers import Wav2Vec2ForCTC, AutoProcessor, VitsModel, AutoTokenizer
|
| 48 |
from transformers import MarianMTModel, MarianTokenizer
|
|
|
|
| 533 |
return jsonify({"error": "No audio file uploaded"}), 400
|
| 534 |
|
| 535 |
audio_file = request.files["audio"]
|
| 536 |
+
reference_locator = request.form.get("reference_locator", "").strip()
|
| 537 |
+
language = request.form.get("language", "kapampangan").lower()
|
| 538 |
|
| 539 |
+
# Validate reference locator
|
| 540 |
+
if not reference_locator:
|
| 541 |
+
logger.warning("⚠️ No reference locator provided")
|
| 542 |
+
return jsonify({"error": "Reference locator is required"}), 400
|
| 543 |
+
|
| 544 |
+
# Construct full reference directory path
|
| 545 |
+
reference_dir = os.path.join(REFERENCE_AUDIO_DIR, reference_locator)
|
| 546 |
+
if not os.path.exists(reference_dir):
|
| 547 |
+
logger.warning(f"⚠️ Reference directory not found: {reference_dir}")
|
| 548 |
+
return jsonify({"error": f"Reference audio directory not found: {reference_locator}"}), 404
|
| 549 |
+
|
| 550 |
+
reference_files = glob.glob(os.path.join(reference_dir, "*.wav"))
|
| 551 |
+
if not reference_files:
|
| 552 |
+
logger.warning(f"⚠️ No reference audio files found in {reference_dir}")
|
| 553 |
+
return jsonify({"error": f"No reference audio found for {reference_locator}"}), 404
|
| 554 |
|
| 555 |
lang_code = LANGUAGE_CODES.get(language, language)
|
| 556 |
+
logger.info(f"🔄 Evaluating pronunciation for reference: {reference_locator}")
|
| 557 |
|
| 558 |
# Save the uploaded file temporarily
|
| 559 |
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
|
|
|
|
| 577 |
logger.error(f"❌ Audio processing failed: {str(e)}")
|
| 578 |
return jsonify({"error": f"Audio processing failed: {str(e)}"}), 500
|
| 579 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 580 |
# Transcribe user audio
|
| 581 |
try:
|
| 582 |
# Process audio for ASR
|
|
|
|
| 656 |
"score": best_score,
|
| 657 |
"feedback": feedback,
|
| 658 |
"transcription": user_transcription,
|
| 659 |
+
"reference_locator": reference_locator,
|
| 660 |
"details": results
|
| 661 |
})
|
| 662 |
|