2023-03-09 12:46:50 +01:00
|
|
|
import gradio as gr
|
|
|
|
import speech_recognition as sr
|
2023-05-10 03:49:39 +02:00
|
|
|
|
2023-04-07 20:57:29 +02:00
|
|
|
from modules import shared
|
2023-03-09 20:33:00 +01:00
|
|
|
|
2023-03-09 12:46:50 +01:00
|
|
|
input_hijack = {
|
|
|
|
'state': False,
|
|
|
|
'value': ["", ""]
|
|
|
|
}
|
|
|
|
|
2023-07-08 01:54:53 +02:00
|
|
|
# parameters which can be customized in settings.json of webui
|
|
|
|
params = {
|
|
|
|
'whipser_language': 'english',
|
|
|
|
'whipser_model': 'small.en',
|
|
|
|
'auto_submit': True
|
|
|
|
}
|
|
|
|
|
2023-03-09 12:46:50 +01:00
|
|
|
|
2023-07-25 23:49:56 +02:00
|
|
|
def chat_input_modifier(text, visible_text, state):
|
|
|
|
global input_hijack
|
|
|
|
if input_hijack['state']:
|
|
|
|
input_hijack['state'] = False
|
|
|
|
return input_hijack['value']
|
|
|
|
else:
|
|
|
|
return text, visible_text
|
|
|
|
|
|
|
|
|
2023-07-12 20:33:25 +02:00
|
|
|
def do_stt(audio, whipser_model, whipser_language):
|
2023-03-09 12:46:50 +01:00
|
|
|
transcription = ""
|
|
|
|
r = sr.Recognizer()
|
2023-03-12 21:03:07 +01:00
|
|
|
|
|
|
|
# Convert to AudioData
|
|
|
|
audio_data = sr.AudioData(sample_rate=audio[0], frame_data=audio[1], sample_width=4)
|
2023-03-09 12:46:50 +01:00
|
|
|
|
|
|
|
try:
|
2023-07-08 01:54:53 +02:00
|
|
|
transcription = r.recognize_whisper(audio_data, language=whipser_language, model=whipser_model)
|
2023-03-09 12:46:50 +01:00
|
|
|
except sr.UnknownValueError:
|
|
|
|
print("Whisper could not understand audio")
|
|
|
|
except sr.RequestError as e:
|
2023-03-09 20:33:00 +01:00
|
|
|
print("Could not request results from Whisper", e)
|
2023-03-09 12:46:50 +01:00
|
|
|
|
2023-04-07 20:57:29 +02:00
|
|
|
return transcription
|
2023-03-12 21:03:07 +01:00
|
|
|
|
2023-03-09 12:46:50 +01:00
|
|
|
|
2023-07-12 20:33:25 +02:00
|
|
|
def auto_transcribe(audio, auto_submit, whipser_model, whipser_language):
|
2023-03-13 21:41:19 +01:00
|
|
|
if audio is None:
|
|
|
|
return "", ""
|
2023-07-12 20:33:25 +02:00
|
|
|
transcription = do_stt(audio, whipser_model, whipser_language)
|
2023-04-07 20:57:29 +02:00
|
|
|
if auto_submit:
|
|
|
|
input_hijack.update({"state": True, "value": [transcription, transcription]})
|
|
|
|
|
|
|
|
return transcription, None
|
2023-03-13 21:41:19 +01:00
|
|
|
|
|
|
|
|
2023-03-09 12:46:50 +01:00
|
|
|
def ui():
|
2023-07-08 01:54:53 +02:00
|
|
|
with gr.Accordion("Whisper STT", open=True):
|
|
|
|
with gr.Row():
|
|
|
|
audio = gr.Audio(source="microphone")
|
|
|
|
with gr.Row():
|
|
|
|
with gr.Accordion("Settings", open=False):
|
|
|
|
auto_submit = gr.Checkbox(label='Submit the transcribed audio automatically', value=params['auto_submit'])
|
2023-07-12 20:33:25 +02:00
|
|
|
whipser_model = gr.Dropdown(label='Whisper Model', value=params['whipser_model'], choices=["tiny.en", "base.en", "small.en", "medium.en", "tiny", "base", "small", "medium", "large"])
|
|
|
|
whipser_language = gr.Dropdown(label='Whisper Language', value=params['whipser_language'], choices=["chinese", "german", "spanish", "russian", "korean", "french", "japanese", "portuguese", "turkish", "polish", "catalan", "dutch", "arabic", "swedish", "italian", "indonesian", "hindi", "finnish", "vietnamese", "hebrew", "ukrainian", "greek", "malay", "czech", "romanian", "danish", "hungarian", "tamil", "norwegian", "thai", "urdu", "croatian", "bulgarian", "lithuanian", "latin", "maori", "malayalam", "welsh", "slovak", "telugu", "persian", "latvian", "bengali", "serbian", "azerbaijani", "slovenian", "kannada", "estonian", "macedonian", "breton", "basque", "icelandic", "armenian", "nepali", "mongolian", "bosnian", "kazakh", "albanian", "swahili", "galician", "marathi", "punjabi", "sinhala", "khmer", "shona", "yoruba", "somali", "afrikaans", "occitan", "georgian", "belarusian", "tajik", "sindhi", "gujarati", "amharic", "yiddish", "lao", "uzbek", "faroese", "haitian creole", "pashto", "turkmen", "nynorsk", "maltese", "sanskrit", "luxembourgish", "myanmar", "tibetan", "tagalog", "malagasy", "assamese", "tatar", "hawaiian", "lingala", "hausa", "bashkir", "javanese", "sundanese"])
|
2023-04-13 15:40:27 +02:00
|
|
|
|
|
|
|
audio.change(
|
2023-07-12 20:33:25 +02:00
|
|
|
auto_transcribe, [audio, auto_submit, whipser_model, whipser_language], [shared.gradio['textbox'], audio]).then(
|
2023-04-13 15:40:27 +02:00
|
|
|
None, auto_submit, None, _js="(check) => {if (check) { document.getElementById('Generate').click() }}")
|
2023-07-25 23:49:56 +02:00
|
|
|
|
2023-07-08 01:54:53 +02:00
|
|
|
whipser_model.change(lambda x: params.update({"whipser_model": x}), whipser_model, None)
|
|
|
|
whipser_language.change(lambda x: params.update({"whipser_language": x}), whipser_language, None)
|
|
|
|
auto_submit.change(lambda x: params.update({"auto_submit": x}), auto_submit, None)
|