speech-analysis / app /utils /get_scores.py
jaykishan-b's picture
init
79b7942
raw
history blame
1.25 kB
import csv
import os
from concurrent.futures import ThreadPoolExecutor
from loguru import logger
from app.utils.common import convert_mp3_to_wav, get_doc, transcribe_audio
from app.utils.comprehension import evaluate_comprehension
from app.utils.grammar import evaluate_grammar
from app.utils.intonation import evaluate_intonation
def get_content_score(audio_file):
if audio_file.endswith("mp3"):
wav_file = convert_mp3_to_wav(audio_file)
else:
wav_file = audio_file
# Step 2: Transcribe the WAV to text
transcript = transcribe_audio(wav_file)
doc = get_doc(transcript)
with ThreadPoolExecutor() as executor:
futures = [
executor.submit(evaluate_intonation, wav_file),
executor.submit(evaluate_grammar, transcript, doc),
executor.submit(evaluate_comprehension, transcript, doc),
]
return {
"intonation_score": round((float(futures[0].result().get("intonation_score")) * 10), 2),
"grammar_score": round((float(futures[1].result().get("grammar_score")) * 10), 2),
"grammar_errors": futures[1].result().get("errors"),
"comprehension_score": round((float(futures[2].result().get("comprehension_score")) * 10), 2),
}