File size: 10,718 Bytes
c55996d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34c3788
c55996d
 
 
9709fe9
 
 
 
 
 
 
 
 
 
a3e24ad
 
 
 
 
 
 
 
 
 
4b6856f
 
 
 
 
 
 
 
 
 
 
 
 
bf88b93
4b6856f
 
bf88b93
4b6856f
bf88b93
ad8ec53
4b6856f
 
 
 
 
 
 
 
 
 
be934b6
 
 
 
 
 
 
 
 
 
c55996d
 
 
 
4b6856f
c55996d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34c3788
c55996d
 
34c3788
c55996d
 
 
 
34c3788
c55996d
 
 
 
 
 
 
 
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
import gradio as gr


import os

HF_TOKEN = os.getenv('HF_TOKEN')
callback = gr.HuggingFaceDatasetSaver(HF_TOKEN, "paulbauriegel/voice-coe-demo")

sentences = \
    {'en':[
        "In winter, the dry leaves fly around in the air.",
        "The good old man broke through the ice with his horse and fell into the cold water.",
        "He always eats the eggs without salt and pepper.",
        "Good to know. Now I can fix the appointment.",
        "We find this approach is particularly effective at learning speech to text translation.",
        "Ever wonder what your Representative has been up to?",
        "The Wenker sheets are the data basis for Georg Wenker's language atlases",
        "At least she gets 7000 dollars in damages"
    ],
    'de':[
        "Im Winter fliegen die trocknen Blätter durch die Luft herum.",
        "Der gute alte Mann ist mit dem Pferde durch´s Eis gebrochen und in das kalte Wasser gefallen.",
        "Er isst die Eier immer ohne Salz und Pfeffer.",
        "Gut zu wissen. Jetzt kann ich den Termin vereinbaren.",
        "Wir haben festgestellt, dass dieser Ansatz besonders effektiv beim Erlernen der Sprache-zu-Text Übersetzung ist.",
        "Haben Sie sich jemals gefragt, was Ihr Abgeordneter so treibt?",
        "Die Wenkerbogen stellen die Datengrundlage für Georg Wenkers Sprachatlanten dar",
        "Zumindest bekommt sie 7000 Dollar Schmerzensgeld",
    ],
    'ru': [
        "Зимой сухие листья кружатся в воздухе.",
        "Старик провалился под лед на своем коне и упал в холодную воду.",
        "Он всегда ест яйца без соли и перца.",
        "Это важная информация.Теперь я могу назначить встречу.",
        "Мы считаем этот подход особенно эффективным при обучении переводу речи в текст.",
        "Вы когда-нибудь задумывались, чем занимается ваш представитель?",
        "Листы Венкера являются основой данных для языковых атласов Георга Венкера.",
        "По крайней мере, она получает 7000 долларов в качестве возмещения ущерба."
    ],
    'sk':[
        "V zime lietajú suché listy vzduchom.",
        "Starček prerazil ľad so svojím koňom a spadol do studenej vody.",
        "Vajcia vždy konzumuje bez soli a korenia.",
        "Je dobré vedieť, že si teraz môžem dohodnúť stretnutie.",
        "Zistili sme, že tento prístup je obzvlášť efektívny pri učení sa prekladu reči do textu.",
        "Premýšľali ste niekedy, čo chystá váš poslanec?",
        "Wenkerove hárky predstavujú základ dát jazykových atlasov Georga Wenkera",
        "Aspoň dostane ako bolestné najmenej 7000 dolárov",
    ],
    'ar': [
        "في الشتاء ، تتطاير الأوراق الجافة في الهواء.",
        "انكسر الجليد بالعجوز الطيب و حصانه وسقطا في الماء البارد.",
        "هو يأكل البيض دائما بدون ملح وفلفل.", 
        "من الجيد أن أعرف. الآن يمكنني تحديد الموعد.",
        "نحن نرى أن هذا النهج فعال بشكل خاص في تعلم ترجمة الكلام إلى نص.",
        "هل تساءلت يومًا ما الذي كان مندوبك ينوي القيام به؟",
        "أوراق وينكر هي البيانات الأساسية لأطالس جورج وينكر اللغوية.",
        "على الأقل تحصلت على تعويض قدره 7000 دولار.",
    ],
    "pl": [
        "Zimą, suche liście fruwają w powietrzu.",
        "Lód załamał się i poczciwy staruszek oraz jego koń wpadli do zimnej wody.",
        "On zawsze je jajka bez soli i pieprzu.",
        "Dobrze wiedzieć. Teraz mogę poprawić zaproszenie.",
        "Uważamy, że to podejście jest szczególnie efektywne przy nauce tłumaczenia mowy na tekst.",
        "Czy kiedykolwiek zastanawiałeś się o co chodzi twojemu przedstawicielowi?",
        "Ankiety Wenkera są podstawą atlasu językowego Georga Wenkera.",
        "Ona przynajmniej dostanie 7000 dolarów odszkodowania.",
    ],
    "hi": [
        "सर्दियों में सूखे पत्ते हवा में इधर-उधर उड़ती हैं।",
        "बूढ़े भले आदमी अपने घोड़े के साथ बर्फ तोड़कर ठंडे पानी में गिर गए ।",
        "वह हमेशा बिना नमक और काली मिर्च के अंडे खाते है।",
        "जानकर अच्छा लगा। अब मैं बैठक फिक्स कर सकता हूं।",
        "हम पाते हैं कि यह दृष्टिकोण लिखित भाषा से पठित  भाषा  सीखने में विशेष रूप से प्रभावी है।",
        "क्या आपने कभी सोचा है कि आपका प्रतिनिधि क्या कर रहा है?",
        "वेन्कर शीट जॉर्ज वेन्कर की भाषा एटलस के संसूचना  का आधार हैं",
        "उसे हर्जाने में कम से कम 7000 डॉलर मिलते हैं",
    ],
    'el': [
        "Το χειμώνα, τα ξερά φύλλα πετούν στον αέρα.",
        "Ο καλός γέρος έσπασε το πάγο και έπεσε μέσα στο κρύο νερό με το άλογό του.",
        "Πάντα τρώει τα αυγά χωρίς αλάτι και πιπέρι.",
        "Καλώς. Τώρα μπορώ να κλείσω το ραντεβού.",
        "Βρίσκουμε αυτή τη πρακτική πιο αποτελεσματική για εκμάθηση μετάφρασης ομιλίας σε κείμενο.",
        "Έχεις ποτέ αναρωτηθεί, τι κάνει ο εκπρόσωπός σου?",
        "Τα έγγραφα Wenker είναι βασισμένα στα δεδομένα χαρτογράφισης γλωσσών του George Wenker.",
        "Τουλάχιστον πήρε 7000 δολάρια σε αποζημιώσεις.",
    ]}
