From eed2e8915d83796679c0b7a3ea9121d329ceddab Mon Sep 17 00:00:00 2001 From: yum Date: Wed, 24 May 2023 23:07:07 -0700 Subject: Add more text filters Add 3 filters: * Remove trailing period * Convert to uppercase * Convert to lowercase All may be composed. Upper/lower just overwrite each other so just use one. --- GUI/GUI/GUI/Config.cpp | 9 ++++++++ GUI/GUI/GUI/Config.h | 3 +++ GUI/GUI/GUI/Frame.cpp | 48 +++++++++++++++++++++++++++++++++++++++ GUI/GUI/GUI/Frame.h | 3 +++ GUI/GUI/GUI/PythonWrapper.cpp | 3 +++ Scripts/transcribe.py | 53 +++++++++++++++++++++++++++++++++++++++---- 6 files changed, 115 insertions(+), 4 deletions(-) diff --git a/GUI/GUI/GUI/Config.cpp b/GUI/GUI/GUI/Config.cpp index 0443278..f0b5a1b 100644 --- a/GUI/GUI/GUI/Config.cpp +++ b/GUI/GUI/GUI/Config.cpp @@ -72,6 +72,9 @@ AppConfig::AppConfig(wxTextCtrl* out) use_cpu(false), use_builtin(false), enable_uwu_filter(false), + remove_trailing_period(false), + enable_uppercase_filter(false), + enable_lowercase_filter(false), gpu_idx(0), keybind("ctrl+x"), @@ -117,6 +120,9 @@ bool AppConfig::Serialize(const std::filesystem::path& path) { cm.Set("use_cpu", use_cpu); cm.Set("use_builtin", use_builtin); cm.Set("enable_uwu_filter", enable_uwu_filter); + cm.Set("remove_trailing_period", remove_trailing_period); + cm.Set("enable_uppercase_filter", enable_uppercase_filter); + cm.Set("enable_lowercase_filter", enable_lowercase_filter); cm.Set("gpu_idx", gpu_idx); cm.Set("keybind", keybind); @@ -175,6 +181,9 @@ bool AppConfig::Deserialize(const std::filesystem::path& path) { cm.Get("use_cpu", c.use_cpu); cm.Get("use_builtin", c.use_builtin); cm.Get("enable_uwu_filter", c.enable_uwu_filter); + cm.Get("remove_trailing_period", c.remove_trailing_period); + cm.Get("enable_uppercase_filter", c.enable_uppercase_filter); + cm.Get("enable_lowercase_filter", c.enable_lowercase_filter); cm.Get("gpu_idx", c.gpu_idx); cm.Get("keybind", c.keybind); diff --git a/GUI/GUI/GUI/Config.h b/GUI/GUI/GUI/Config.h index be036ea..01b0239 100644 --- a/GUI/GUI/GUI/Config.h +++ b/GUI/GUI/GUI/Config.h @@ -58,6 +58,9 @@ public: bool use_cpu; bool use_builtin; bool enable_uwu_filter; + bool remove_trailing_period; + bool enable_uppercase_filter; + bool enable_lowercase_filter; int gpu_idx; std::string keybind; diff --git a/GUI/GUI/GUI/Frame.cpp b/GUI/GUI/GUI/Frame.cpp index 221c59c..7e965df 100644 --- a/GUI/GUI/GUI/Frame.cpp +++ b/GUI/GUI/GUI/Frame.cpp @@ -40,6 +40,9 @@ namespace { ID_PY_APP_USE_CPU, ID_PY_APP_USE_BUILTIN, ID_PY_APP_ENABLE_UWU_FILTER, + ID_PY_APP_REMOVE_TRAILING_PERIOD, + ID_PY_APP_ENABLE_UPPERCASE_FILTER, + ID_PY_APP_ENABLE_LOWERCASE_FILTER, ID_PY_APP_ROWS, ID_PY_APP_COLS, ID_PY_APP_WINDOW_DURATION, @@ -603,6 +606,30 @@ Frame::Frame() ); py_app_enable_uwu_filter_ = py_app_enable_uwu_filter; + auto* py_app_remove_trailing_period = new wxCheckBox(py_config_panel, + ID_PY_APP_REMOVE_TRAILING_PERIOD, "Remove trailing period"); + py_app_remove_trailing_period->SetValue(app_c_->remove_trailing_period); + py_app_remove_trailing_period->SetToolTip( + "If checked, transcriptions will never end with a period." + ); + py_app_remove_trailing_period_ = py_app_remove_trailing_period; + + auto* py_app_enable_uppercase_filter = new wxCheckBox(py_config_panel, + ID_PY_APP_ENABLE_UPPERCASE_FILTER, "Enable uppercase filter"); + py_app_enable_uppercase_filter->SetValue(app_c_->enable_uppercase_filter); + py_app_enable_uppercase_filter->SetToolTip( + "If checked, transcribed text will be converted to UPPERCASE." + ); + py_app_enable_uppercase_filter_ = py_app_enable_uppercase_filter; + + auto* py_app_enable_lowercase_filter = new wxCheckBox(py_config_panel, + ID_PY_APP_ENABLE_LOWERCASE_FILTER, "Enable lowercase filter"); + py_app_enable_lowercase_filter->SetValue(app_c_->enable_lowercase_filter); + py_app_enable_lowercase_filter->SetToolTip( + "If checked, transcribed text will be converted to lowercase." + ); + py_app_enable_lowercase_filter_ = py_app_enable_lowercase_filter; + // Hack: Add newlines before and after the button text to make // the buttons bigger, and easier to click from inside VR. auto* py_app_start_button = new wxButton(py_config_panel, @@ -624,6 +651,12 @@ Frame::Frame() /*flags=*/wxEXPAND); sizer->Add(py_app_enable_uwu_filter, /*proportion=*/0, /*flags=*/wxEXPAND); + sizer->Add(py_app_remove_trailing_period, /*proportion=*/0, + /*flags=*/wxEXPAND); + sizer->Add(py_app_enable_uppercase_filter, /*proportion=*/0, + /*flags=*/wxEXPAND); + sizer->Add(py_app_enable_lowercase_filter, /*proportion=*/0, + /*flags=*/wxEXPAND); sizer->Add(py_app_start_button, /*proportion=*/0, /*flags=*/wxEXPAND); sizer->Add(py_app_stop_button, /*proportion=*/0, @@ -1101,6 +1134,15 @@ void Frame::ApplyConfigToInputFields() auto* py_app_enable_uwu_filter = static_cast(FindWindowById(ID_PY_APP_ENABLE_UWU_FILTER)); py_app_enable_uwu_filter->SetValue(app_c_->enable_uwu_filter); + auto* py_app_remove_trailing_period = static_cast(FindWindowById(ID_PY_APP_REMOVE_TRAILING_PERIOD)); + py_app_remove_trailing_period->SetValue(app_c_->remove_trailing_period); + + auto* py_app_enable_uppercase_filter = static_cast(FindWindowById(ID_PY_APP_ENABLE_UPPERCASE_FILTER)); + py_app_enable_uppercase_filter->SetValue(app_c_->enable_uppercase_filter); + + auto* py_app_enable_lowercase_filter = static_cast(FindWindowById(ID_PY_APP_ENABLE_LOWERCASE_FILTER)); + py_app_enable_lowercase_filter->SetValue(app_c_->enable_lowercase_filter); + // Unity panel auto* unity_chars_per_sync = static_cast(FindWindowById(ID_UNITY_CHARS_PER_SYNC)); unity_chars_per_sync->SetSelection(chars_idx); @@ -1671,6 +1713,9 @@ void Frame::OnAppStart(wxCommandEvent& event) { const bool use_cpu = py_app_use_cpu_->GetValue(); const bool use_builtin = py_app_use_builtin_->GetValue(); const bool enable_uwu_filter = py_app_enable_uwu_filter_->GetValue(); + const bool remove_trailing_period = py_app_remove_trailing_period_->GetValue(); + const bool enable_uppercase_filter = py_app_enable_uppercase_filter_->GetValue(); + const bool enable_lowercase_filter = py_app_enable_lowercase_filter_->GetValue(); std::string rows_str = py_app_rows_->GetValue().ToStdString(); std::string cols_str = py_app_cols_->GetValue().ToStdString(); std::string chars_per_sync_str = @@ -1740,6 +1785,9 @@ void Frame::OnAppStart(wxCommandEvent& event) { app_c_->use_cpu = use_cpu; app_c_->use_builtin = use_builtin; app_c_->enable_uwu_filter = enable_uwu_filter; + app_c_->remove_trailing_period = remove_trailing_period; + app_c_->enable_uppercase_filter = enable_uppercase_filter; + app_c_->enable_lowercase_filter = enable_lowercase_filter; app_c_->gpu_idx = gpu_idx; app_c_->keybind = keybind; app_c_->Serialize(AppConfig::kConfigPath); diff --git a/GUI/GUI/GUI/Frame.h b/GUI/GUI/GUI/Frame.h index 130a716..f5a8cd9 100644 --- a/GUI/GUI/GUI/Frame.h +++ b/GUI/GUI/GUI/Frame.h @@ -81,6 +81,9 @@ private: wxCheckBox* py_app_use_cpu_; wxCheckBox* py_app_use_builtin_; wxCheckBox* py_app_enable_uwu_filter_; + wxCheckBox* py_app_remove_trailing_period_; + wxCheckBox* py_app_enable_uppercase_filter_; + wxCheckBox* py_app_enable_lowercase_filter_; wxCheckBox* unity_clear_osc_; wxCheckBox* whisper_enable_local_beep_; wxCheckBox* whisper_use_cpu_; diff --git a/GUI/GUI/GUI/PythonWrapper.cpp b/GUI/GUI/GUI/PythonWrapper.cpp index 98a0c3e..5df1dfa 100644 --- a/GUI/GUI/GUI/PythonWrapper.cpp +++ b/GUI/GUI/GUI/PythonWrapper.cpp @@ -474,6 +474,9 @@ std::future PythonWrapper::StartApp( "--cpu", config.use_cpu ? "1" : "0", "--use_builtin", config.use_builtin ? "1" : "0", "--enable_uwu_filter", config.enable_uwu_filter ? "1" : "0", + "--remove_trailing_period", config.remove_trailing_period ? "1" : "0", + "--enable_uppercase_filter", config.enable_uppercase_filter ? "1" : "0", + "--enable_lowercase_filter", config.enable_lowercase_filter ? "1" : "0", "--emotes_pickle", kEmotesPickle, "--gpu_idx", std::to_string(config.gpu_idx), "--keybind", Quote(config.keybind), diff --git a/Scripts/transcribe.py b/Scripts/transcribe.py index 49dcc81..7ba80dc 100644 --- a/Scripts/transcribe.py +++ b/Scripts/transcribe.py @@ -217,7 +217,14 @@ def transcribe(audio_state, model, frames, use_cpu: bool): return "".join(s.text for s in segments) -def transcribeAudio(audio_state, model, use_cpu: bool, enable_uwu_filter: bool): +def transcribeAudio(audio_state, + model, + use_cpu: bool, + enable_uwu_filter: bool, + remove_trailing_period: bool, + enable_uppercase_filter: bool, + enable_lowercase_filter: bool, + ): last_transcribe_time = time.time() while audio_state.run_app == True: # Pace this out @@ -267,6 +274,13 @@ def transcribeAudio(audio_state, model, use_cpu: bool, enable_uwu_filter: bool): uwu_text = uwu_text.replace("\n", "") uwu_text = uwu_text.replace("\r", "") filtered_text = uwu_text + if remove_trailing_period: + if len(filtered_text) > 0 and filtered_text[-1] == '.': + filtered_text = filtered_text[0:len(filtered_text)-1] + if enable_uppercase_filter: + filtered_text = filtered_text.upper() + if enable_lowercase_filter: + filtered_text = filtered_text.lower() audio_state.filtered_text = filtered_text now = time.time() @@ -484,6 +498,9 @@ def transcribeLoop(mic: str, use_cpu: bool, use_builtin: bool, enable_uwu_filter: bool, + remove_trailing_period: bool, + enable_uppercase_filter: bool, + enable_lowercase_filter: bool, button: str, estate: EmotesState, window_duration_s: int, @@ -516,7 +533,9 @@ def transcribeLoop(mic: str, transcribe_audio_thd = threading.Thread( target = transcribeAudio, - args = [audio_state, model, use_cpu, enable_uwu_filter]) + args = [audio_state, model, use_cpu, enable_uwu_filter, + remove_trailing_period, enable_uppercase_filter, + enable_lowercase_filter]) transcribe_audio_thd.daemon = True transcribe_audio_thd.start() @@ -581,6 +600,9 @@ if __name__ == "__main__": parser.add_argument("--cpu", type=int, help="If set to 1, use CPU instead of GPU") parser.add_argument("--use_builtin", type=int, help="If set to 1, use the text box built into the game.") parser.add_argument("--enable_uwu_filter", type=int, help="If set to 1, transcribed text will be passed through an uwu filter :3.") + parser.add_argument("--remove_trailing_period", type=int, help="If set to 1, trailing period will be removed.") + parser.add_argument("--enable_uppercase_filter", type=int, help="If set to 1, transcriptions will be converted to UPPERCASE.") + parser.add_argument("--enable_lowercase_filter", type=int, help="If set to 1, transcriptions will be converted to lowercase.") parser.add_argument("--button", type=str, help="The controller button used to start/stop transcription. E.g. \"left joystick\"") parser.add_argument("--emotes_pickle", type=str, help="The path to emotes pickle. See emotes_v2.py for details.") parser.add_argument("--gpu_idx", type=str, help="The index of the GPU device to use. On single GPU systems, use 0.") @@ -636,6 +658,21 @@ if __name__ == "__main__": else: args.enable_uwu_filter = False + if args.remove_trailing_period == 1: + args.remove_trailing_period = True + else: + args.remove_trailing_period = False + + if args.enable_uppercase_filter == 1: + args.enable_uppercase_filter = True + else: + args.enable_uppercase_filter = False + + if args.enable_lowercase_filter == 1: + args.enable_lowercase_filter = True + else: + args.enable_lowercase_filter = False + estate = EmotesState() estate.load(args.emotes_pickle) @@ -646,8 +683,16 @@ if __name__ == "__main__": print(f"PATH: {os.environ['PATH']}") - transcribeLoop(args.mic, args.language, args.model, args.enable_local_beep, - args.cpu, args.use_builtin, args.enable_uwu_filter, args.button, + transcribeLoop(args.mic, + args.language, + args.model, + args.enable_local_beep, + args.cpu, args.use_builtin, + args.enable_uwu_filter, + args.remove_trailing_period, + args.enable_uppercase_filter, + args.enable_lowercase_filter, + args.button, estate, window_duration_s, args.gpu_idx, args.keybind) -- cgit v1.2.3