File size: 3,858 Bytes
45585f3
391decb
 
45585f3
391decb
 
 
 
 
45585f3
391decb
45585f3
391decb
 
 
 
 
45585f3
b829e6a
 
 
391decb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45585f3
391decb
b829e6a
 
 
391decb
 
 
 
b829e6a
391decb
 
 
 
 
 
 
 
 
b829e6a
 
 
ef70edd
45585f3
391decb
 
 
 
 
 
 
 
 
 
 
 
45585f3
 
 
391decb
 
 
45585f3
 
 
fb86baf
 
 
391decb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fb86baf
 
45585f3
fb86baf
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
import os
import csv
import pandas as pd
import gradio as gr
import huggingface_hub
import scipy.io.wavfile as wavf
from huggingface_hub import Repository
from IPython.display import Audio
from IPython.core.display import display

HF_TOKEN = os.environ.get("HF_TOKEN")


DATASET_REPO_URL = "https://huggingface.co/datasets/chrisjay/crowd-speech-africa"
DATA_FILENAME = "data.csv"
AUDIO_PATH = os.path.join("data",'wav')
DATA_FILE = os.path.join("data", DATA_FILENAME)

# Get a dropdown of all African languages
DEFAULT_LANGS = {'Igbo':'ibo','Yoruba':'yor','Hausa':'hau'}

repo = Repository(
    local_dir="data", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN
)
#repo.git_pull()

os.makedirs(AUDIO_PATH,exist_ok=True)


def push_record():
    # Push the wav to a folder and reference the location 
    commit_url = repo.push_to_hub()
    output = f'Recordings successfully pushed!'
    output_string = "<html> <body> <div class='output' style='color:green; font-size:13px'>"+output+"</div> </body> </html>"
    return output_string 
        


def save_record(language,text,record):
    # Save text and its corresponding record to flag
   
    if language!=None and language!='Choose language':
        lang_id = DEFAULT_LANGS[language]
        text =text.strip()
        
        # Write audio to file
        audio_output_filename = os.path.join(AUDIO_PATH,f'{len(os.listdir(AUDIO_PATH))}.wav')
        wavf.write(audio_output_filename,record[0],record[1])

        with open(DATA_FILE, "a") as csvfile:
            writer = csv.DictWriter(csvfile, fieldnames=["language", "audio","text"])
           
            writer.writerow(
                {"language": lang_id, "audio": audio_output_filename,"text": text}
            )
        
        output = f'Recording successfully saved! Click `Push` when you are done to send your recordings to the repo.'
    
    else:
        output = 'Language must be specified!'     
    output_string = "<html> <body> <div class='output' style='color:green; font-size:13px'>"+output+"</div> </body> </html>"
    return output_string


def display_records():
    df = pd.read_csv(DATA_FILE)
    #df['audio'] = df['audio'].apply(lambda x: display(Audio(x,autoplay=True)))
    langs=df['language'].values
    audios = df['audio'].values
    texts=df['text'].values
    return langs[0],audios[0],texts[0]
    #return df 



title = 'African Crowdsource Speech'
description = 'A platform to contribute to your African language by recording your voice'

markdown = """# Africa Crowdsource Speech 

### a platform to contribute to your African language by recording your voice"""


# Interface design begins
block = gr.Blocks()
with block:
    gr.Markdown(markdown)
    with gr.Tabs():
        
        with gr.TabItem('Record'):
            #with gr.Row():
            language = gr.inputs.Dropdown(choices = list(DEFAULT_LANGS.keys()),label="language",default="Choose language")
            text = gr.inputs.Textbox(placeholder='Write your text',label="text to record")
            record = gr.inputs.Audio(source="microphone",label='Record your voice')
            output_result = gr.outputs.HTML()
            

            save = gr.Button("Save")
            push = gr.Button('Push')
            
            save.click(save_record, inputs=[language,text,record],outputs=output_result)
            push.click(push_record, inputs=[],outputs=output_result)

        with gr.TabItem('Listen') as listen_tab:
            gr.Markdown("Listen to the recordings contributed. You can find them [here](https://huggingface.co/datasets/chrisjay/crowd-speech-africa).")
            listen = gr.Button("Listen")
            listen.click(display_records,inputs=[],outputs =[gr.outputs.Textbox(label='language'),gr.outputs.Audio(),gr.outputs.Textbox(label='text')] )
            
            



block.launch(enable_queue=True)