add word filter
This commit is contained in:
18
VRCT.py
18
VRCT.py
@@ -4,6 +4,7 @@ import queue
|
|||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
import customtkinter
|
import customtkinter
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
from flashtext import KeywordProcessor
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
import osc_tools
|
import osc_tools
|
||||||
@@ -21,9 +22,11 @@ class App(customtkinter.CTk):
|
|||||||
|
|
||||||
# init instance
|
# init instance
|
||||||
self.translator = translation.Translator()
|
self.translator = translation.Translator()
|
||||||
|
self.keyword_processor = KeywordProcessor()
|
||||||
|
|
||||||
# init config
|
# init config
|
||||||
self.PATH_CONFIG = "./config.json"
|
self.PATH_CONFIG = "./config.json"
|
||||||
|
|
||||||
## main window
|
## main window
|
||||||
self.ENABLE_TRANSLATION = False
|
self.ENABLE_TRANSLATION = False
|
||||||
self.ENABLE_TRANSCRIPTION_SEND = False
|
self.ENABLE_TRANSCRIPTION_SEND = False
|
||||||
@@ -48,6 +51,7 @@ class App(customtkinter.CTk):
|
|||||||
self.INPUT_MIC_RECORD_TIMEOUT = 3
|
self.INPUT_MIC_RECORD_TIMEOUT = 3
|
||||||
self.INPUT_MIC_PHRASE_TIMEOUT = 3
|
self.INPUT_MIC_PHRASE_TIMEOUT = 3
|
||||||
self.INPUT_MIC_MAX_PHRASES = 10
|
self.INPUT_MIC_MAX_PHRASES = 10
|
||||||
|
self.INPUT_MIC_WORD_FILTER = []
|
||||||
## Transcription Receive
|
## Transcription Receive
|
||||||
self.CHOICE_SPEAKER_DEVICE = audio_utils.get_default_output_device()["name"]
|
self.CHOICE_SPEAKER_DEVICE = audio_utils.get_default_output_device()["name"]
|
||||||
self.INPUT_SPEAKER_VOICE_LANGUAGE = list(languages.transcription_lang.keys())[1]
|
self.INPUT_SPEAKER_VOICE_LANGUAGE = list(languages.transcription_lang.keys())[1]
|
||||||
@@ -139,6 +143,9 @@ class App(customtkinter.CTk):
|
|||||||
if "INPUT_MIC_MAX_PHRASES" in config.keys():
|
if "INPUT_MIC_MAX_PHRASES" in config.keys():
|
||||||
if type(config["INPUT_MIC_MAX_PHRASES"]) is int:
|
if type(config["INPUT_MIC_MAX_PHRASES"]) is int:
|
||||||
self.INPUT_MIC_MAX_PHRASES = config["INPUT_MIC_MAX_PHRASES"]
|
self.INPUT_MIC_MAX_PHRASES = config["INPUT_MIC_MAX_PHRASES"]
|
||||||
|
if "INPUT_MIC_WORD_FILTER" in config.keys():
|
||||||
|
if type(config["INPUT_MIC_WORD_FILTER"]) is list:
|
||||||
|
self.INPUT_MIC_WORD_FILTER = config["INPUT_MIC_WORD_FILTER"]
|
||||||
|
|
||||||
if "CHOICE_SPEAKER_DEVICE" in config.keys():
|
if "CHOICE_SPEAKER_DEVICE" in config.keys():
|
||||||
if config["CHOICE_SPEAKER_DEVICE"] in [device["name"] for device in audio_utils.get_output_device_list()]:
|
if config["CHOICE_SPEAKER_DEVICE"] in [device["name"] for device in audio_utils.get_output_device_list()]:
|
||||||
@@ -201,6 +208,7 @@ class App(customtkinter.CTk):
|
|||||||
"INPUT_MIC_RECORD_TIMEOUT": self.INPUT_MIC_RECORD_TIMEOUT,
|
"INPUT_MIC_RECORD_TIMEOUT": self.INPUT_MIC_RECORD_TIMEOUT,
|
||||||
"INPUT_MIC_PHRASE_TIMEOUT": self.INPUT_MIC_PHRASE_TIMEOUT,
|
"INPUT_MIC_PHRASE_TIMEOUT": self.INPUT_MIC_PHRASE_TIMEOUT,
|
||||||
"INPUT_MIC_MAX_PHRASES": self.INPUT_MIC_MAX_PHRASES,
|
"INPUT_MIC_MAX_PHRASES": self.INPUT_MIC_MAX_PHRASES,
|
||||||
|
"INPUT_MIC_WORD_FILTER": self.INPUT_MIC_WORD_FILTER,
|
||||||
"CHOICE_SPEAKER_DEVICE": self.CHOICE_SPEAKER_DEVICE,
|
"CHOICE_SPEAKER_DEVICE": self.CHOICE_SPEAKER_DEVICE,
|
||||||
"INPUT_SPEAKER_VOICE_LANGUAGE": self.INPUT_SPEAKER_VOICE_LANGUAGE,
|
"INPUT_SPEAKER_VOICE_LANGUAGE": self.INPUT_SPEAKER_VOICE_LANGUAGE,
|
||||||
"INPUT_SPEAKER_ENERGY_THRESHOLD": self.INPUT_SPEAKER_ENERGY_THRESHOLD,
|
"INPUT_SPEAKER_ENERGY_THRESHOLD": self.INPUT_SPEAKER_ENERGY_THRESHOLD,
|
||||||
@@ -392,6 +400,10 @@ class App(customtkinter.CTk):
|
|||||||
else:
|
else:
|
||||||
self.checkbox_foreground.deselect()
|
self.checkbox_foreground.deselect()
|
||||||
|
|
||||||
|
## set word filter
|
||||||
|
for f in self.INPUT_MIC_WORD_FILTER:
|
||||||
|
self.keyword_processor.add_keyword(f)
|
||||||
|
|
||||||
## set bind entry message box
|
## set bind entry message box
|
||||||
self.entry_message_box.bind("<Return>", self.entry_message_box_press_key_enter)
|
self.entry_message_box.bind("<Return>", self.entry_message_box_press_key_enter)
|
||||||
self.entry_message_box.bind("<Any-KeyPress>", self.entry_message_box_press_key_any)
|
self.entry_message_box.bind("<Any-KeyPress>", self.entry_message_box_press_key_any)
|
||||||
@@ -459,6 +471,12 @@ class App(customtkinter.CTk):
|
|||||||
self.mic_transcriber.transcribe_audio_queue(self.mic_audio_queue)
|
self.mic_transcriber.transcribe_audio_queue(self.mic_audio_queue)
|
||||||
message = self.mic_transcriber.get_transcript()
|
message = self.mic_transcriber.get_transcript()
|
||||||
if len(message) > 0:
|
if len(message) > 0:
|
||||||
|
# word filter
|
||||||
|
if len(self.keyword_processor.extract_keywords(message)) != 0:
|
||||||
|
utils.print_textbox(self.textbox_message_log, f"Detect WordFilter :{message}", "INFO")
|
||||||
|
utils.print_textbox(self.textbox_message_system_log, f"Detect WordFilter :{message}", "INFO")
|
||||||
|
return
|
||||||
|
|
||||||
# translate
|
# translate
|
||||||
if self.checkbox_translation.get() is False:
|
if self.checkbox_translation.get() is False:
|
||||||
voice_message = f"{message}"
|
voice_message = f"{message}"
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
import customtkinter
|
import customtkinter
|
||||||
|
from flashtext import KeywordProcessor
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
import audio_utils
|
import audio_utils
|
||||||
import languages
|
import languages
|
||||||
@@ -346,6 +348,23 @@ class ToplevelWindowConfig(customtkinter.CTkToplevel):
|
|||||||
self.entry_input_mic_max_phrases.grid(row=row, column=1, columnspan=1 ,padx=padx, pady=pady, sticky="nsew")
|
self.entry_input_mic_max_phrases.grid(row=row, column=1, columnspan=1 ,padx=padx, pady=pady, sticky="nsew")
|
||||||
self.entry_input_mic_max_phrases.bind("<Any-KeyRelease>", self.entry_input_mic_max_phrases_callback)
|
self.entry_input_mic_max_phrases.bind("<Any-KeyRelease>", self.entry_input_mic_max_phrases_callback)
|
||||||
|
|
||||||
|
## entry input mic word filter
|
||||||
|
row +=1
|
||||||
|
self.label_input_mic_word_filter = customtkinter.CTkLabel(
|
||||||
|
self.tabview_config.tab("Transcription"),
|
||||||
|
text="Input Mic Word Filter:",
|
||||||
|
fg_color="transparent",
|
||||||
|
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||||
|
)
|
||||||
|
self.label_input_mic_word_filter.grid(row=row, column=0, columnspan=1, padx=padx, pady=pady, sticky="nsw")
|
||||||
|
self.entry_input_mic_word_filter = customtkinter.CTkEntry(
|
||||||
|
self.tabview_config.tab("Transcription"),
|
||||||
|
textvariable=customtkinter.StringVar(value=",".join(self.parent.INPUT_MIC_WORD_FILTER)),
|
||||||
|
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||||
|
)
|
||||||
|
self.entry_input_mic_word_filter.grid(row=row, column=1, columnspan=1 ,padx=padx, pady=pady, sticky="nsew")
|
||||||
|
self.entry_input_mic_word_filter.bind("<Any-KeyRelease>", self.entry_input_mic_word_filters_callback)
|
||||||
|
|
||||||
## optionmenu input speaker device
|
## optionmenu input speaker device
|
||||||
row +=1
|
row +=1
|
||||||
self.label_input_speaker_device = customtkinter.CTkLabel(
|
self.label_input_speaker_device = customtkinter.CTkLabel(
|
||||||
@@ -613,6 +632,8 @@ class ToplevelWindowConfig(customtkinter.CTkToplevel):
|
|||||||
self.entry_input_mic_phrase_timeout.configure(font=customtkinter.CTkFont(family=choice))
|
self.entry_input_mic_phrase_timeout.configure(font=customtkinter.CTkFont(family=choice))
|
||||||
self.label_input_mic_max_phrases.configure(font=customtkinter.CTkFont(family=choice))
|
self.label_input_mic_max_phrases.configure(font=customtkinter.CTkFont(family=choice))
|
||||||
self.entry_input_mic_max_phrases.configure(font=customtkinter.CTkFont(family=choice))
|
self.entry_input_mic_max_phrases.configure(font=customtkinter.CTkFont(family=choice))
|
||||||
|
self.label_input_mic_word_filter.configure(font=customtkinter.CTkFont(family=choice))
|
||||||
|
self.entry_input_mic_word_filter.configure(font=customtkinter.CTkFont(family=choice))
|
||||||
self.label_input_speaker_device.configure(font=customtkinter.CTkFont(family=choice))
|
self.label_input_speaker_device.configure(font=customtkinter.CTkFont(family=choice))
|
||||||
self.optionmenu_input_speaker_device.configure(font=customtkinter.CTkFont(family=choice))
|
self.optionmenu_input_speaker_device.configure(font=customtkinter.CTkFont(family=choice))
|
||||||
self.optionmenu_input_speaker_device._dropdown_menu.configure(font=customtkinter.CTkFont(family=choice))
|
self.optionmenu_input_speaker_device._dropdown_menu.configure(font=customtkinter.CTkFont(family=choice))
|
||||||
@@ -734,6 +755,13 @@ class ToplevelWindowConfig(customtkinter.CTkToplevel):
|
|||||||
self.parent.INPUT_MIC_MAX_PHRASES = int(self.entry_input_mic_max_phrases.get())
|
self.parent.INPUT_MIC_MAX_PHRASES = int(self.entry_input_mic_max_phrases.get())
|
||||||
utils.save_json(self.parent.PATH_CONFIG, "INPUT_MIC_MAX_PHRASES", self.parent.INPUT_MIC_MAX_PHRASES)
|
utils.save_json(self.parent.PATH_CONFIG, "INPUT_MIC_MAX_PHRASES", self.parent.INPUT_MIC_MAX_PHRASES)
|
||||||
|
|
||||||
|
def entry_input_mic_word_filters_callback(self, event):
|
||||||
|
self.parent.INPUT_MIC_WORD_FILTER = self.entry_input_mic_word_filter.get().split(",")
|
||||||
|
self.parent.keyword_processor = KeywordProcessor()
|
||||||
|
for f in self.parent.INPUT_MIC_WORD_FILTER:
|
||||||
|
self.parent.keyword_processor.add_keyword(f)
|
||||||
|
utils.save_json(self.parent.PATH_CONFIG, "INPUT_MIC_WORD_FILTER", self.parent.INPUT_MIC_WORD_FILTER)
|
||||||
|
|
||||||
def optionmenu_input_speaker_device_callback(self, choice):
|
def optionmenu_input_speaker_device_callback(self, choice):
|
||||||
self.parent.CHOICE_SPEAKER_DEVICE = choice
|
self.parent.CHOICE_SPEAKER_DEVICE = choice
|
||||||
utils.save_json(self.parent.PATH_CONFIG, "CHOICE_SPEAKER_DEVICE", self.parent.CHOICE_SPEAKER_DEVICE)
|
utils.save_json(self.parent.PATH_CONFIG, "CHOICE_SPEAKER_DEVICE", self.parent.CHOICE_SPEAKER_DEVICE)
|
||||||
|
|||||||
Reference in New Issue
Block a user