# 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)