Abdurahman
app
b50881a
import gradio as gr
import util
import tts
import asr
# Front-End
with gr.Blocks() as app:
# Title and Article
with gr.Row():
gr.Markdown(
"""
# Uyghur Pronunciation Checker
This app is designed to help users practice Uyghur pronunciation.
Select an uyghur script, enter or generate text, and check your pronunciation. You may also generate AI pronunciation to compare.
Note: Please keep the audio input to under 10 seconds for faster processing since this space is running on CPU basic.
"""
)
with gr.Row():
# Input Column
with gr.Column(scale=1):
# Script
with gr.Row():
script_choice = gr.Dropdown(
choices=["Uyghur Arabic", "Uyghur Latin"],
label="1. Select Uyghur Script",
value="Uyghur Arabic",
interactive=True
)
# Text
with gr.Group():
with gr.Row():
input_text = gr.Textbox(
label="2. Enter Uyghur Text in Chosen Script (or Click a Button Below to Generate Text)",
placeholder="Enter Uyghur text here...",
)
with gr.Row():
generate_short_btn = gr.Button("Generate Short Text")
generate_long_btn = gr.Button("Generate Long Text")
# Translations
# with gr.Group():
# with gr.Row():
# translate_choice = gr.Dropdown(
# choices=util.translation_choices,
# label="(Optional) Select Translation Langauge and Translate",
# value="english",
# interactive=True
# )
# translate_btn = gr.Button("Translate")
# with gr.Row():
# translation_text = gr.Textbox(
# label=" Translated Uyghur Text",
# placeholder="Translated text will appear here...",
# )
# TTS
with gr.Group():
with gr.Row():
example_audio = gr.Audio(label="(Optional) Generate AI Pronunciation")
with gr.Row():
tts_btn = gr.Button("Generate AI Pronunciation")
# ASR
with gr.Group():
with gr.Row():
user_audio = gr.Audio(
label="3. Record or Upload Your Pronunciation",
sources=["microphone", "upload"],
type="filepath",
)
with gr.Row():
check_btn = gr.Button("Check My Pronunciation")
# Output Column
with gr.Column(scale=1):
# ASR Transcripts
with gr.Group():
with gr.Row():
transcript_ugArab_box = gr.Textbox(
label="User Transcript (Arabic Script)",
placeholder="ASR transcription of user audio..."
)
with gr.Row():
transcript_ugLatn_box = gr.Textbox(
label="User Transcript (Latin Script)",
placeholder="ASR transcription of user audio..."
)
# IPA
with gr.Group():
with gr.Row():
correct_phoneme_box = gr.Textbox(
label="Correct Phonemes",
placeholder="IPA representation of the Correct pronunciation..."
)
with gr.Row():
user_phoneme_box = gr.Textbox(
label="User Phonemes",
placeholder="IPA representation of the user pronunciation..."
)
# Feedback
with gr.Group():
with gr.Row():
match_box = gr.Markdown(
"""<h4>Pronunciation Feedback</h4>\n
Matching and mismatched characters will be visualized here...
"""
)
with gr.Row():
score_box = gr.Textbox(
label="Phonetic Score",
placeholder="Your pronunciation score as a percentage..."
)
# Bind functions to buttons
generate_short_btn.click(
util.generate_short_text,
inputs=[script_choice],
outputs=[input_text]
)
generate_long_btn.click(
util.generate_long_text,
inputs=[script_choice],
outputs=[input_text]
)
# translate_btn.click(
# util.translate_text,
# inputs=[input_text, script_choice, translate_choice],
# outputs=[translation_text]
# )
tts_btn.click(
tts.generate_audio,
inputs=[input_text, script_choice],
outputs=[example_audio]
)
check_btn.click(
asr.check_pronunciation,
inputs=[input_text, script_choice, user_audio],
outputs=[transcript_ugArab_box, transcript_ugLatn_box, correct_phoneme_box, user_phoneme_box, match_box, score_box]
)
# Main
if __name__ == "__main__":
app.launch()