2023-03-09 06:46:50 -05:00
|
|
|
import gradio as gr
|
|
|
|
import speech_recognition as sr
|
2023-04-07 14:57:29 -04:00
|
|
|
from modules import shared
|
2023-03-09 14:33:00 -05:00
|
|
|
|
2023-03-09 06:46:50 -05:00
|
|
|
input_hijack = {
|
|
|
|
'state': False,
|
|
|
|
'value': ["", ""]
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2023-04-07 14:57:29 -04:00
|
|
|
def do_stt(audio):
|
2023-03-09 06:46:50 -05:00
|
|
|
transcription = ""
|
|
|
|
r = sr.Recognizer()
|
2023-03-12 16:03:07 -04:00
|
|
|
|
|
|
|
# Convert to AudioData
|
|
|
|
audio_data = sr.AudioData(sample_rate=audio[0], frame_data=audio[1], sample_width=4)
|
2023-03-09 06:46:50 -05:00
|
|
|
|
|
|
|
try:
|
2023-03-12 16:03:07 -04:00
|
|
|
transcription = r.recognize_whisper(audio_data, language="english", model="base.en")
|
2023-03-09 06:46:50 -05:00
|
|
|
except sr.UnknownValueError:
|
|
|
|
print("Whisper could not understand audio")
|
|
|
|
except sr.RequestError as e:
|
2023-03-09 14:33:00 -05:00
|
|
|
print("Could not request results from Whisper", e)
|
2023-03-09 06:46:50 -05:00
|
|
|
|
2023-04-07 14:57:29 -04:00
|
|
|
return transcription
|
2023-03-12 16:03:07 -04:00
|
|
|
|
2023-03-09 06:46:50 -05:00
|
|
|
|
2023-04-07 14:57:29 -04:00
|
|
|
def auto_transcribe(audio, auto_submit):
|
2023-03-13 16:41:19 -04:00
|
|
|
if audio is None:
|
|
|
|
return "", ""
|
2023-04-07 14:57:29 -04:00
|
|
|
|
|
|
|
transcription = do_stt(audio)
|
|
|
|
if auto_submit:
|
|
|
|
input_hijack.update({"state": True, "value": [transcription, transcription]})
|
|
|
|
|
|
|
|
return transcription, None
|
2023-03-13 16:41:19 -04:00
|
|
|
|
|
|
|
|
2023-03-09 06:46:50 -05:00
|
|
|
def ui():
|
2023-03-12 16:03:07 -04:00
|
|
|
with gr.Row():
|
|
|
|
audio = gr.Audio(source="microphone")
|
2023-04-07 14:57:29 -04:00
|
|
|
auto_submit = gr.Checkbox(label='Submit the transcribed audio automatically', value=True)
|
|
|
|
audio.change(fn=auto_transcribe, inputs=[audio, auto_submit], outputs=[shared.gradio['textbox'], audio])
|
|
|
|
audio.change(None, auto_submit, None, _js="(check) => {if (check) { document.getElementById('Generate').click() }}")
|