speechfeedback / app.py
jinggujiwoo7's picture
Update app.py
9d4a77e verified
raw
history blame
No virus
5.39 kB
# 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)