Spaces:
Sleeping
Sleeping
# app.py | |
import gradio as gr | |
import speech_recognition as sr | |
from Levenshtein import ratio | |
import tempfile | |
import numpy as np | |
import soundfile as sf | |
def transcribe_audio(file_info): | |
r = sr.Recognizer() | |
with tempfile.NamedTemporaryFile(delete=True, suffix=".wav") as tmpfile: | |
sf.write(tmpfile.name, data=file_info, samplerate=44100, format='WAV') | |
tmpfile.seek(0) | |
with sr.AudioFile(tmpfile.name) as source: | |
audio_data = r.record(source) | |
try: | |
text = r.recognize_google(audio_data) | |
return text | |
except sr.UnknownValueError: | |
return "Could not understand audio" | |
except sr.RequestError as e: | |
return f"Could not request results; {e}" | |
def pronunciation_correction(expected_text, file_info): | |
user_spoken_text = transcribe_audio(file_info) | |
similarity = ratio(expected_text.lower(), user_spoken_text.lower()) | |
description = f"{similarity:.2f}" | |
if similarity >= 0.9: | |
feedback = "Excellent pronunciation!" | |
elif similarity >= 0.7: | |
feedback = "Good pronunciation!" | |
elif similarity >= 0.5: | |
feedback = "Needs improvement." | |
else: | |
feedback = "Poor pronunciation, try to focus more on clarity." | |
return feedback, description | |
def grammar_check(sentence): | |
# Example implementation of a grammar checker function | |
# Ideally, you would use a grammar checking API or tool | |
# This is a placeholder to show the structure | |
if not sentence.endswith("."): | |
return "Sentence should end with a period." | |
if len(sentence.split()) < 3: | |
return "Sentence is too short. Please provide more details." | |
return "No grammar issues found." | |
with gr.Blocks() as app: | |
with gr.Column(): | |
text_input = gr.Textbox(label="Type your sentence here", lines=5, placeholder="Type here...") | |
grammar_check_button = gr.Button("Check Grammar") | |
grammar_feedback = gr.Textbox(label="Grammar Feedback", interactive=False) | |
audio_input = gr.Audio(label="Upload Audio File", type="numpy") | |
check_pronunciation_button = gr.Button("Check Pronunciation") | |
pronunciation_feedback = gr.Textbox(label="Pronunciation Feedback") | |
pronunciation_score = gr.Number(label="Pronunciation Accuracy Score: 0 (No Match) ~ 1 (Perfect)") | |
grammar_check_button.click( | |
grammar_check, | |
inputs=text_input, | |
outputs=grammar_feedback | |
) | |
check_pronunciation_button.click( | |
pronunciation_correction, | |
inputs=[text_input, audio_input], | |
outputs=[pronunciation_feedback, pronunciation_score] | |
) | |
app.launch(debug=True) | |
# app.py | |
import gradio as gr | |
import speech_recognition as sr | |
from Levenshtein import ratio | |
import tempfile | |
import numpy as np | |
import soundfile as sf | |
def transcribe_audio(file_info): | |
r = sr.Recognizer() | |
with tempfile.NamedTemporaryFile(delete=True, suffix=".wav") as tmpfile: | |
sf.write(tmpfile.name, data=file_info, samplerate=44100, format='WAV') | |
tmpfile.seek(0) | |
with sr.AudioFile(tmpfile.name) as source: | |
audio_data = r.record(source) | |
try: | |
text = r.recognize_google(audio_data) | |
return text | |
except sr.UnknownValueError: | |
return "Could not understand audio" | |
except sr.RequestError as e: | |
return f"Could not request results; {e}" | |
def pronunciation_correction(expected_text, file_info): | |
user_spoken_text = transcribe_audio(file_info) | |
similarity = ratio(expected_text.lower(), user_spoken_text.lower()) | |
description = f"{similarity:.2f}" | |
if similarity >= 0.9: | |
feedback = "Excellent pronunciation!" | |
elif similarity >= 0.7: | |
feedback = "Good pronunciation!" | |
elif similarity >= 0.5: | |
feedback = "Needs improvement." | |
else: | |
feedback = "Poor pronunciation, try to focus more on clarity." | |
return feedback, description | |
def grammar_check(sentence): | |
# Example implementation of a grammar checker function | |
# Ideally, you would use a grammar checking API or tool | |
# This is a placeholder to show the structure | |
if not sentence.endswith("."): | |
return "Sentence should end with a period." | |
if len(sentence.split()) < 3: | |
return "Sentence is too short. Please provide more details." | |
return "No grammar issues found." | |
with gr.Blocks() as app: | |
with gr.Column(): | |
text_input = gr.Textbox(label="Type your sentence here", lines=5, placeholder="Type here...") | |
grammar_check_button = gr.Button("Check Grammar") | |
grammar_feedback = gr.Textbox(label="Grammar Feedback", interactive=False) | |
audio_input = gr.Audio(label="Upload Audio File", type="numpy") | |
check_pronunciation_button = gr.Button("Check Pronunciation") | |
pronunciation_feedback = gr.Textbox(label="Pronunciation Feedback") | |
pronunciation_score = gr.Number(label="Pronunciation Accuracy Score: 0 (No Match) ~ 1 (Perfect)") | |
grammar_check_button.click( | |
grammar_check, | |
inputs=text_input, | |
outputs=grammar_feedback | |
) | |
check_pronunciation_button.click( | |
pronunciation_correction, | |
inputs=[text_input, audio_input], | |
outputs=[pronunciation_feedback, pronunciation_score] | |
) | |
app.launch(debug=True) | |