File size: 5,103 Bytes
7dbde5a
734a7ea
ce63f6f
d29fa84
5a4ac64
734a7ea
5a4ac64
 
 
 
8e57d14
5a4ac64
be00192
 
c510f60
be00192
 
 
8e57d14
43ce49e
 
 
c510f60
43ce49e
 
 
 
 
 
8e57d14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43ce49e
 
8e57d14
43ce49e
fe67771
8e57d14
43ce49e
 
 
8e57d14
43ce49e
 
 
 
 
5a4ac64
 
 
8e57d14
b1e229a
0e8c610
 
8e57d14
d6d3fa1
0e8c610
 
 
8e57d14
d6d3fa1
0e8c610
8e57d14
b1e229a
0e8c610
fe67771
 
 
0e8c610
 
fe67771
6a8d513
d6d3fa1
0e8c610
8e57d14
b1e229a
aab3ee4
 
ff91a06
b8881c6
 
aab3ee4
8e57d14
 
 
 
 
5a4ac64
 
716237b
734a7ea
deb8ef3
ea0e1cd
716237b
deb8ef3
716237b
734a7ea
deb8ef3
ea0e1cd
716237b
8e57d14
 
 
 
 
 
716237b
 
d29fa84
5a4ac64
 
 
 
 
d29fa84
5a4ac64
fe67771
5a4ac64
 
734a7ea
5a4ac64
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import gradio as gr
import util
import tts
import asr

# Front-End
with gr.Blocks() as app:
    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...",
                    )
                # Add buttons for generating short and long texts
                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():
                    translation_text = gr.Textbox(
                        label="(Optional) Translate Uyghur Text",
                        placeholder="Translated text here...",
                    )
                # Add buttons for generating short and long texts
                with gr.Row():
                    with gr.Column():
                        translate_choice = gr.Dropdown(
                            choices=util.translation_choices,
                            label="Select Translation Langauge",
                            value="english",
                            interactive=True
                        )
                        translate_btn = gr.Button("Translate")
            # TTS
            with gr.Group():     
                with gr.Row():
                    example_audio = gr.Audio(label="(Optional) Generate AI Pronunciation for Text")
                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()