提交 4ac21ba5 编写于 作者: xuchaoxin1375's avatar xuchaoxin1375

client has multiple tags

上级 c6eaf594
......@@ -5,10 +5,23 @@ from joblib import load
from audio.core import get_used_keys
from audio.graph import showFreqGraph, showMelFreqGraph, showWaveForm
from config.EF import ava_algorithms, ava_emotions, ava_features
from config.MetaPath import (ava_dbs, bclf, brgr, emodb,
get_example_audio_file, ravdess, savee)
from config.MetaPath import (
ava_dbs,
bclf,
brgr,
emodb,
get_example_audio_file,
ravdess,
savee,
)
from recognizer.basic import EmotionRecognizer
from recognizer.deep import DeepEmotionRecognizer
import sys
def import_config_bookmark():
pass
##
......@@ -35,16 +48,79 @@ def get_algos_elements_list():
return algos_radios
def create_border_frame(result="inputYourContentToHighligt", key="border"):
"""创建一个带边框的布局窗口
Parameters
----------
key : str, optional
_description_, by default "border"
examples:
-
# 创建一个使用border_frame的布局
demo_border_layout = [
[sg.Text("Enter a number:"), sg.Input(key="-NUMBER-")],
[sg.Button("Calculate"), sg.Button("Exit")],
[create_border_frame(**kwargs)]
]
Returns
-------
layout
"""
# 创建一个带边框区域
res_layout = [
[sg.Text(f"{result}", font=("Helvetica", 24,"bold"),background_color="green",text_color="red",key=f"{key}")],
[sg.HorizontalSeparator()],
# [sg.Text("Result: "), sg.Text("", size=(20, 1),)]
]
frame = sg.Frame(
"Result Area",
res_layout,
relief=sg.RELIEF_SUNKEN,
border_width=2,
)
return frame
##
# ---create the window---
def make_window(size=None):
def make_window(theme=None, size=None):
if theme:
sg.theme(theme)
menu_def = [["&Application", ["E&xit"]], ["&Help", ["&About"]]]
# 据我观察,通常布局的类型为list[list[element]],也就是说,是一个关于sg组件元素的二轴数组布局,不妨称之为基础布局
# 并且,若我们将排放在同一行的元素,(称他们为一个元素序列),元素序列的包含sg.<element>个数可以是>=1的
# 从这个角度理解,那么布局可以理解为`元素序列`按照shape=(-1,1)的形状排放
# 尽管有这样的嵌套约束,但是PySimpleGui提供了一些用于嵌套的组件,例如sg.Column
# 我们可以基础布局作为Column组件的参数,然后我可以将Column作为组件放到一个新的基础组件中,这样就好像嵌套一个更深的层布局
# 在实践中,比较少用过度变量,但是用来作为划分(设计)用途还是不错的,甚至设计完毕后可以销毁这些临时子布局变量
# ---choose theme---
theme_layout = [
[
sg.Text(
"See how elements look under different themes by choosing a different theme here!"
)
],
[
sg.Listbox(
values=sg.theme_list(),
size=(20, 12),
key="-THEME LISTBOX-",
enable_events=True,
)
],
[sg.Button("Set Theme")],
]
# ---create 2 column layout---
# ---column left---
db_choose_layout = [
[sg.Text("Select the training database")],
[sg.Combo(ava_dbs, key="train_db", default_value=emodb)],
......@@ -57,10 +133,12 @@ def make_window(size=None):
e_config_layout = [
[
sg.Text("choose the emotion config:"),
],
[
sg.Text(
"请选择一个情感组合进行试验:推荐组合AS,HNS,AHNS,AHNPS\n\
注意,savee库种的`surprise`和`pleasantSurprise`)有一定区别,所以AHNPS组合不推荐用于savee上"
),
注意,savee库种的`surprise`和`pleasantSurprise`)有一定区别,\n所以AHNPS组合不推荐用于savee上"
)
],
[
sg.Checkbox("angry", key="angry", default=True),
......@@ -84,7 +162,7 @@ def make_window(size=None):
],
[sg.Button("OK2"), sg.Button("Cancel")],
]
# ---column right---
algos = get_algos_elements_list()
len_of_algos = len(algos)
algos_layout = [
......@@ -112,7 +190,8 @@ def make_window(size=None):
emotion_recognition_layout = [
[sg.Text("识别该语音文件的情感")],
[sg.B("OK5")],
[sg.Text(f"识别结果:{re_result}", key="emotion_recognition_res")],
# [sg.Text(f"识别结果:{re_result}", key="emotion_recognition_res")],
[create_border_frame(result=re_result, key="emotion_recognition_res")],
]
draw_layout = [
......@@ -125,28 +204,131 @@ def make_window(size=None):
],
[sg.Button("OK6"), sg.Button("Cancel")],
]
# ---辅助信息---
ML_KEY = "-ML-" # Multline's key
__version__ = "1.1"
right_info_layout = [
[
sg.Multiline(
size=(70, 21),
write_only=True,
# expand_x=True,
expand_y=True,
key=ML_KEY,
reroute_stdout=True,
echo_stdout_stderr=True,
reroute_cprint=True,
)
],
[sg.T("CCSER Client By Cxxu_zjgsu " + __version__)],
[
sg.T(
"PySimpleGUI ver "
+ sg.version.split(" ")[0]
+ " tkinter ver "
+ sg.tclversion_detailed,
font="Default 8",
pad=(0, 0),
)
],
[sg.T("Python ver " + sys.version, font="Default 8", pad=(0, 0))],
[
sg.T(
"Interpreter " + sg.execute_py_get_interpreter(),
font="Default 8",
pad=(0, 0),
)
],
]
# output tab
logging_layout = [
[sg.Text("Anything printed will display here!")],
[
sg.Multiline(
size=(60, 15),
font="Courier 8",
# expand_x=True,
# expand_y=True,
write_only=True,
reroute_stdout=True,
reroute_stderr=True,
echo_stdout_stderr=True,
autoscroll=True,
auto_refresh=True,
)
]
]
settings_layout = [
[sg.Text("Settings")],
]+theme_layout
# ---column divide---
column_left = db_choose_layout + e_config_layout + f_config_layout
column_right = (
algos_layout + file_choose_layout + emotion_recognition_layout + draw_layout
algos_layout
+ file_choose_layout
+ emotion_recognition_layout
+ draw_layout
+ right_info_layout
)
column_left_layout = sg.Column(column_left, expand_x=True, expand_y=True)
column_right_layout = sg.Column(column_right, expand_x=True, expand_y=True)
# ----full layout----
layout = [
[
sg.Pane(
column_left_layout = sg.Column(
column_left, expand_x=True, expand_y=True, element_justification="l"
)
column_right_layout = sg.Column(
column_right, expand_x=True, expand_y=True, element_justification="c"
)
main_pane = sg.Pane(
[column_left_layout, column_right_layout],
orientation="h",
expand_x=True,
expand_y=True,
k="-PANE-",
)
main_tab_layout = [
[
sg.Text(
"Welcome to experience with CCSER Client!",
size=(45, 1),
justification="center",
font=("Helvetica", 16),
relief=sg.RELIEF_RIDGE,
k="-TEXT HEADING-",
enable_events=True,
)
],
[
main_pane
],
[sg.B("Quit")],
]
# ----full layout----
#--top Menu bar---
Menubar_layout=[[sg.MenubarCustom(menu_def, key="-MENU-", font="Courier 15", tearoff=True)]]
# ---tabs---
tabs_layout=[
[
sg.TabGroup(
[
[
sg.Tab("Input Elements", main_tab_layout),
sg.Tab("Output", logging_layout),
sg.Tab("Settings",settings_layout)
]
],
key="-TAB GROUP-",
expand_x=True,
expand_y=True,
),
]
]
layout = Menubar_layout+tabs_layout
# ---create window
window = sg.Window(
title="ccser_client",
......@@ -158,11 +340,11 @@ def make_window(size=None):
return window
audio_selected=""
audio_selected = ""
def main():
window = make_window(size)
def main():
window = make_window(size=size)
# Initialize the selected databases list
# 语料库的选择
......@@ -296,15 +478,16 @@ def main():
window.close()
def recognize(window, train_db, test_db, e_config, f_config, algorithm, audio_selected):
print("开始识别..")
bclf = load(bclf)
bclf_estimators = load(bclf)
# audio_selected=get_example_audio_file()
# None表示自动计算best_ML_model
ML_estimators = {
estimator.__class__.__name__: estimator for estimator, _, _ in bclf
estimator.__class__.__name__: estimator for estimator, _, _ in bclf_estimators
}
ML_estimators["BEST_ML_MODEL"] = None
# if algorithm=='BEST_ML_MODEL':
......@@ -335,5 +518,6 @@ def recognize(window, train_db, test_db, e_config, f_config, algorithm, audio_se
print(f"{re_result=}")
window["emotion_recognition_res"].update(f"{re_result}")
if __name__=="__main__":
if __name__ == "__main__":
main()
......@@ -416,5 +416,34 @@ if __name__ == "__main__":
# demo_event_value()
# demoCombo()
# radio_choose_demo()
demo_finalize()
# demo_finalize()
pass
import PySimpleGUI as sg
# 创建一个带边框区域
frame_layout = [[sg.Text("Important Result", font=("Helvetica", 14))],
[sg.HorizontalSeparator()],
[sg.Text("Result: "), sg.Text("", size=(20, 1), key="-RESULT-")]]
frame = sg.Frame("Result Area", frame_layout, relief=sg.RELIEF_SUNKEN, border_width=2)
# 创建一个GUI窗口
layout = [[sg.Text("Enter a number:"), sg.Input(key="-NUMBER-")],
[sg.Button("Calculate"), sg.Button("Exit")],
[frame]]
window = sg.Window("My GUI", layout)
# 进入事件循环
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED or event == "Exit":
break
elif event == "Calculate":
number = int(values["-NUMBER-"])
result = number ** 2
window["-RESULT-"].update(str(result))
# 关闭窗口并退出程序
window.close()
##
"""
Example of (almost) all Elements, that you can use in PySimpleGUI.
Shows you the basics including:
......@@ -15,147 +16,276 @@
import PySimpleGUI as sg
def make_window(theme):
sg.theme(theme)
menu_def = [['&Application', ['E&xit']],
['&Help', ['&About']] ]
right_click_menu_def = [[], ['Edit Me', 'Versions', 'Nothing','More Nothing','Exit']]
graph_right_click_menu_def = [[], ['Erase','Draw Line', 'Draw',['Circle', 'Rectangle', 'Image'], 'Exit']]
menu_def = [["&Application", ["E&xit"]], ["&Help", ["&About"]]]
right_click_menu_def = [
[],
["Edit Me", "Versions", "Nothing", "More Nothing", "Exit"],
]
graph_right_click_menu_def = [
[],
["Erase", "Draw Line", "Draw", ["Circle", "Rectangle", "Image"], "Exit"],
]
# Table Data
data = [["John", 10], ["Jen", 5]]
headings = ["Name", "Score"]
input_layout = [
# [sg.Menu(menu_def, key='-MENU-')],
[sg.Text('Anything that requires user-input is in this tab!')],
[sg.Input(key='-INPUT-')],
[sg.Slider(orientation='h', key='-SKIDER-'),
sg.Image(data=sg.DEFAULT_BASE64_LOADING_GIF, enable_events=True, key='-GIF-IMAGE-'),],
[sg.Checkbox('Checkbox', default=True, k='-CB-')],
[sg.Radio('Radio1', "RadioDemo", default=True, size=(10,1), k='-R1-'), sg.Radio('Radio2', "RadioDemo", default=True, size=(10,1), k='-R2-')],
[sg.Combo(values=('Combo 1', 'Combo 2', 'Combo 3'), default_value='Combo 1', readonly=False, k='-COMBO-'),
sg.OptionMenu(values=('Option 1', 'Option 2', 'Option 3'), k='-OPTION MENU-'),],
[sg.Spin([i for i in range(1,11)], initial_value=10, k='-SPIN-'), sg.Text('Spin')],
[sg.Multiline('Demo of a Multi-Line Text Element!\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nYou get the point.', size=(45,5), expand_x=True, expand_y=True, k='-MLINE-')],
[sg.Button('Button'), sg.Button('Popup'), sg.Button(image_data=sg.DEFAULT_BASE64_ICON, key='-LOGO-')]]
asthetic_layout = [[sg.T('Anything that you would use for asthetics is in this tab!')],
[sg.Image(data=sg.DEFAULT_BASE64_ICON, k='-IMAGE-')],
[sg.ProgressBar(100, orientation='h', size=(20, 20), key='-PROGRESS BAR-'), sg.Button('Test Progress bar')]]
logging_layout = [[sg.Text("Anything printed will display here!")],
[sg.Multiline(size=(60,15), font='Courier 8', expand_x=True, expand_y=True, write_only=True,
reroute_stdout=True, reroute_stderr=True, echo_stdout_stderr=True, autoscroll=True, auto_refresh=True)]
# [sg.Output(size=(60,15), font='Courier 8', expand_x=True, expand_y=True)]
]
graphing_layout = [[sg.Text("Anything you would use to graph will display here!")],
[sg.Graph((200,200), (0,0),(200,200),background_color="black", key='-GRAPH-', enable_events=True,
right_click_menu=graph_right_click_menu_def)],
[sg.T('Click anywhere on graph to draw a circle')],
[sg.Table(values=data, headings=headings, max_col_width=25,
background_color='black',
auto_size_columns=True,
display_row_numbers=True,
justification='right',
num_rows=2,
alternating_row_color='black',
key='-TABLE-',
row_height=25)]]
popup_layout = [[sg.Text("Popup Testing")],
[sg.Button("Open Folder")],
[sg.Button("Open File")]]
theme_layout = [[sg.Text("See how elements look under different themes by choosing a different theme here!")],
[sg.Listbox(values = sg.theme_list(),
size =(20, 12),
key ='-THEME LISTBOX-',
enable_events = True)],
[sg.Button("Set Theme")]]
layout = [ [sg.MenubarCustom(menu_def, key='-MENU-', font='Courier 15', tearoff=True)],
[sg.Text('Demo Of (Almost) All Elements', size=(38, 1), justification='center', font=("Helvetica", 16), relief=sg.RELIEF_RIDGE, k='-TEXT HEADING-', enable_events=True)]]
layout +=[[sg.TabGroup([[ sg.Tab('Input Elements', input_layout),
sg.Tab('Asthetic Elements', asthetic_layout),
sg.Tab('Graphing', graphing_layout),
sg.Tab('Popups', popup_layout),
sg.Tab('Theming', theme_layout),
sg.Tab('Output', logging_layout)]], key='-TAB GROUP-', expand_x=True, expand_y=True),
]]
input_layout = [
# [sg.Menu(menu_def, key='-MENU-')],
[sg.Text("Anything that requires user-input is in this tab!")],
[sg.Input(key="-INPUT-")],
[
sg.Slider(orientation="h", key="-SKIDER-"),
sg.Image(
data=sg.DEFAULT_BASE64_LOADING_GIF,
enable_events=True,
key="-GIF-IMAGE-",
),
],
[sg.Checkbox("Checkbox", default=True, k="-CB-")],
[
sg.Radio("Radio1", "RadioDemo", default=True, size=(10, 1), k="-R1-"),
sg.Radio("Radio2", "RadioDemo", default=True, size=(10, 1), k="-R2-"),
],
[
sg.Combo(
values=("Combo 1", "Combo 2", "Combo 3"),
default_value="Combo 1",
readonly=False,
k="-COMBO-",
),
sg.OptionMenu(
values=("Option 1", "Option 2", "Option 3"), k="-OPTION MENU-"
),
],
[
sg.Spin([i for i in range(1, 11)], initial_value=10, k="-SPIN-"),
sg.Text("Spin"),
],
[
sg.Multiline(
"Demo of a Multi-Line Text Element!\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nYou get the point.",
size=(45, 5),
expand_x=True,
expand_y=True,
k="-MLINE-",
)
],
[
sg.Button("Button"),
sg.Button("Popup"),
sg.Button(image_data=sg.DEFAULT_BASE64_ICON, key="-LOGO-"),
],
]
asthetic_layout = [
[sg.T("Anything that you would use for asthetics is in this tab!")],
[sg.Image(data=sg.DEFAULT_BASE64_ICON, k="-IMAGE-")],
[
sg.ProgressBar(100, orientation="h", size=(20, 20), key="-PROGRESS BAR-"),
sg.Button("Test Progress bar"),
],
]
# output tab
logging_layout = [
[sg.Text("Anything printed will display here!")],
[
sg.Multiline(
size=(60, 15),
font="Courier 8",
expand_x=True,
expand_y=True,
write_only=True,
reroute_stdout=True,
reroute_stderr=True,
echo_stdout_stderr=True,
autoscroll=True,
auto_refresh=True,
)
]
# [sg.Output(size=(60,15), font='Courier 8', expand_x=True, expand_y=True)]
]
graphing_layout = [
[sg.Text("Anything you would use to graph will display here!")],
[
sg.Graph(
(200, 200),
(0, 0),
(200, 200),
background_color="black",
key="-GRAPH-",
enable_events=True,
right_click_menu=graph_right_click_menu_def,
)
],
[sg.T("Click anywhere on graph to draw a circle")],
[
sg.Table(
values=data,
headings=headings,
max_col_width=25,
background_color="black",
auto_size_columns=True,
display_row_numbers=True,
justification="right",
num_rows=2,
alternating_row_color="black",
key="-TABLE-",
row_height=25,
)
],
]
popup_layout = [
[sg.Text("Popup Testing")],
[sg.Button("Open Folder")],
[sg.Button("Open File")],
]
theme_layout = [
[
sg.Text(
"See how elements look under different themes by choosing a different theme here!"
)
],
[
sg.Listbox(
values=sg.theme_list(),
size=(20, 12),
key="-THEME LISTBOX-",
enable_events=True,
)
],
[sg.Button("Set Theme")],
]
layout = [
[sg.MenubarCustom(menu_def, key="-MENU-", font="Courier 15", tearoff=True)],
[
sg.Text(
"Demo Of (Almost) All Elements",
size=(38, 1),
justification="center",
font=("Helvetica", 16),
relief=sg.RELIEF_RIDGE,
k="-TEXT HEADING-",
enable_events=True,
)
],
]
layout += [
[
sg.TabGroup(
[
[
sg.Tab("Input Elements", input_layout),
sg.Tab("Asthetic Elements", asthetic_layout),
sg.Tab("Graphing", graphing_layout),
sg.Tab("Popups", popup_layout),
sg.Tab("Theming", theme_layout),
sg.Tab("Output", logging_layout),
]
],
key="-TAB GROUP-",
expand_x=True,
expand_y=True,
),
]
]
layout[-1].append(sg.Sizegrip())
window = sg.Window('All Elements Demo', layout, right_click_menu=right_click_menu_def, right_click_menu_tearoff=True, grab_anywhere=True, resizable=True, margins=(0,0), use_custom_titlebar=True, finalize=True, keep_on_top=True)
window = sg.Window(
"All Elements Demo",
layout,
right_click_menu=right_click_menu_def,
right_click_menu_tearoff=True,
grab_anywhere=True,
resizable=True,
margins=(0, 0),
use_custom_titlebar=True,
finalize=True,
keep_on_top=True,
)
window.set_min_size(window.size)
return window
def main():
window = make_window(sg.theme())
# This is an Event Loop
# This is an Event Loop
while True:
event, values = window.read(timeout=100)
# keep an animation running so show things are happening
window['-GIF-IMAGE-'].update_animation(sg.DEFAULT_BASE64_LOADING_GIF, time_between_frames=100)
window["-GIF-IMAGE-"].update_animation(
sg.DEFAULT_BASE64_LOADING_GIF, time_between_frames=100
)
if event not in (sg.TIMEOUT_EVENT, sg.WIN_CLOSED):
print('============ Event = ', event, ' ==============')
print('-------- Values Dictionary (key=value) --------')
print("============ Event = ", event, " ==============")
print("-------- Values Dictionary (key=value) --------")
for key in values:
print(key, ' = ',values[key])
if event in (None, 'Exit'):
print(key, " = ", values[key])
if event in (None, "Exit"):
print("[LOG] Clicked Exit!")
break
elif event == 'About':
elif event == "About":
print("[LOG] Clicked About!")
sg.popup('PySimpleGUI Demo All Elements',
'Right click anywhere to see right click menu',
'Visit each of the tabs to see available elements',
'Output of event and values can be see in Output tab',
'The event and values dictionary is printed after every event', keep_on_top=True)
elif event == 'Popup':
sg.popup(
"PySimpleGUI Demo All Elements",
"Right click anywhere to see right click menu",
"Visit each of the tabs to see available elements",
"Output of event and values can be see in Output tab",
"The event and values dictionary is printed after every event",
keep_on_top=True,
)
elif event == "Popup":
print("[LOG] Clicked Popup Button!")
sg.popup("You pressed a button!", keep_on_top=True)
print("[LOG] Dismissing Popup!")
elif event == 'Test Progress bar':
elif event == "Test Progress bar":
print("[LOG] Clicked Test Progress Bar!")
progress_bar = window['-PROGRESS BAR-']
progress_bar = window["-PROGRESS BAR-"]
for i in range(100):
print("[LOG] Updating progress bar by 1 step ("+str(i)+")")
print("[LOG] Updating progress bar by 1 step (" + str(i) + ")")
progress_bar.update(current_count=i + 1)
print("[LOG] Progress bar complete!")
elif event == "-GRAPH-":
graph = window['-GRAPH-'] # type: sg.Graph
graph.draw_circle(values['-GRAPH-'], fill_color='yellow', radius=20)
print("[LOG] Circle drawn at: " + str(values['-GRAPH-']))
graph = window["-GRAPH-"] # type: sg.Graph
graph.draw_circle(values["-GRAPH-"], fill_color="yellow", radius=20)
print("[LOG] Circle drawn at: " + str(values["-GRAPH-"]))
elif event == "Open Folder":
print("[LOG] Clicked Open Folder!")
folder_or_file = sg.popup_get_folder('Choose your folder', keep_on_top=True)
folder_or_file = sg.popup_get_folder("Choose your folder", keep_on_top=True)
sg.popup("You chose: " + str(folder_or_file), keep_on_top=True)
print("[LOG] User chose folder: " + str(folder_or_file))
elif event == "Open File":
print("[LOG] Clicked Open File!")
folder_or_file = sg.popup_get_file('Choose your file', keep_on_top=True)
folder_or_file = sg.popup_get_file("Choose your file", keep_on_top=True)
sg.popup("You chose: " + str(folder_or_file), keep_on_top=True)
print("[LOG] User chose file: " + str(folder_or_file))
elif event == "Set Theme":
print("[LOG] Clicked Set Theme!")
theme_chosen = values['-THEME LISTBOX-'][0]
theme_chosen = values["-THEME LISTBOX-"][0]
print("[LOG] User Chose Theme: " + str(theme_chosen))
window.close()
window = make_window(theme_chosen)
elif event == 'Edit Me':
elif event == "Edit Me":
sg.execute_editor(__file__)
elif event == 'Versions':
sg.popup_scrolled(__file__, sg.get_versions(), keep_on_top=True, non_blocking=True)
elif event == "Versions":
sg.popup_scrolled(
__file__, sg.get_versions(), keep_on_top=True, non_blocking=True
)
window.close()
exit(0)
if __name__ == '__main__':
sg.theme('black')
sg.theme('dark red')
sg.theme('dark green 7')
if __name__ == "__main__":
sg.theme("black")
sg.theme("dark red")
sg.theme("dark green 7")
# sg.theme('DefaultNoMoreNagging')
main()
\ No newline at end of file
main()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册