with gr.Blocks(title='Voice CoE Data Collection') as demo:
    _ = gr.HTML('<center><h1>CoE Voice Data Collection</h1><center>')
    lang = gr.Dropdown(
            sorted(sentences.keys()), 
            value='en',
            interactive=True,
            label="Choose your language", 
    )
    client_ip = gr.Label("", label="User-IP", visible=False)
    with gr.Row():
        #outputs = gr.components.Textbox(label=)
        label_0 = gr.Label(sentences['en'][0], label="")
        audio_0 = gr.Audio(source="microphone", type="filepath", label="Record sample")
    with gr.Row():
        #outputs = gr.components.Textbox(label=)
        label_1 = gr.Label(sentences['en'][1], label="")
        audio_1 = gr.Audio(source="microphone", type="filepath", label="Record sample")
    with gr.Row():
        #outputs = gr.components.Textbox(label=)
        label_2 = gr.Label(sentences['en'][2], label="")
        audio_2 = gr.Audio(source="microphone", type="filepath", label="Record sample")
    with gr.Row():
        #outputs = gr.components.Textbox(label=)
        label_3 = gr.Label(sentences['en'][3], label="")
        audio_3 = gr.Audio(source="microphone", type="filepath", label="Record sample")
    with gr.Row():
        #outputs = gr.components.Textbox(label=)
        label_4 = gr.Label(sentences['en'][4], label="")
        audio_4 = gr.Audio(source="microphone", type="filepath", label="Record sample")
    with gr.Row():
        #outputs = gr.components.Textbox(label=)
        label_5 = gr.Label(sentences['en'][5], label="")
        audio_5 = gr.Audio(source="microphone", type="filepath", label="Record sample")
    with gr.Row():
        #outputs = gr.components.Textbox(label=)
        label_6 = gr.Label(sentences['en'][6], label="")
        audio_6 = gr.Audio(source="microphone", type="filepath", label="Record sample")
    with gr.Row():
        #outputs = gr.components.Textbox(label=)
        label_7 = gr.Label(sentences['en'][7], label="")
        audio_7 = gr.Audio(source="microphone", type="filepath", label="Record sample")
    with gr.Row():
        acc = gr.Dropdown(
            ["yes", "no", "maybe"], 
            label="Do you have an accent in the spoken language", 
        )
    with gr.Row():
        agree = gr.Checkbox(value=False, label='I agree that my data is stored and analysed by the iHub CoE Voice Team')
    with gr.Row():
        btn = gr.Button("Submit data")
        thx = gr.HTML('') # 

    
    lang.change(lambda x: {label_0: sentences[x][0], 
                           label_1: sentences[x][1],
                           label_2: sentences[x][2], 
                           label_3: sentences[x][3], 
                           label_4: sentences[x][4], 
                           label_5: sentences[x][5], 
                           label_6: sentences[x][6], 
                           label_7: sentences[x][7], }, 
                lang, 
                [label_0, label_1, label_2, label_3,
                 label_4, label_5, label_6, label_7])

    # This needs to be called at some point prior to the first call to callback.flag()
    callback.setup([client_ip, lang, audio_0, audio_1, audio_2, audio_3, audio_4, audio_5, audio_6, audio_7, acc], "flagged_data_points")

    # We can choose which components to flag -- in this case, we'll flag all of them
    def submit_data(client_ip, lang, audio_0, audio_1, audio_2, audio_3, audio_4, audio_5, audio_6, audio_7, acc, agree, request: gr.Request):
        if not agree:
            return '<h3>No data has been submitted</h3>'
        else:
            client_ip_d = {'ip': request.client.host}
            callback.flag([client_ip_d, lang, audio_0, audio_1, audio_2, audio_3, audio_4, audio_5, audio_6, audio_7, acc])
            return '<h3>Thank you for submitting you data</h3>'

    btn.click(submit_data, 
              [client_ip, lang, audio_0, audio_1, audio_2, audio_3, audio_4, audio_5, audio_6, audio_7, acc, agree], 
              thx, 
              preprocess=False)

demo.launch()