| | import requests |
| | import gradio as gr |
| | import os |
| | import urllib.request |
| |
|
| | from gradio_client import Client |
| |
|
| | hf_link = os.environ['link'] |
| | client = Client(hf_link) |
| | local_link = os.environ['local_link'] |
| | local_api = os.environ['local_api'] |
| |
|
| | local_code = requests.head(local_link).status_code |
| | print(local_code) |
| |
|
| | def s2t_hf(source, mic, fi, lang): |
| | if source == 'file': |
| | in_file = fi |
| | else: |
| | in_file = mic |
| |
|
| | result = client.predict( |
| | in_file, |
| | "transcribe", |
| | True, |
| | api_name="/predict" |
| | ) |
| | print(result) |
| | return result |
| |
|
| | def s2t_local(source, mic, fi, lang): |
| | if source == 'file': |
| | in_file = fi |
| | else: |
| | in_file = mic |
| |
|
| | form_data = {"language": lang} |
| | files = {'input_file': open(in_file, 'rb')} |
| | print(files) |
| | |
| | response = requests.post(local_api, files=files, data=form_data, timeout=10000) |
| |
|
| | return response.json() |
| |
|
| | def s2t(source, mic, fi, lang): |
| | if local_code==200: |
| | return s2t_local(source, mic, fi, lang) |
| | else: |
| | return s2t_hf(source, mic, fi, lang) |
| |
|
| | def update_audio_ui(audio_source: str, input_audio_mic, input_audio_file): |
| | mic = audio_source == "microphone" |
| | |
| | |
| | return gr.update(visible=mic, value=None), gr.update(visible=not mic, value=None) |
| |
|
| | with gr.Blocks() as demo: |
| | gr.Markdown('<h1 style="text-align: center;">Speech to Text</h1>') |
| | with gr.Group(): |
| | with gr.Row() as audio_box: |
| | with gr.Column(): |
| | input_lang = gr.Dropdown(['auto','vi', 'ja', 'en', 'cn', 'ko'], label='Language?', value='en', interactive=True) |
| | audio_source = gr.Radio( |
| | label="Audio source", |
| | choices=["file", "microphone"], |
| | value="file", |
| | interactive=True |
| | ) |
| | input_audio_mic = gr.Audio( |
| | label="Input speech", |
| | type="filepath", |
| | sources="microphone", |
| | visible=False, |
| | ) |
| | input_audio_file = gr.Audio( |
| | label="Input speech", |
| | type="filepath", |
| | sources="upload", |
| | visible=True, |
| | ) |
| | js = gr.JSON(label="json") |
| | with gr.Row(): |
| | btn = gr.Button("Run") |
| | btn_clean = gr.ClearButton([input_audio_mic, input_audio_file, js]) |
| |
|
| | audio_source.change( |
| | fn=update_audio_ui, |
| | inputs=[audio_source, input_audio_mic, input_audio_file], |
| | outputs=[ |
| | input_audio_mic, |
| | input_audio_file, |
| | ], |
| | queue=False, |
| | api_name=False, |
| | ) |
| |
|
| |
|
| | btn.click(fn=s2t, inputs=[audio_source, input_audio_mic, input_audio_file, input_lang], outputs=[js]) |
| |
|
| | if __name__ == "__main__": |
| | demo.launch() |